微信jssdk进行分享功能

2021-02-23  本文已影响0人  xurna

前端的工作

  1. 步骤一:绑定域名
    先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

  2. 步骤二:引入JS文件
    http://res2.wx.qq.com/open/js/jweixin-1.6.0.js (支持https)。

  3. 步骤三:通过config接口注入权限验证配置
    所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用)

wx.config({
  debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  appId: '', // 必填,公众号的唯一标识
  timestamp: '', // 必填,生成签名的时间戳
  nonceStr: '', // 必填,生成签名的随机串
  signature: '',// 必填,签名
  jsApiList: [] // 必填,需要使用的JS接口列表
});
  1. 步骤四:通过ready接口处理成功验证
wx.ready(function(){
  // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});
  1. 步骤五:通过error接口处理失败验证
wx.error(function(res){
  // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});

后端的工作

  1. 获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token):此处需要用到appId和appsecret

  2. 用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket):https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

  3. 生成JS-SDK权限验证的签名:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分)

  4. 返回给前端timestamp,nonceStr,signature,前端需要传appId,url给后端

  5. 出于安全考虑,开发者必须在服务器端实现签名的逻辑。

最后的样子

  const appId = 'xxx';
  const url = window.location.href.split('#')[0];
  getWxJssdkSignReq({ appId, url})
    .then((res) => {
      const config = res.result
      wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: appId, // 必填,公众号的唯一标识
        timestamp: config.timestamp, // 必填,生成签名的时间戳
        nonceStr: config.nonceStr, // 必填,生成签名的随机串
        signature: config.signature, // 必填,签名,见附录1
        jsApiList: [
          'updateAppMessageShareData', 'updateTimelineShareData'
        ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
      })

      wx.ready(() => {
        const shareConfig = shareInfo; // 自己定义的分享信息
        const title = shareConfig.title || '';
        const imgUrl = shareConfig.pic || '';
        const desc = shareConfig.content || '';
        const link = window.location.href;

        // 分享朋友
        wx.updateAppMessageShareData({
          title: title, // 分享标题
          desc: desc, // 分享描述
          link: link, // 分享链接
          imgUrl: imgUrl, // 分享图标
          success: function () {
            // 用户确认分享后执行的回调函数
            console.log('分享朋友 success')
          }
        });

        // 分享朋友圈
        wx.updateTimelineShareData({
          title: title,
          link: link, // 分享链接
          imgUrl: imgUrl, // 分享图标
          success: function () {
            // 用户确认分享后执行的回调函数
            console.log('分享朋友圈 success')
          }
        });
      })

      wx.error((err) => {
        console.log('----wx error----: ', err)
      })
    })
    .catch(err => {
      console.log('----wxconfig catch err----: ', err)
    })

遇到的困难

  1. config:require subscribe:由于测试环境用的测试公众号,所以需要先关注公众号才行。


    image.png
  2. config:invalid signature:签名失败,这个是很磨人而且经常遇到的问题
    解决流程:

参考文章

上一篇 下一篇

猜你喜欢

热点阅读