【微信】关于微信jssdk转发好友、分享好友朋友圈接口的问题


微信jssdk的调用

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

config配置成功通过wx.ready调取接口方法

wx.ready(function(){
  // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});

这里遇到的问题是wx.config调用失败报错 invalid signature
根据文档判断报错的原因是签名错误,微信官方文档给出的排查方法如下:
Snipaste_2020-05-26_08-48-17.png
按照步骤一步一步排查发现所有的配置都无问题。
最后排查出来的原因是动态获取config参数的接口传递的url经过了encodeURIComponent(),去掉url encodeURIComponent解决了config签名失败的问题。

确保你获取用来签名的url是动态获取的,动态页面可参见实例代码中php的实现方式。如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去'#'hash部分的链接(可用location.href.split('#')[0]获取,而且需要encodeURIComponent),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。

判断出现问题的原因为前端传递的URL如果经过了encodeURIComponent() 服务端需要decodeURIComponent() 或者保持统一都不使用encodeURIComponent()。

记录一下这是一个参考希望下次在遇到这方面问题的时候自己能够往这方面联想一下。

微信分享好友、分享朋友圈接口的问题

分享接口
请注意,不要有诱导分享等违规行为,对于诱导分享行为将永久回收公众号接口权限,详细规则请查看:朋友圈管理常见问题

请注意,原有的 wx.onMenuShareTimeline、wx.onMenuShareAppMessage、wx.onMenuShareQQ、wx.onMenuShareQZone 接口,即将废弃。请尽快迁移使用客户端6.7.2及JSSDK 1.4.0以上版本支持的 wx.updateAppMessageShareData、wx.updateTimelineShareData接口。


自定义“分享给朋友”及“分享到QQ”按钮的分享内容(1.4.0)
wx.ready(function () {   //需在用户可能点击分享按钮前就先调用
  wx.updateAppMessageShareData({ 
    title: '', // 分享标题
    desc: '', // 分享描述
    link: '', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
    imgUrl: '', // 分享图标
    success: function () {
      // 设置成功
    }
  })
}); 

自定义“分享到朋友圈”及“分享到QQ空间”按钮的分享内容(1.4.0)
wx.ready(function () {      //需在用户可能点击分享按钮前就先调用
  wx.updateTimelineShareData({ 
    title: '', // 分享标题
    link: '', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
    imgUrl: '', // 分享图标
    success: function () {
      // 设置成功
    }
  })
}); 

获取“分享到朋友圈”按钮点击状态及自定义分享内容接口(即将废弃)
wx.onMenuShareTimeline({
  title: '', // 分享标题
  link: '', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  imgUrl: '', // 分享图标
  success: function () {
  // 用户点击了分享后执行的回调函数
  }
},

获取“分享给朋友”按钮点击状态及自定义分享内容接口(即将废弃)
wx.onMenuShareAppMessage({
  title: '', // 分享标题
  desc: '', // 分享描述
  link: '', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  imgUrl: '', // 分享图标
  type: '', // 分享类型,music、video或link,不填默认为link
  dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
  success: function () {
    // 用户点击了分享后执行的回调函数
  }
});

之前调用相关接口使用的是onMenuShareTimeline、onMenuShareAppMessage,文档升级发现这两个接口将要废弃。
好吧,作为开发者当然是像高版本靠拢。
这时就发现了一个问题。因为有需求是需要能进入转发之后的回调函数。但是新版本的updateAppMessageShareData、updateTimelineShareData接口并不支持。只有接口设置成功的success函数。且新版的分享接口是在wx.ready之后就装载了这两个接口,相当于页面打开之后你需要分享的东西已经为你准备好。与老版本的分享时触发不同,所以以后可能会获取不到转发好友或朋友圈的回调。
大概接口升级的原因也是从根源上阻碍 诱导分享等违规行为。
从接口方面的介绍也可以看出这个新版接口并不支持回调。
Snipaste_2020-05-26_09-09-25.png
记录一下防止以后踩坑. )

对了,老版回调里发送请求需要用ajax同步模式 也就是async:false

声明:麋鹿与鲸鱼|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 【微信】关于微信jssdk转发好友、分享好友朋友圈接口的问题


Carpe Diem and Do what I like