# 公众号h5自定义分享

这两天做一个公众号抽奖页面,运营要求设置分享增加次数,这就要拿到微信分享事件的回调。查了下相关文章,需要用到微信JS-SDK

# 后端工作

  1. 在微信公众平台设置接口安全域名
  2. 后端通过代码请求微信接口获取access-token参数,以此access-token参数再次请求微信接口获取jsapi-ticket,并将获取的jsapi-ticket进行加密、校验与其他的参数封装成接口供前端调用。

# 前端工作

  1. 页面引入微信JS-SDK文件。

    <script src="//res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
    
  2. 通过后端提供的接口获取配置参数。向服务端传递当前路径url,返回appid,timestamp,noncestr,signature。

    这里要传递当前页面url,否则会返回报错invalid signature。查看相关文章发现还有因为url的query和hash参数导致错误的,最好用location.href.split('#')[0]。

  3. 执行wx.config方法进行配置。

    wx.config({
      debug: false,
      appId: res.data.d.appid,   
      timestamp: res.data.d.timestamp,
      nonceStr: res.data.d.noncestr,
      signature: res.data.d.signature,
      jsApiList: [
        'checkJsApi',
        'onMenuShareAppMessage',
        'onMenuShareTimeline',
      ]
    });
    

    这里要注意服务器生成的appid等参数都是小写,config参数的key是大写。

    开发阶段开启debug,各个wx方法执行结果会以alert形式显示。

    jsApiList要填写要调用的方法。

  4. 在wx.ready中设置分享事件。

    wx.ready(function () {
      wx.checkJsApi({
        jsApiList: [
          'onMenuShareAppMessage',
          'onMenuShareTimeline',
        ]
      });
      /*分享给朋友*/
      wx.onMenuShareAppMessage({
        title: shareOption.title,
        desc: shareOption.desc,
        link: shareOption.link,
        imgUrl: shareOption.imgUrl,
        success: function () {
          // 用户确认分享后执行的回调函数
        },
        cancel: function () {
          // 用户取消分享后执行的回调函数
        }
      });
      /*分享给朋友圈*/
      wx.onMenuShareTimeline({
        title: shareOption.title,
        link: shareOption.link,
        imgUrl: shareOption.imgUrl,
        success: function () {
          // 用户确认分享后执行的回调函数
        },
        cancel: function () {
          // 用户取消分享后执行的回调函数
        }
      });
    });
    

    这里link和imgUrl要用绝对路径。之前用相对路径,分享一直不显示自定义的配置。

    当用户点击右上角进行分享,可以在成功回调设置发送请求抽奖次数+1。

# 问题

  1. 测试阶段发现ios分享显示正常,安卓分享出去不显示图片。上网查找相关问题,有人说把png改成jpg还是不行。有人说是协议的问题,把图片路径的协议从http改成https,发现图片可正常分享显示。
  2. 测试服换到线上服务区,发现报错,原因是线上服强制转https,而很多资源引用的是http,设置关闭转https后可正常加载。另外分享自定义配置无效,发现是安全域名未配置线上域名。
  3. 分享到朋友圈成功回调,发送ajax报错,在微信开发工具测试正常。引入vconsole调试,发现ajax请求未发出,status=0。查看相关文章,发现快速切换页面,导致快速多次发起ajax请求,就会出现这种情况。尝试在请求失败再一次发起请求,成功。改为回调中setTimeout延迟请求,也成功。
  4. 微信JS-SDK官方文档说这两个接口即将失效,建议使用两个新的接口。但是新的接口回调失败。

# 其他

在微信环境配置开发工具可以分享给微信。在其他浏览器中分享需要调用浏览器自身接口,可以用nativeShare.js这个第三方库实现。

Last Updated: 9/30/2018, 1:46:24 PM