前端調(diào)微信接口無(wú)非是:(注入配置信息成功)=>(調(diào)用微信方法),對(duì)的,就是這樣!說(shuō)起前端調(diào)微信的方法很簡(jiǎn)單,但是在SPA頁(yè)面上調(diào)微信的東西就知道多坑了。前端只需要傳當(dāng)前頁(yè)面的url到后臺(tái),后臺(tái)返回我們想要的時(shí)間戳,隨機(jī)串,簽名等!還有在公眾號(hào)上配什么安全域名等等!
在這里先說(shuō)url吧!在vue的單頁(yè)面上調(diào)微信的接口!
vue框架開(kāi)發(fā)上調(diào)微信接口(切記在vue上跳轉(zhuǎn)的頁(yè)面都是在同一頁(yè)面上,說(shuō)白了就是通過(guò)路由控制顯示哪個(gè)組件!還是在一個(gè)頁(yè)面上)
1.調(diào)微信地圖和微信分享好友等等
ios:
在調(diào)?。ㄗ⑷肱渲眯畔⒊晒Γ┖?,就可以調(diào)微信的接口了,之后在哪個(gè)頁(yè)面上需要調(diào)微信的方法就直接在jsApiList: [] 寫(xiě)就可以了!注意:如果你在vue上調(diào)過(guò)一次無(wú)需在調(diào)(配置信息),在重調(diào)的話,ios上就有調(diào)不出來(lái)微信的方法了
安卓上:
在哪個(gè)頁(yè)面需要調(diào)微信的方法必須要重新調(diào)?。ㄗ⑷肱渲眯畔⒊晒Γ┖?,才可以調(diào)微信的接口。
axios.get(`接口地址?url=${url}`)
.then((res) => {
const data = res.data.data;
wx.config({
debug: false, // 開(kāi)啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來(lái),若要查看傳入的參數(shù),可以在pc端打開(kāi),參數(shù)信息會(huì)通過(guò)log打出,僅在pc端時(shí)才會(huì)打印。
appId: data.appid, // 必填,公眾號(hào)的唯一標(biāo)識(shí)
timestamp: data.timestamp, // 必填,生成簽名的時(shí)間戳
nonceStr: data.nonceStr, // 必填,生成簽名的隨機(jī)串
signature: data.signature, // 必填,簽名,見(jiàn)附錄1
jsApiList:[
'getLocation',
'openLocation'
] // 必填,需要使用的JS接口列表,所有JS接口列表見(jiàn)附錄2
});
});
wx.ready(() => {
wx.getLocation({
type: 'gcj02', // 默認(rèn)為wgs84的gps坐標(biāo),如果要返回直接給openLocation用的火星坐標(biāo),可傳入'gcj02'
success: (res) => {
const latitude = res.latitude; // 緯度,浮點(diǎn)數(shù),范圍為90 ~ -90
const longitude = res.longitude; // 經(jīng)度,浮點(diǎn)數(shù),范圍為180 ~ -180。
commit(types.UPDATE_LOCATION, {latitude, longitude});
}
});
});
調(diào)微信支付
axios.get(`接口地址?url=${url}`)
.then((res) => {
const data = res.data.data;
wx.config({
debug: false, // 開(kāi)啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來(lái),若要查看傳入的參數(shù),可以在pc端打開(kāi),參數(shù)信息會(huì)通過(guò)log打出,僅在pc端時(shí)才會(huì)打印。
appId: data.appid, // 必填,公眾號(hào)的唯一標(biāo)識(shí)
timestamp: data.timestamp, // 必填,生成簽名的時(shí)間戳
nonceStr: data.nonceStr, // 必填,生成簽名的隨機(jī)串
signature: data.signature, // 必填,簽名,見(jiàn)附錄1
jsApiList:[
'chooseWXPay'
] // 必填,需要使用的JS接口列表,所有JS接口列表見(jiàn)附錄2
});
});
wx.chooseWXPay({
timestamp: 0, // 支付簽名時(shí)間戳,注意微信jssdk中的所有使用timestamp字段均為小寫(xiě)。但最新版的支付后臺(tái)生成簽名使用的timeStamp字段名需大寫(xiě)其中的S字符
nonceStr: '', // 支付簽名隨機(jī)串,不長(zhǎng)于 32 位
package: '', // 統(tǒng)一支付接口返回的prepay_id參數(shù)值,提交格式如:prepay_id=***)
signType: '', // 簽名方式,默認(rèn)為'SHA1',使用新版支付需傳入'MD5'
paySign: '', // 支付簽名
success: function (res) {
// 支付成功后的回調(diào)函數(shù)
}
});
注意:配置好支付授權(quán)目錄,該目錄必須是發(fā)起支付的頁(yè)面的精確目錄,子目錄下無(wú)法正常調(diào)用支付。(微信支付路徑要求二級(jí)或以上路徑)
所有需要使用JS-SDK的頁(yè)面必須先注入配置信息,否則將無(wú)法調(diào)用(同一個(gè)url僅需調(diào)用一次,對(duì)于變化url的SPA的web app可在每次url變化時(shí)進(jìn)行調(diào)用,目前Android微信客戶端不支持pushState的H5新特性,所以使用pushState來(lái)實(shí)現(xiàn)web app的頁(yè)面會(huì)導(dǎo)致簽名失敗,此問(wèn)題會(huì)在Android6.2中修復(fù))。