H5:微信分享接入及避坑记录

前言

项目中经常有这样的需求,某个页面需要分享到微信好友或朋友圈。在app中,可以通过接入sdk,调用sdk的方法实现分享。在H5中实现微信分享也是需要借助sdk。

微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力。

不过在接入微信js-sdk之前,类似app注册应用账号一样,需要做些前置的准备工作。

 

此处贴一个微信官方文档链接

微信官方说明文档

 

准备工作

1、绑定安全域名

首先,要现有个认证的公众号,并确保已获得分享的接口权限。

然后登录微信公众平台 ,进行公众号设置 ,功能设置填写js接口安全域名

2、引入JS文件

两种方式:

(1)页面引入JS文件,支持https:http://res.wx.qq.com/open/js/jweixin-1.6.0.js

如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:http://res2.wx.qq.com/open/js/jweixin-1.4.0.js (支持https)

(2)npm安装

npm install weixin-js-sdk --save

 

config初始化验证

所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用。

而配置需要的一些参数,例如appId,signature这种比较敏感的数据安全起见都是存于后端的。

所以我们需要在请求后端接口拿到这些配置参数后才开始config验证

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

 

ready接口处理成功验证

wx.ready(function () {
  //分享到朋友圈
  wx.onMenuShareTimeline({
    title: '',
    link: '',
    imgUrl: '',
    success: function () {
      console.log("分享成功");
    },
    cancel: function () {
      console.log("取消分享");
    }
  });
})
wx.ready(function () {
  //分享给朋友
  wx.onMenuShareAppMessage({
    title:'',
    desc: '',
    link: '',
    imgUrl: '',
    type: '',
    dataUrl: '',
    success: function () {
      console.log("分享成功");
    },
    cancel: function () {
      console.log("取消分享");
    }
  });
})

 

error接口处理失败验证

wx.error(function(res){
  // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});

 

避坑记录

1、以上的config接口,ready接口,error接口写在一个方法内,并且应在页面渲染完成时就调用。

因为这些接口是异步执行的,在微信中,现在已不支持用户主动触发分享动作。微信内置浏览器中的H5分享,是在config验证通过后,用户点击右上角省略号后,在微信弹窗再进行分享的。

2、如果稍有操作和设置不当,可能在调用config接口时就会报 invalid signature 错误了。

排查步骤如下:

  • 公众号已正确配置了安全域名

  • 确认签名算法正确,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验。

  • 确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。

  • 确认url是页面完整的url(请在当前页面alert(location.href.split('#')[0])确认),包括'http(s)://'部分,以及'?'后面的GET参数部分,但不包括'#'hash后面的部分。

  • 确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。

  • 确保一定缓存access_token和jsapi_ticket。

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在Vue H5中调用微信分享,首先需要引入微信官方的JS-SDK库。在Vue项目的index.html文件中,可以在<head>标签内添加如下代码: ```html <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> ``` 然后,在Vue组件的created生命周期钩子函数中,使用Vue的axios或者其他网络请求库向后端请求获取微信配置信息。 ```javascript created() { this.fetchWechatConfig(); }, methods: { async fetchWechatConfig() { const response = await axios.get('/api/wechat/config'); // 向后端请求微信配置信息 const { appId, timestamp, nonceStr, signature } = response.data; // 将配置信息存储到全局变量中 this.$store.commit('setWechatConfig', { appId, timestamp, nonceStr, signature }); this.initWechatSDK(); }, initWechatSDK() { const { appId, timestamp, nonceStr, signature } = this.$store.state.wechatConfig; wx.config({ appId, timestamp, nonceStr, signature, jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage'], // 配置需要使用的微信API }); // 进行微信SDK的初始化 wx.ready(() => { this.shareToWechat(); }); }, shareToWechat() { const shareData = { title: '分享标题', link: '分享链接', imgUrl: '分享图片链接', desc: '分享描述', }; // 配置分享的具体内容 wx.onMenuShareTimeline(shareData); // 分享到朋友圈 wx.onMenuShareAppMessage(shareData); // 分享给好友 }, }, ``` 上述代码中,我们通过axios库向后端请求了微信配置信息,并将其存储到Vuex的全局状态中。然后,我们使用微信JS-SDK中的`wx.config`方法进行微信验证和初始化配置。一旦初始化成功,`wx.ready`回调函数将会被触发,我们在该函数中调用`shareToWechat`方法来配置分享的具体内容。 在`shareData`对象中,我们可以自定义分享的标题、链接、图片和描述等信息,然后使用`wx.onMenuShareTimeline`方法配置分享给朋友圈的内容,使用`wx.onMenuShareAppMessage`方法配置分享给好友的内容。 最后,我们可以在Vue组件中调用`shareToWechat`方法来触发微信分享。 注意:在实际开发中,需要根据微信的API文档和后端提供的接口来进行相应的调整和配置。以上代码仅为示例,具体实现方式可能会有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KWMax

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值