微信的二次分享

微信的二次分享

场景描述

  1. 从App分享一条资讯到微信好友。分享的样式包含:标题,描述,图片,App的logo
  2. 在微信中预览这条资讯,然后使用微信内部的分享功能,分享给好友,不做任何处理,分析出去的是默认标题,没有logo, 描述部分是文章的链接

期望的结果

  1. 分享出去是文章的标题,图片和初次分享的一直,描述部分是初次分享的描述信息。

处理方式

  1. 使用微信的jssdk。注册微信jssdk的签名
  2. 注册jssdk时填写分享到微信好友,微信朋友圈的方法

处理步骤

  1. 微信JSSDK文档地址
  2. 需要准备一个微信公众号。登录到“公众号设置”的“功能设置”里填写“JS接口安全域名”
  3. 引入微信的js文件:http://res.wx.qq.com/open/js/jweixin-1.2.0.js(支持https)
  4. 通过wx.config 接口注入权限验证
(function () {
  var baseUrl = 'https://test.bgycc.com/weixin/get/js/signature'
  getparameter()
  function getparameter () {
    var xhr = new XMLHttpRequest()
    xhr.open('POST', baseUrl, true)
    xhr.timeout = 30000
    xhr.ontimeout = function (event) {
      console.log('请求超时event', event)
    }
    var otherLink = window.location.href.split('#')[0]
    // 这里调用后台的接口,进行定义。但是一定要进行encodeURIComponent的编码
    var data = JSON.stringify({'url': encodeURIComponent(otherLink)})
    xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8')
    xhr.onreadystatechange = function () {
      if (xhr.readyState === 4 && xhr.status === 200) {
        var res = JSON.parse(xhr.responseText)
        if (res.code === '0') {
          wx.config({
            debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: res.data.appId, // 必填,公众号的唯一标识
            timestamp: res.data.timestamp, // 必填,生成签名的时间戳
            nonceStr: res.data.noncestr, // 必填,生成签名的随机串
            signature: res.data.signature, // 必填,签名,见附录1
            jsApiList: ['onMenuShareTimeline', //分享到朋友圈的接口
            'onMenuShareAppMessage'//分享给朋友的接口
            ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
          })
        }
      } else {
      }
    }
    xhr.send(data)
  }
  wx.ready(function (res) {
  // 文件的引用要注意接口的数据返回情况。放到html文件的最底部进行引入
   var sharetitle = window.sessionStorage.getItem('shareTitle')
   var shareimgUrl = window.sessionStorage.getItem('shareImgUrl')
   var sharedesc = window.sessionStorage.getItem('shareDesc')
    var linkUrl = window.location.href.split('#')[0] 
    // 微信的分享
    wx.onMenuShareTimeline({   
        title: sharetitle,    
        link: linkUrl,  
        imgUrl: shareimgUrl,  
        success: function() {  
            // 用户确认分享后执行的回调函数  
        },  
        cancel: function() {   
            // 用户取消分享后执行的回调函数  
        }  
    }); 
       //分享朋友  
    wx.onMenuShareAppMessage({  
        title: sharetitle,  
        desc: sharedesc,  
        link: linkUrl,  
        imgUrl: shareimgUrl,
        type: 'link', 
        success: function() {
        },
        cancel: function() {
        } 
    });  
    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
  })
  wx.error(function (res) {
     alert('error-------' + JSON.stringify(res))
    // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
  })
})()

注意事项

  1. appId,timestamp,nonceStr,signature 必须从后台获取
  2. 前端传递的url,移除hash部分,并且一定要多hash部分进行encodeURIComponent编码。
  3. 后端在接收到url的时候要进行解码,不然会出现invalid signature的错误。
  4. 后端签名部分注意查看文档。

参考文档

  1. invalid signature
  2. 微信二次分享
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值