前端vue實(shí)現(xiàn)的h5頁面接入微信支付流程(jsapi方式)
參考鏈接
jsapi介紹
準(zhǔn)備工作
- 公眾號
- 商戶號
- 備案域名
- 配置應(yīng)用
先參考支付指引接入準(zhǔn)備基本步驟
1、在商戶號關(guān)聯(lián)公眾號
2、在商戶號配置支付授權(quán)目錄(支付目錄+回調(diào)目錄)
3、在公眾號配置網(wǎng)頁授權(quán)域名
第一步微信授權(quán)獲取用戶openid
參考鏈接微信網(wǎng)頁授權(quán)進(jìn)入頁面后從緩存中判斷是否已經(jīng)拿到用戶openid,或者地址欄上是否攜帶code,沒有則調(diào)用下面代碼進(jìn)行申請用戶授權(quán)
let protocol = window.location.protocol; let host = window.location.host; let local = protocol + '//' + host; let appId = '';公眾號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)后會在回調(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傳給后端,后端通過code獲取access_token,再通過access_token獲取用戶信息并返回給前臺
網(wǎng)頁授權(quán)對于前端來說只需要拉起用戶授權(quán),并將code傳給后臺
只是測試網(wǎng)頁授權(quán)可以使用測試公眾號,需要先關(guān)注測試號并配置授權(quán)域名
測試公眾號
第二步調(diào)起微信支付
安裝依賴
npm install weixin-jsapi
在需要調(diào)起支付的頁面引用
import wx from “weixin-js-sdk”;
調(diào)起支付-需要的參數(shù)由后端返回,一般是下完單返回參數(shù)然后調(diào)起支付
wx.config({ debug: false, // 這里一般在測試階段先用ture,等打包給后臺的時(shí)候就改回false, appId: res.data.appId, // 必填,公眾號的唯一標(biāo)識 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字段均為小寫。但最新版的支付后臺生成簽名使用的timeStamp字段名需大寫其中的S字符 nonceStr: res.data.nonceStr, // 支付簽名隨機(jī)串,不長于 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('支付失敗') } }) })
支付之后會觸發(fā)支付通知回調(diào),在回調(diào)中后端應(yīng)該根據(jù)支付狀態(tài)更新訂單狀態(tà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)前是微信移動端"); }else{ // console.log("當(dāng)前是pc端"); } }else{ //非//微信瀏覽器 }
常見錯(cuò)誤
1、“當(dāng)前頁面的URL未注冊”
檢查下單接口中使用的商戶號是否在商戶平臺 (opens new window)配置了對應(yīng)的支付目錄
2、“該商戶暫不支持通過外部拉起微信完成支付”
JSAPI支付只能從微信瀏覽器內(nèi)發(fā)起支付請求。
3、pc端拉起支付失敗
只支持移動端
4、缺少參數(shù):total_fee
一般是后端返回的package參數(shù)有誤,另外后端生成訂單時(shí)金額不能為0且單位為分
總結(jié)
到此這篇關(guān)于前端vue實(shí)現(xiàn)的h5頁面接入微信支付的文章就介紹到這了,更多相關(guān)vue h5頁面接入微信支付內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解webpack+vue-cli項(xiàng)目打包技巧
本篇文章主要介紹了詳解webpack+vue-cli項(xiàng)目打包技巧 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06詳解如何在Vue3使用<script lang=“ts“ setup>語法糖
本文主要介紹了在Vue3使用<script lang=“ts“ setup>語法糖,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06vue項(xiàng)目中字符串換行顯示方式(返回的數(shù)據(jù)包含‘\r\n’字符)
這篇文章主要介紹了vue項(xiàng)目中字符串換行顯示方式(返回的數(shù)據(jù)包含‘\r\n’字符),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04webpack如何將vue3單頁面應(yīng)用改造成多頁面應(yīng)用
這篇文章主要介紹了webpack如何將vue3單頁面應(yīng)用改造成多頁面應(yīng)用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05vue限制輸入數(shù)字或者保留兩位小數(shù)實(shí)現(xiàn)
這篇文章主要為大家介紹了vue限制輸入數(shù)字或者保留兩位小數(shù)實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07VUE3封裝一個(gè)Hook的實(shí)現(xiàn)示例
本文主要介紹了VUE3封裝一個(gè)Hook的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01