记一次微信二次分享中signature签名失败的问题

在h5微信环境中,需要自定义去微信分享小卡片

我一顿配置,根据官方文档配置完后,打包到测试环境,第一次分享出去一切正常。

逻辑代码如下图(vue mixin)【不是重点,就是正常配置 可参考】

import wx from 'weixin-js-sdk';

export default {
    data () {
        return {
            isready: false
        }
    },
    methods: {
        async getWxConfig ({ title, link, imgUrl, desc, dataUrl = '' }) {
            const res = await wxShare(location.href)
            const config = res.data.data;
            const jsApiList = [
                'updateAppMessageShareData',
                'updateTimelineShareData',
                'onMenuShareTimeline',
                'onMenuShareAppMessage'
            ];
            // console.log('config', config, res.data)
            const {
                appId, timestamp, nonceStr, signature
            } = config;


            wx.checkJsApi({
                jsApiList, // 需要检测的JS接口列表,所有JS接口列表见附录2,
                success: (r) => {
                    console.log('checkJsApi success,', r);
                },
                error: (e) => {
                    console.log('error', e)
                }
            });
            wx.config({
                debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                appId, // 必填,公众号的唯一标识
                timestamp, // 必填,生成签名的时间戳
                nonceStr, // 必填,生成签名的随机串
                signature, // 必填,签名
                jsApiList// 必填,需要使用的JS接口列表
            });

            wx.error((e) => {
                // alert('出错了:' + res.errMsg) //这个地方的好处就是wx.config配置错误,会弹出窗口哪里错误,然后根据微信文档查询即可。
                console.log('error', e);
            });

            wx.ready(() => {
                console.log('ready')
                this.isready = true
                this.wx_share({ title, link, imgUrl, desc, dataUrl });
                // this.wx_TimelineShare({ title, link, imgUrl });
            });

        },
        wx_share ({ title, link, imgUrl, desc, dataUrl = '', type = 'link' }) {
            console.log({ title, link, imgUrl, desc, dataUrl, type })
            //微信好友
            wx.updateAppMessageShareData({
                title, // 分享标题
                desc, // 分享描述
                link, // 分享链接
                imgUrl, // 分享图标
                type, // 分享类型,music、video或link,不填默认为link
                dataUrl, // 如果type是music或video,则要提供数据链接,默认为空
                success: () => {
                    // 用户确认分享后执行的回调函数
                    console.log("updateAppMessageShareData, 111")
                },
                cancel: () => {
                    // 用户取消分享后执行的回调函数
                }
            });
        },
        wx_TimelineShare ({ title, link, imgUrl }) {
            //朋友圈
            wx.updateTimelineShareData({
                title, // 分享标题
                link, // 分享链接
                imgUrl, // 分享图标
                success: () => {
                    // 用户确认分享后执行的回调函数
                },
                cancel: () => {
                    // 用户取消分享后执行的回调函数
                }
            });
        }
    }
}

在/detail?status=1页面第一次分享

updateAppMessageShareData中的link: "https://域名/detail?a=1&b=2&c=3"

通过分享后的小卡片进来后页面渲染一切正常,我就试了一下在当前页再分享一次,这时候离异事件来了,报错!!!控制台显示 签名失败 signature error!

为啥呢???

通过排查,最后发现其实是link中的&符号,也就是第一次分享我只有一个参数是正常的,第二次分享有多个参数用&拼接了就报错了。

处理方式:将 link中后面的search部分(参数)进行字符串转义

(注意:跳转进来后接收query参数的时候记得反转回来)

另外~细心的同学发现,为什么有的时候分享出去是卡片,有的是单纯的链接呢?

通过尝试,需要先收藏页面,然后通过微信里的 【我的】【收藏】点进去,再分享出来的就是小卡片了

官方还有其他方式,比如通过扫二维码等方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值