微信二次分享报错,invalid signature

基于微信民众号开辟的h5页面(运用jssdk接口),由用户A分享给用户B,用户B再次分享这个页面时,不能胜利分享。题目出在用户B收到的分享链接与用户A翻开的链接差别
A用户的链接为

http://test.com/test.html

B用户收到的衔接

 http://test.com/test.html&from=singlemessage

from=singlemessage是微信客户端为了辨别分享泉源再链接后自动增加的标记,
再次分享时,须要在js代码中对自动猎取的衔接举行encodeURIComponent处置惩罚,背景再对收到的url举行urldecode处置惩罚。

js与php示例代码以下:
注重ajax,用的post,用get听说不必转义(get体式格局本人未做测试)

js代码

function share(){
    var nowurl         = window.location.href;
    var nowurlo     = nowurl.split('&')[0];
    $.ajax({
        type         : "post",
        url          : "***********************", //后端接口
        dataType     : "json",
        data         : { 'url': encodeURIComponent(nowurl) }, // 注重此处对nowurl举行encode;
        success      : function (data) {
            wx.config({
                        debug        : false,                //调试形式
                        appId        : data.appId,           //民众号appid
                        timestamp    : data.timestamp,       //时候戳
                        nonceStr     : data.noncestr,        //天生署名的随机串
                        signature    : data.signature,       //署名
                        jsApiList    : [
                            'updateAppMessageShareData',
                            'updateTimelineShareData',
                            'onMenuShareAppMessage',
                            'onMenuShareTimeline',
                            'chooseWXPay',
                            'showOptionMenu',
                            "hideMenuItems",
                            "showMenuItems",
                            "onMenuShareTimeline",
                            'onMenuShareAppMessage',
                    ] // 必填,须要运用的JS接口列表
            });
            wx.ready(function () {   //需在用户能够点击分享按钮前就先挪用
                wx.updateAppMessageShareData({ 
                    title    : '', // 分享题目
                    desc     : '', // 分享形貌
                    link     : nowurlo, // 自动猎取(上面js代码中)
                    imgUrl   : '', // 分享图标
                    success  : function () {
                    }
                });
                wx.updateTimelineShareData({ 
                    title     : '', // 分享题目
                    link      : nowurlo, 自动猎取(上面js代码中)
                    imgUrl    : '', // 分享图标
                    success   : function () {
                    },
                });
            });
            
        }
    });
}

php代码



 public function generateSignature(){
        $timestamp                     = time();
        $jsapiTicket                   = ;//此处猎取jsapi_ticket
        $noncestr                      = md5(uniqid(microtime(true),true));//我用的noncestr
        $url                           = urldecode(I('post.url'));
        $signature                     = sha1('jsapi_ticket=' . $jsapiTicket . '&noncestr=' . $noncestr . '&timestamp=' . $timestamp . '&url=' . $url);
        $shareConfig['appId']          = '';//此处为appId
        $shareConfig['timestamp']      = $timestamp;
        $shareConfig['noncestr']       = $noncestr;
        $shareConfig['signature']      = $signature;
        $shareConfig['url']            = $url;
        echo json_encode($shareConfig);
    } 
    
    原文作者:吴红兵
    原文地址: https://segmentfault.com/a/1190000018726407
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞