欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

微信二次分享报错invalid signature问题及解决方法

程序员文章站 2022-06-04 11:59:17
基于微信公众号开发的h5页面(使用jssdk接口),由用户a分享给用户b,用户b再次分享这个页面时,不能成功分享。问题出在用户b收到的分享链接与用户a打开的链接不同...

基于微信公众号开发的h5页面(使用jssdk接口),由用户a分享给用户b,用户b再次分享这个页面时,不能成功分享。问题出在用户b收到的分享链接与用户a打开的链接不同

a用户的链接为

b用户收到的连接

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);
  } 

总结

以上所述是小编给大家介绍的微信二次分享报错invalid signature问题及解决方法,希望对大家有所帮助