微信公众号开发(七)微信h5跳转小程序及小游戏示例

简介: 最近公司做活动,需要从h5页面跳转至微信小游戏。当时接到这个需求的时候,就在想,这玩意能相互跳转么?后来百度了一下,还真行。

最近公司做活动,需要从h5页面跳转至微信小游戏。

当时接到这个需求的时候,就在想,这玩意能相互跳转么?

后来百度了一下,还真行。

H5跳转微信小程序/小游戏 微信官方文档:

developers.weixin.qq.com/doc/offiacc…

官方文档需要仔细看才能看明白,要按照人家的流程一步一步来,要不然可是会出问题的。

下面是我在测试阶段使用的测试代码(包括php代码)

下面 的代码将信息改成你自己的,理论上直接就能用。

index.html

xml

复制代码

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>跳转小程序</title>
    </head>
    <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
    <script src="../common/js/jquery-3.5.1.min.js"></script>
    <body>
        <div>为啥按钮不显示?</div>
        <div>
            <wx-open-launch-weapp
                id="launch-btn"
                username="gh_xxxxxxxxxxxx"
                path="/pages/index/index "
            >
                <template>
                    <style>
                        .btn {
                            padding: 12px;
                            width: 100%;
                            height: 50px;
                        }
                    </style>
                    <button class="btn">打开小程序</button>
                </template>
            </wx-open-launch-weapp>
        </div>
        <script>
            // 封装 ajax
            const getSdkPromission= () => {
                return new Promise((resolve, reject) => {
                    $.ajax({
                        type: 'POST',
                        data: {
                            url: location.href.split('#')[0]
                        },
                        url: "https://xxx.xxx.xxx/get_signpackage.php",
                        dataType: 'json',
                        success: function (data) {
                            //后台接口调用成功,开始配置微信
                            //  alert(data.timestamp);
                            wx.config({
                                debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                                appId: data.appId, // 必填,公众号的唯一标识
                                timestamp: data.timestamp, // 必填,生成签名的时间戳
                                nonceStr: data.nonceStr, // 必填,生成签名的随机串
                                signature: data.signature,// 必填,签名,见附录
                                jsApiList: [// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
                                    "chooseImage",
                                    "uploadImage",
                                ],
                                openTagList: ["wx-open-launch-weapp"]
                            });
                            resolve();
                        }
                    });
                });
            };
            window.onload = function() {
                console.log("onload");
                getSdkPromission().then(res => {
                    //=== 获取 config 的参数以及签名=== end
                    wx.ready(function() {
                        // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中
                        console.log("wx ready");
                    });
                    wx.error(function(res) {
                        // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中
                        console.log("res", res);
                    });
                    var btn = document.getElementById("launch-btn");
                    btn.addEventListener("launch", function(e) {
                        console.log("success");
                    });
                    btn.addEventListener("error", function(e) {
                        console.log("fail", e.detail);
                    });
                });
            };
        </script>
    </body>
</html>

get_signpackage.php

php

复制代码

<?php
$weixin = new Weixin();
$SignPackage = $weixin->getSignPackage($url);
echo json_encode($SignPackage, JSON_UNESCAPED_UNICODE);
class weixin {
    /**
     * @name: appid
     * @author: camellia
     * @date: 2021-02-22 
     */
    public $appid = 'qqqqqqqqqqqqqqqqqqqqqq';
    public $access_token = '1111111111111111111111111111111111111111111111111111';
    /**
     * @name: 创建随机字符串
     * @author: camellia
     * @date: 2021-02-22 
     */
    private function createNonceStr($length = 16)
    {
        $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        $str = "";
        for ($i = 0; $i < $length; $i++) 
        {
            $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
        }
        return $str;
    }
    /**
     * @name: 获取通行证
     * @author: camellia
     * @date: 2021-02-22 
     */
    private function getJsApiTicket()
    {
        $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=" . $this->access_token;
        $res = json_decode($this->httpGet($url));
        $JsApiTicket = $res->ticket;
        return $JsApiTicket;
    }
    /**
     * @name: 获取签名包
     * @author: camellia
     * @date: 2021-02-22 
     */
    public function getSignPackage($url)
    {
        $jsapiTicket = $this->getJsApiTicket();
        $timestamp = time();
        $nonceStr = $this->createNonceStr();
        // 这里参数的顺序要按照 key 值 ASCII 码升序排序
        $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=" . $url;
        $signature = sha1($string);
        $signPackage = array(
            "appId" => $this->appid,
            "nonceStr" => $nonceStr,
            "timestamp" => $timestamp,
            "url" => $url,
            "signature" => $signature,
            "rawString" => $string
        );
        return $signPackage;
    }
}

最终效果我就不展示了,没有找到手机录制gif动图的软件

有好的建议,请在下方输入你的评论。

欢迎访问个人博客 guanchao.site

欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”

目录
相关文章
|
2月前
|
人工智能 小程序 前端开发
一个小程序轻量AR体感游戏,开发实现解决方案
针对青少年运动兴趣不足问题,AR体感游戏凭借沉浸式互动体验脱颖而出。结合小程序“AI运动识别”插件与WebGL渲染技术,可实现无需外设的轻量化AR健身游戏,如跳糕、切水果等,兼具趣味性与锻炼效果,适用于儿童健身及职工团建,即开即玩,低门槛高参与。
|
2月前
|
移动开发 小程序 前端开发
小程序开发平台有哪些?哪个好
小程序的开发方式丰富多元,开发团队可根据自身的技术背景、项目具体需求以及资源状况,灵活挑选最为适宜的开发路径。以下将详细介绍几种主流的小程序开发方式。
285 1
|
2月前
|
运维 小程序 数据可视化
小程序开发平台有哪些?SaaS小程序制作平台哪个好
小程序开发模式详解:自主开发、SaaS小程序制作平台与外包全对比 选择合适的小程序开发模式,是项目成功的基石。这三种模式在成本、周期、控制力和灵活性上各有千秋,适用于不同阶段和不同类型的企业。下面我们将逐一深入剖析。
265 7
|
2月前
|
移动开发 小程序 前端开发
小程序快速开发平台有哪些?
小程序开发并非“一刀切”,需结合技术储备、资金预算、时间规划及功能需求等多维度因素综合考量。以下为您详细拆解五种主流开发方案及其适用场景,助您精准匹配开发路径。
186 3
|
2月前
|
移动开发 小程序 前端开发
小程序开发平台有哪些?小程序开发制作软件推荐
小程序开发方案全解析:5种主流方式与选择指南 小程序开发需根据技术能力、预算、时间及功能需求综合决策。以下为5种主流开发方案及适用场景分析:
431 0
|
3月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
4月前
|
小程序 JavaScript API
uni-halo + 微信小程序开发实录:我的第一个作品诞生记
这篇文章介绍了使用uni-halo框架进行微信小程序开发的过程,包括选择该框架的原因、开发目标以及项目配置和部署的步骤。
185 0
uni-halo + 微信小程序开发实录:我的第一个作品诞生记
|
7月前
|
小程序 前端开发 Android开发
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
1462 29
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡