前端调微信接口无非是:(注入配置信息成功)=>(调用微信方法),对的,就是这样!说起前端调微信的方法很简单,但是在SPA页面上调微信的东西就知道多坑了。前端只需要传当前页面的url到后台,后台返回我们想要的时间戳,随机串,签名等!还有在公众号上配什么安全域名等等!
在这里先说url吧!在vue的单页面上调微信的接口!
vue框架开发上调微信接口(切记在vue上跳转的页面都是在同一页面上,说白了就是通过路由控制显示哪个组件!还是在一个页面上)
1.调微信地图和微信分享好友等等
ios:
在调取(注入配置信息成功)后,就可以调微信的接口了,之后在哪个页面上需要调微信的方法就直接在jsApiList: [] 写就可以了!注意:如果你在vue上调过一次无需在调(配置信息),在重调的话,ios上就有调不出来微信的方法了
安卓上:
在哪个页面需要调微信的方法必须要重新调取(注入配置信息成功)后,才可以调微信的接口。
axios.get(`接口地址?url=${url}`)
.then((res) => {
const data = res.data.data;
wx.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: data.appid, // 必填,公众号的唯一标识
timestamp: data.timestamp, // 必填,生成签名的时间戳
nonceStr: data.nonceStr, // 必填,生成签名的随机串
signature: data.signature, // 必填,签名,见附录1
jsApiList:[
'getLocation',
'openLocation'
] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
});
wx.ready(() => {
wx.getLocation({
type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
success: (res) => {
const latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
const longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
commit(types.UPDATE_LOCATION, {latitude, longitude});
}
});
});
调微信支付
axios.get(`接口地址?url=${url}`)
.then((res) => {
const data = res.data.data;
wx.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: data.appid, // 必填,公众号的唯一标识
timestamp: data.timestamp, // 必填,生成签名的时间戳
nonceStr: data.nonceStr, // 必填,生成签名的随机串
signature: data.signature, // 必填,签名,见附录1
jsApiList:[
'chooseWXPay'
] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
});
wx.chooseWXPay({
timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
nonceStr: '', // 支付签名随机串,不长于 32 位
package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
paySign: '', // 支付签名
success: function (res) {
// 支付成功后的回调函数
}
});
注意:配置好支付授权目录,该目录必须是发起支付的页面的精确目录,子目录下无法正常调用支付。(微信支付路径要求二级或以上路径)
所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)。