美文网首页
微信jssdk进行分享功能

微信jssdk进行分享功能

作者: xurna | 来源:发表于2021-02-23 21:15 被阅读0次

前端的工作

  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变化时进行调用)

  • timestamp,nonceStr,signature这三个值必须后端返回来
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:签名失败,这个是很磨人而且经常遇到的问题
    解决流程:
  • 确认签名算法正确,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验。
  • 确认url是页面完整的url(请在当前页面alert(location.href.split('#')[0])确认),包括'http(s)://'部分,以及'?'后面的GET参数部分,但不包括'#'hash后面的部分。确保后端解析到用来签名的url和前端发送的一致(此处很坑),如果是get方法请求的,根据需要进行encodeURIComponent(location.href.split('#')[0])处理,后端需要decode(因为url中有&时会被浏览器截断导致签名不正确,如果是post请求也要注意后端是否把&转义成&amp了)。
  • 确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。
  • 检查当前appId对应的“公众号设置”的“功能设置”里是否填写“JS接口安全域名”。
  • 确保一定缓存access_token和jsapi_ticket。
    官方的解决方案:


    image.png

参考文章

相关文章

  • 微信jssdk进行分享功能

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

  • 微信h5转发配置链接内容

    要求对微信中转发的链接进行diy内容,更方便用户转发分享 达到以下形式 此功能需使用微信JSSDK 先登录微信公众...

  • 微信分享 JSSDK的使用

    我现在做过的在微信中运行的项目,基本上都有微信分享功能,所以,会使用JSSDK分享页面是非常重要的。分享功能的代码...

  • 基于vue2.x实现的即时通讯程序仿微信聊天10微信jssdk的

    这节课来学习wxjssdk,然后应用到我们项目中来,开发微信分享给好友,以及分享到朋友圈功能 微信jssdk属于微...

  • 如何用本机调试微信jssdk

    微信jssdk需要绑定域名才能够进行验证,而且域名还需要是备案过的。所以本地开发的时候调用不到jssdk的功能,之...

  • 微信JSSDK分享功能使用

    微信jssdk初始化 微信支付调用

  • JSSDK 微信分享

    记录一下我前段时间做微信分享遇到的麻烦和坑。先说一下使用方式,最后写我遇到的坑 引入 JS 文件 我用的是 当然...

  • 微信分享jssdk

    官方文档[https://developers.weixin.qq.com/doc/offiaccount/OA_...

  • 微信jssdk 分享

    微信js-SDK手册地址: https://qydev.weixin.qq.com/wiki/index.php?...

  • 一些总结

    1、在进行微信网页录音功能开发的时候,微信jssdk初始化一定要把用到的方法写在wx.config配置信息jsAp...

网友评论

      本文标题:微信jssdk进行分享功能

      本文链接:https://www.haomeiwen.com/subject/uxedfltx.html