微信js-SDK手册地址:
https://qydev.weixin.qq.com/wiki/index.php?title=%E5%BE%AE%E4%BF%A1JS-SDK%E6%8E%A5%E5%8F%A3
第一步:
引入::http://res.wx.qq.com/open/js/jweixin-1.4.0.js](http://res.wx.qq.com/open/js/jweixin-1.4.0.js)支持https 认真引入
wx.config({
debug:true,//在配置权限注入成功或者报错提示
appId:'' ,//微信公众号的
timestamp:'',//生成签名的时间戳 后台返回
nonceStr:'', //生成签名的随机传 后台返回
signature:'',//签名 后台返回
jsApiList :[] //需要使用的js接口列表,所有js接口列表见文档
})
//config 成功之后的接口处理
wx.ready(function(){
//data为后台返回的data
var data={
title:'标题',
desc:'描述',
link:'分享链接',
imgUrl:''//分享图片,
success:function(){
console.log('分享成功')
},
fail:function(){
console.log('分享失败')
}
}
const userShare= Object.assign(data, {
success:function(){
console.log('分享成功')
}
})
wx.onMenuShareTimeline(userShare)、//分享到朋友圈
wx.onMenuShareAppMessage(userShare)//分享给朋友
wx.onMenuShareQQ(userShare) //分享到QQ
wx.onMenuShareQZone(userShare) //分享QQ空间
})
这样微信分享就完成了,但是里面有个坑,ios,还有就是第二次分享的时候
1.ios签名的时候只签名一次,后台签名根据当前的url进行签名,然后返回分享跳转链接,需要特殊处理一下
我们的解决方式是通过多传一个参数后台做特殊处理解决
2.第二次分享的时候,微信会自动给链接加东西
可采用location.href.split('#')[0]; 方式去掉多
3.后台的签名要是动态获取的url
微信js接口校验:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 使用微信js接口校验的时候
获取jsapi_ticket 前提,是有个ip白名单的
// 判断ios还是android
Vue.prototype.isIosOrAndroid = function () {
let u = navigator.userAgent;
let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1 // android终端
let isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) // ios终端
let isStr = ''
if (isAndroid) {
isStr = 'android'
}
if (isiOS) {
isStr = 'ios'
}
return isStr
调查发现:
1.安卓需要使用当前url进行微信api注册,(即当场调用location.href.split('#')[0])
2.ios 需要使用进入到页面初始url进行注册(即在任何pushstate发生前,调用location.href.split('#')[0])
解决方法:
1.保存当前页面最初的url,假设为Int_URL
2.根据客户端的不同
2.1 安卓:在准备分享前(或发生url跳转后)使当前url进行config,如果失败,则尝试使用Int_URL
2.2 ios: 在准备分享前(获胜url跳转后),使用init_URL进行config,如果失败则尝试使用当前url注册
签名失败的原因
确保你获取用来签名和url是动态获取,动态页面参见实例代码中,以及?后台的参数
网友评论