前端vue實(shí)現(xiàn)的h5頁(yè)面接入微信支付流程(jsapi方式)
參考鏈接
jsapi介紹

準(zhǔn)備工作
- 公眾號(hào)
- 商戶號(hào)
- 備案域名
- 配置應(yīng)用
先參考支付指引接入準(zhǔn)備基本步驟
1、在商戶號(hào)關(guān)聯(lián)公眾號(hào)
2、在商戶號(hào)配置支付授權(quán)目錄(支付目錄+回調(diào)目錄)
3、在公眾號(hào)配置網(wǎng)頁(yè)授權(quán)域名
第一步微信授權(quán)獲取用戶openid
參考鏈接微信網(wǎng)頁(yè)授權(quán)進(jìn)入頁(yè)面后從緩存中判斷是否已經(jīng)拿到用戶openid,或者地址欄上是否攜帶code,沒(méi)有則調(diào)用下面代碼進(jìn)行申請(qǐng)用戶授權(quán)
let protocol = window.location.protocol;
let host = window.location.host;
let local = protocol + '//' + host;
let appId = '';公眾號(hào)appid
window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${encodeURIComponent(local)}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect`
用戶同意授權(quán)后會(huì)在回調(diào)地址中攜帶code,下面提供獲取地址欄上code參數(shù)方法
function getUrlParams(name) {
const queryString = window.location.search;
const params = new URLSearchParams(queryString);
const value = params.get(name);
return value ? decodeURIComponent(value) : null;
}
然后把code傳給后端,后端通過(guò)code獲取access_token,再通過(guò)access_token獲取用戶信息并返回給前臺(tái)
網(wǎng)頁(yè)授權(quán)對(duì)于前端來(lái)說(shuō)只需要拉起用戶授權(quán),并將code傳給后臺(tái)
只是測(cè)試網(wǎng)頁(yè)授權(quán)可以使用測(cè)試公眾號(hào),需要先關(guān)注測(cè)試號(hào)并配置授權(quán)域名
測(cè)試公眾號(hào)

第二步調(diào)起微信支付
安裝依賴
npm install weixin-jsapi
在需要調(diào)起支付的頁(yè)面引用
import wx from “weixin-js-sdk”;
調(diào)起支付-需要的參數(shù)由后端返回,一般是下完單返回參數(shù)然后調(diào)起支付
wx.config({
debug: false, // 這里一般在測(cè)試階段先用ture,等打包給后臺(tái)的時(shí)候就改回false,
appId: res.data.appId, // 必填,公眾號(hào)的唯一標(biāo)識(shí)
timestamp: res.data.timeStamp, // 必填,生成簽名的時(shí)間戳
nonceStr: res.data.nonceStr, // 必填,生成簽名的隨機(jī)串
signature: res.data.paySign, // 必填,簽名
jsApiList: ['chooseWXPay', 'checkJsApi'] // 必填,需要使用的JS接口列表
})
wx.ready(() => {
// wx.checkJsApi({
// jsApiList: ['chooseWXPay'],
// success:function(res){},
// fail:function(res){}})
wx.chooseWXPay({
timestamp: res.data.timeStamp, // 支付簽名時(shí)間戳,注意微信jssdk中的所有使用timestamp字段均為小寫。但最新版的支付后臺(tái)生成簽名使用的timeStamp字段名需大寫其中的S字符
nonceStr: res.data.nonceStr, // 支付簽名隨機(jī)串,不長(zhǎng)于 32 位
package: res.data.package, // 統(tǒng)一支付接口返回的prepay_id參數(shù)值,提交格式如:prepay_id=\*\*\*)
signType: 'SHA1', // 簽名方式,默認(rèn)為'SHA1',使用新版支付需傳入'MD5'
paySign: res.data.paySign, // 支付簽名
success: function(payRes) {
// 支付成功后的回調(diào)函數(shù)
},
cancel: function(payRes) {
// that.$message.error('取消支付')
},
fail: function(payRes) {
// that.$message.error('支付失敗')
}
})
})
支付之后會(huì)觸發(fā)支付通知回調(diào),在回調(diào)中后端應(yīng)該根據(jù)支付狀態(tài)更新訂單狀態(tài)
另外需要判斷是否微信瀏覽器移動(dòng)端來(lái)決定是否調(diào)起微信支付,以下是判斷方法
var isWechatBrowser = /micromessenger/i.test(navigator.userAgent);
let isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i
.test(navigator.userAgent);
if(isWechatBrowser){
//微信瀏覽器
if (isMobile) {
// console.log("當(dāng)前是微信移動(dòng)端");
}else{
// console.log("當(dāng)前是pc端");
}
}else{
//非//微信瀏覽器
}
常見(jiàn)錯(cuò)誤
1、“當(dāng)前頁(yè)面的URL未注冊(cè)”
檢查下單接口中使用的商戶號(hào)是否在商戶平臺(tái) (opens new window)配置了對(duì)應(yīng)的支付目錄
2、“該商戶暫不支持通過(guò)外部拉起微信完成支付”
JSAPI支付只能從微信瀏覽器內(nèi)發(fā)起支付請(qǐng)求。
3、pc端拉起支付失敗
只支持移動(dòng)端
4、缺少參數(shù):total_fee
一般是后端返回的package參數(shù)有誤,另外后端生成訂單時(shí)金額不能為0且單位為分
總結(jié)
到此這篇關(guān)于前端vue實(shí)現(xiàn)的h5頁(yè)面接入微信支付的文章就介紹到這了,更多相關(guān)vue h5頁(yè)面接入微信支付內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue中使用正則表達(dá)式進(jìn)行文本匹配和處理的方法小結(jié)
正則表達(dá)式在Vue中具有廣泛的應(yīng)用場(chǎng)景,包括文本匹配和處理、表單驗(yàn)證等,通過(guò)本文的介紹和示例,希望讀者能更好地理解和應(yīng)用正則表達(dá)式在Vue中的使用方法,感興趣的朋友一起看看吧2023-11-11
Vuex持久化存儲(chǔ)之vuex-persist問(wèn)題
這篇文章主要介紹了Vuex持久化存儲(chǔ)之vuex-persist問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
vue自定義實(shí)例化modal彈窗功能的實(shí)現(xiàn)
這篇文章主要介紹了vue自定義實(shí)例化modal彈窗,Vue.extend 屬于Vue的全局 api,在實(shí)際業(yè)務(wù)開發(fā)中我們很少使用,因?yàn)橄啾瘸S玫?nbsp;Vue.component寫法使用 extend 步驟要更加繁瑣一些,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下2022-09-09
uniapp微信小程序webview和h5數(shù)據(jù)通信代碼示例
這篇文章主要介紹了uniapp微信小程序webview和h5數(shù)據(jù)通信的相關(guān)資料,文章還列出了項(xiàng)目的結(jié)構(gòu),包括微信小程序和h5端的主要文件和組件,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01
vue開發(fā)runtime core中的虛擬節(jié)點(diǎn)示例詳解
這篇文章主要為大家介紹了vue開發(fā)runtime core中的虛擬節(jié)點(diǎn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
vue-router動(dòng)態(tài)設(shè)置頁(yè)面title的實(shí)例講解
今天小編就為大家分享一篇vue-router動(dòng)態(tài)設(shè)置頁(yè)面title的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Vue中使用Echarts可視化圖表寬度自適應(yīng)的完美解決方案
這篇文章主要介紹了Vue中使用Echarts可視化圖表,寬度自適應(yīng)解決方案,我的解決方案是,在放置Echarts的容器(div)外層再套一層容器(div),外層容器寬度固定設(shè)置手機(jī)屏幕寬,感興趣的朋友跟隨小編一起看看吧2022-09-09
element ui 表格動(dòng)態(tài)列顯示空白bug 修復(fù)方法
今天小編就為大家分享一篇element ui 表格動(dòng)態(tài)列顯示空白bug 修復(fù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09

