H5如何跳转打开微信小程序,如何短信直接唤起微信小程序?

1,197 阅读1分钟

最近有个需求是如何通过H5网页直接打开微信的小程序

参考了网上各个大佬的方法总算找到了

  1. 使用wxsdk的开放标签,但是这个标签局限在微信环境下才能显示,而且需要配置一堆签名,安全域名等等的。

跳转小程序的开放标签。文档 developers.weixin.qq.com/doc/offiacc…

                <wx-open-launch-weapp 
                id="launch-btn" username="gh_XXXXXXXXXX" path="pages/home/index/index">
                    <template>
                        <style>
                            .btn {
                                width: 200px;
                                height: 45px;
                                text-align: center;
                                font-size: 17px;
                                display: block;
                                margin: 0 auto;
                                padding: 8px 24px;
                                border: none;
                                border-radius: 4px;
                                background-color: #07c160;
                                color: #fff;
                            }
                        </style>
                        <button class="btn">打开小程序</button>
                    </template>
                </wx-open-launch-weapp>
  1. 使用 URL Scheme ,在移动端的环境下都可以使用,只需要生成链接即可直接打开微信并且打开小程序,而且iOS还支持短信场景直接打开,安卓需要经过H5跳转。

官方文档,developers.weixin.qq.com/miniprogram…

链接生成方式,打开小程序管理平台 微信截图_20210722141947.png

栗子:

<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>打开xxx小程序</title>
    <link rel="stylesheet" href="https://res.wx.qq.com/open/libs/weui/2.4.1/weui.min.css">
    </link>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
    <script src="https://res2.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
    <style>
        .hidden {
            display: none;
        }

        .full {
            position: absolute;
            top: 0;
            bottom: 0;
            left: 0;
            right: 0;
        }

        .public-web-container {
            display: flex;
            flex-direction: column;
            align-items: center;
        }

        .public-web-container p {
            position: absolute;
            top: 40%;
        }

        .public-web-container a {
            position: absolute;
            bottom: 40%;
        }

        .wechat-web-container {
            display: flex;
            flex-direction: column;
            align-items: center;
        }

        .wechat-web-container p {
            position: absolute;
            top: 40%;
        }

        .wechat-web-container wx-open-launch-weapp {
            position: absolute;
            bottom: 40%;
            left: 0;
            right: 0;
            display: flex;
            flex-direction: column;
            align-items: center;
        }

        .desktop-web-container {
            display: flex;
            flex-direction: column;
            align-items: center;
        }

        .desktop-web-container p {
            position: absolute;
            top: 40%;
        }
    </style>
</head>

<body>
    <div>
        <div class="page full">
            <div id="public-web-container" class="hidden">
                <p class="">正在打开 “xxx小程序”...</p> <!-- replace -->
                <a id="public-web-jump-button" href="javascript:" class="weui-btn weui-btn_primary weui-btn_loading"
                    onclick="openWeapp()">
                    <span id="public-web-jump-button-loading"
                        class="weui-primary-loading weui-primary-loading_transparent"><i
                            class="weui-primary-loading__dot"></i></span>
                    打开小程序
                </a>
            </div>
            <div id="wechat-web-container" class="hidden">
                <p class="">点击以下按钮打开 “xxx小程序”</p> <!-- replace -->
                <!-- 跳转小程序的开放标签。文档 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html -->
                <wx-open-launch-weapp id="launch-btn" username="gh_XXXXXXXXXX" path="pages/home/index/index">
                    <template>
                        <style>
                            .btn {
                                width: 200px;
                                height: 45px;
                                text-align: center;
                                font-size: 17px;
                                display: block;
                                margin: 0 auto;
                                padding: 8px 24px;
                                border: none;
                                border-radius: 4px;
                                background-color: #07c160;
                                color: #fff;
                            }
                        </style>
                        <button class="btn">打开小程序</button>
                    </template>
                </wx-open-launch-weapp>
            </div>
            <div id="desktop-web-container" class="hidden">
                <p class="">请在手机打开网页链接</p>
            </div>
        </div>
    </div>
    <script>
        $(function () {
            if (isWeixin()) {
                //微信端显示内容
                var containerEl = document.getElementById('wechat-web-container')
                containerEl.classList.remove('hidden')
                containerEl.classList.add('full', 'wechat-web-container')
                wxConfigFun();
            } else if (!isMobile()) {
                // 在 pc 上则给提示引导到手机端打开
                var containerEl = document.getElementById('desktop-web-container')
                containerEl.classList.remove('hidden')
                containerEl.classList.add('full', 'desktop-web-container')
            } else {
                //移动端显示标签
                var containerEl = document.getElementById('public-web-container')
                containerEl.classList.remove('hidden')
                containerEl.classList.add('full', 'public-web-container')
            }
        })
        //是否微信环境
        function isWeixin() {
            var ua = navigator.userAgent.toLowerCase()
            var isWXWork = ua.match(/wxwork/i) == 'wxwork'
            return !isWXWork && ua.match(/micromessenger/i) == 'micromessenger'
        }
        //是否移动端环境
        function isMobile() {
            if (navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|IEMobile)/i)) {
                return true
            } else {
                return false
            }
        }

        //移动端环境使用 URLScheme ,官方地址https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/url-scheme.html
        //****微信环境也可用,就可以不需要配置签名和安全域名什么的了
        function openWeapp() {
            var buttonEl = document.getElementById('public-web-jump-button')
            var buttonLoadingEl = document.getElementById('public-web-jump-button-loading')
            buttonEl.classList.remove('weui-btn_loading')
            buttonLoadingEl.classList.add('hidden')

            //URLScheme跳转 ,*TICKET*是需替换的内容
            location.href = 'weixin://dl/business/?t= *TICKET*'
        }

        //微信环境使用 <wx-open-launch-weapp>开放标签打开 -----【不是微信环境标签无法显示】
        function wxConfigFun() {
            //标签监听
            var btn = document.getElementById('launch-btn');
            btn.addEventListener('ready', function (e) {
                console.log('ready:success');
            });
            btn.addEventListener('launch', function (e) {
                console.log('launch:success');
            });
            btn.addEventListener('error', function (e) {
                console.log('fail', e.detail);
            })
            document.addEventListener('WeixinOpenTagsError', function (e) {
                console.error(e.detail.errMsg); // 无法使用开放标签的错误原因,需回退兼容。仅无法使用开发标签,JS-SDK其他功能不受影响
            });
            $.ajax({
                type: "post",
                url: "https://xxx.xxxxx.com/api/weChat/jssdksign",
                data: {
                    url: location.href
                },
                success(res) {
                    console.log('res', res.data)
                    var data = res.data;
                    wx.config({
                        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                        appId: data.appId, // 必填,公众号的唯一标识
                        timestamp: data.timestamp, // 必填,生成签名的时间戳
                        nonceStr: data.noncestr, // 必填,生成签名的随机串
                        signature: data.signature,// 必填,签名
                        jsApiList: ['onMenuShareAppMessage'], // 必填,需要使用的JS接口列表,[随便填但不能为空]
                        openTagList: ['wx-open-launch-weapp'] // 可选,需要使用的开放标签列表,例如['wx-open-launch-app']
                    });
                    wx.ready(function () {
                        console.log('ready')

                    });
                    wx.error(function (res) {
                        console.error(res)
                    });
                },
                fail(err) {

                }
            })
        }

    </script>
</body>

</html>

End --给时光以生命