從前端的角度來整理微信支付的流程
微信小程式開發教學梳理微信支付的流程
#推薦:#微信小程式開發教學
因為業務需要,開發微信支付功能,涉及三種支付方式:
- JSAPI 支付:微信內網頁支付,需要開通微信服務號碼
- 小程式支付:在小程式中支付,需要開通小程式
- H5 支付:在手機瀏覽器(出微信內網爺)中網頁支付
使用微信支付的前提必開通微信商家號,要使用到那種的支付方式要前需在商家平台開通(要審核)。
支付的錢最終都會到商戶號碼裡(一般由公司財務開通)。
開發微信支付的過程中大大小小坑還是踩了不少,終於做完了,整理下開發流程。
參考:
- 微信支付-存取指引
- 微信支付-開發文件
小程式支付
開發流程
- 小程式端請求建立訂單接口,後端統一下單取得
orderId
並返回 - 小程式端取得透過wx.login ()取得
code
- 小程式端拿這
code
和orderId
請求後端接口,取得支付所需資料 - 取得支付所需資料之後,小程式端呼叫wx.requestPayment()接口,直接呼叫起支付頁面
- 判斷是否支付成功後的邏輯
async function wxPay(goodId) { // 1. 创建订单 获取orderId let orderId = await ajax("POST", "/api/OrderProgram/CreateTheOrder", { goodId, // 商品id }); // 2. 获得 code let code = await wxlogin(); // 基于pr封装的wx.login()方法 // 3. 获取支付的数据 let payData = await ajax("POST", "/api/OrderProgram/WxXcxPay", { orderId, code, }); // 4. 发起支付 let res = await payment(payData); // 基于pr封装的wx.requestPayment()方法 // 5. 判断是否支付成功 let payResult = res.errMsg; if (payResult == "requestPayment:ok") { console.log("支付成功"); } else if (payResult == "requestPayment:fail cancel") { console.log("用户取消支付"); } else { console.log("支付失败"); } }
注意事項
- 申請微信小程式帳號
申請成功可拿到AppID(小程式id)和AppSecret(小程式金鑰)
申請類型為企業性質,否則無法接入微信支付 - 微信小程式認證
通過認證的小程式才能接入微信支付和綁定商家平台 - 申請商家平台帳號
需要第一步驟申請的AppID
申請成功可拿到MchID(商家id)和MchKey(商家金鑰) - 信小程式關聯商家號碼
微信與商家都認證成功後,在微信後台微信支付選單中進行關聯 - 存取微信支付
在微信後台微信支付選單中進行存取
H5 支付
開發流程
- 前端端請求創建訂單接口,後端統一下單獲取
orderId
# 並返回 - #前端帶著
orderId
請求支付接口,獲得mweb_url
, - 然後跳轉
mweb_url
會跳轉微信自動調用微信支付 - 支付後返回支付頁,判斷是否支付成功(需發送請求後端查詢)
4.1 重新整理頁面,取得最新的付款(訂單)狀態。
4.2 設定一個的按鈕"我已付款",讓使用者點擊自動查詢狀態。
偽代碼
async function wxH5Pay(goodId) { // 1. 创建订单 获取orderId let orderId = await ajax("POST", "/api/OrderProgram/CreateTheOrder", { goodId, // 商品id }); // 2. 获取支付跳转的URL let mweb_url = await ajax("POST", "/api/OrderProgram/WxH5Pay", { orderId }); // 3. 跳转URL去微信支付 if (mweb_url) { location.href = mweb_url; } else { console.log("回调地址出错"); } // 4. 支付后返回支付页,判断是否支付成功 // 4.1 刷新页面,获取最新的订单(商品)状态。 // 4.2 设置一个"我已支付"的按钮,让用户点击之后查询状态。 }
注意事項
- 在商家平台設定正確的支付網域
- 偵錯需要在線上,如果嫌麻煩可以使用內網穿透(Ngrok 或花生殼)
- 需對
redirect_url
進行urlencode
處理 - H5 付款不能直接在微信客戶端內調起,請在外部瀏覽器調起。
參考
- 微信支付-H5 支付-開發步驟
JSAPI 支付(微信內網頁支付)
#開發流程
- 商品頁
- 前端商品頁建立訂單,在後端統一下單後取得
orderId
- 前端帶著
orderId
跳到支付頁,
- 支付頁
- #取得
code
- 第一次進入頁面,判斷是否路徑中有
- code
- code
,請求資料跳轉授權頁面,
code會透過回呼位址一起回傳回來
拿到 - code
,傳送給後端,後端解析到
openid,保存好。
- code
- 點擊確定支付按鈕,觸發
wxPay()
方法
- 發送
- orderId
給後端,取得
wxData - wxData
中包含
wx.config和
wx.chooseWXPay兩個介面的資料。
先呼叫 - wx.config()
然後在呼叫
wx.chooseWXPay(),如果一切正常,付款頁面就會彈出。
支付狀態透過後端去查詢 - orderId
- 商品頁
// 1. 创建订单 获取orderId let orderId = await ajax("POST", "/api/OrderProgram/CreateTheOrder", { goodId, // 商品id }); // 2. 携带id 跳转到支付页 this.$router.push({ name: "wx_pay_page", params: { orderId: id } });
- 入口檔案(
- main.js
)
// main.js 引入 js-sdk import wx from "weixin-js-sdk";
- #付款頁HTML##
<template> <p> <button @click="wxPay">点击支付</button> </p> </template>
登入後複製
获取 code 请求这个地址之后, 前端引入 js-skd 整个流程走下来,给我的体验是:小程序支付最方面(因为配置少),其次是 H5,JSAPI 支付最麻烦(文章一多半都在写它) 在微信支付功能开发过程中,其实最麻烦的不是开发流程,而是他的各种配置和授权流程,为了拿到所需的参数而来回折腾。 开发过程中的一些参数是经常用到的,如 appid、openid、orderId 支付流程大径相同,先获取到用户的 openid,知道你是谁,然后统一下单拿到 orderId 再去处理不同平台的支付方式 开发时候用到的相关文档,一定要仔细阅读二遍以上为止!! 遇到问题不要死刚,多百度多 Google,说不准你遇到的问题已经有无数的人遇到过并且已经有成熟的解决方案了。 前端和后端要多沟通,有什么问题(难点)随时反馈,需要什么参数好好说,遇到观点不一致的时候千万要注意控制住情绪,切莫撕逼(.——.)。 因为本人水平有限,对后端流程懂得不多,只能以前端的角度来梳理整个支付流程。 以上,希望对你有所帮助。// Vue
data(){
return {
orderId: this.$route.params.orderId, // 订单id
url: '',// 获取code的url
wxData: null,// js-sdk接口所需的数据
}
},
mounted(){
// 判断是否有code
this.getCode()
}
methods: {
getCode() {
var code = this.getUrlPram("code");
if (code != null) {
this.code = code;
// 拿到 code 发给 后端
this.sendCode(code);
} else {
// 去拿code
this.getUrl();
}
},
getUrl() {
// 请求后端拿到url所需数据,然后跳转页面在通过回调地址返回,获取code.
this.axios
.post("/api/OrderProgram/GetOpenidAndAccessToken", {
orderId: this.orderId,
})
.then((data) => {
this.url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${data.appId}&redirect_uri=${data.redirect_uri}&response_type=${data.response_type}&scope=${data.scope}&state=${data.state}`;
window.location.href = this.url;
})
.catch((err) => {
console.log(err);
});
},
sendCode(code) {
// 发送code给后端 后端解析出openid
this.axios
.post("/api/OrderProgram/GetOpenidAndAccessTokenFromCode", {
code: code,
})
.then((res) => {
console.log(res);
})
.catch((err) => {
console.log(err);
});
},
wxPay: async function() {
// 发送orderid,获取wx.chooseWXPay和wx.config所需的参数
this.wxData = await this.axios.post(
"/api/OrderProgram/WxJSAPIPay",
{ orderId: this.orderId }
);
let wxConfigData = this.wxData.wxConfigData // 获取wx.chooseWXPay()所需数据
let wxPayData = this.wxData.wxPayData;// 获取wx.config()所需数据
this.$wx.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: wxConfigData.appId, // 必填,公众号的唯一标识
timestamp: wxConfigData.timeStamp, // 必填,生成签名的时间戳
nonceStr: wxConfigData.nonceStr, // 必填,生成签名的随机串
signature: wxConfigData.paySign, // 必填,签名
jsApiList: [
"chooseWXPay",
],
});
// 执行支付
this.$wx.chooseWXPay({
timestamp: wxPayData.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
nonceStr: wxPayData.nonceStr, // 支付签名随机串,不长于 32 位
package: wxPayData.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
signType: wxPayData.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
paySign: wxPayData.paySign, // 支付签名
success: (res) => {
this.$toast("支付成功");
},
fail: (err) => {
this.$toast("支付失败");
},
});
},
}
同时支持 H5 支付和 JSAPI 支付
// 在创建订单之后,就判断环境使用哪种方法支付。
if (isWx()) {
this.WXPay(orderId); // 带着orderId跳转到支付页逻辑
} else {
this.H5Pay(orderId); // 执行上面H5支付中的创建订单之后的逻辑
}
// 判断是否是微信浏览器
function isWx() {
let uAgent = navigator.userAgent.toLowerCase();
reutrn(/micromessenger/.test(uAgent)) ? true : false;
}
注意事项
[图片上传失败...(image-b07878-1605777597831)]www.xx.com/pay
,最后获取的 code 会拼在此回调地址后返回,返回后如www.xx.com/pay?code=xxxx
code
:https://open.weixin.qq.com/connect/oauth2/authorize
?appid=你的appid
&redirect_uri=你的回调地址(拿到code后返回)
&response_type=code(返回类型,默认code)
&scope=snsapi_base(授权范围,静默授权拿到openid)
&state=STATE(自定义状态,非必填)
#wechat_redirect(重定向使用必须携带)
redirect_uri
参数要和你在微信公众号里设置的回调域名一致(例如:www.xx.com/pay
),需要注意的是这 url 需要urlEncode
。code
会以你设置的redirect_uri
地址里的参数带回来,拿到之后传给后端就行了。
script
引入js-sdknpm
包weixin-js-sdkwx.config
的参数
wx.chooseWXPay
所需的参数
参考
总结
以上是從前端的角度來整理微信支付的流程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

微信中使用者可以輸入付款密碼購物,那麼付款密碼忘了怎麼找回來呢?用戶需要我的-服務-錢包-支付設定-忘記支付密碼就能恢復。這篇支付密碼忘記找回方法介紹就能告訴大家具體的操作方法,以下就是詳細介紹,趕快看看吧!微信使用教程微信支付密碼忘記了怎麼找回答:我的-服務-錢包-支付設定-忘記支付密碼具體方法:1、先點擊我的。 2、點選裡面的服務。 3.點擊裡面的錢包。 4、找到支付設定。 5.點選忘記支付密碼。 6、輸入自己的資料驗證。 7.然後輸入新的支付密碼就可以更改了。

微信支付密碼忘記了的解決辦法:1、打開微信APP,點擊右下角的”我“,進入個人中心頁面;2、在個人中心頁面中,點擊“支付”,進入支付頁面;3、在支付頁面中,點選右上角的“…”,進入付款管理頁面;4、在付款管理頁面中,找到並點擊“忘記支付密碼”;5、按照頁面提示,輸入個人資訊進行身份驗證,驗證成功後,可以選擇「刷臉找回」或「驗證銀行卡資訊找回」的方式來找回密碼等等。

美團外帶app軟體內提供的美食小吃店舖非常多,而且所有的手機用戶都是透過帳號登入的。新增個人的收貨地址以及聯絡電話,享受最方便的外帶服務。打開軟體首頁,即可輸入商品關鍵字,線上搜尋就能找到相對應的商品結果,上下滑動選購下單即可,平台也會根據用戶提供的配送地址,推薦週邊附近數十家好評超高的店鋪,還能設定不同的支付方式,一鍵下單完成訂單即可,騎手第一時間安排配送速度非常快,還有不同金額的外賣紅包領取使用,現在小編在線詳細為美團外賣用戶們帶來設定微信付款的方法。 1選擇好商品後,提交訂單,點選立

微信支付扣款順序設定步驟:1、開啟微信APP,點選「我」介面,點選「服務」,再點選「收付款」;2、點選收付款介面付款碼下方的「優先使用此付款方式」; 3.選擇自己需要的優先支付方式即可。

微信支付成功後不能馬上取消。退款通常需要滿足以下條件:1、商家的退款政策,商家會制定自己的退款政策,包括退款的時間窗口、退款金額和退款方式等;2、支付時間,退款通常需要在一定的時間範圍內進行申請,超過該時間範圍可能無法退款;3、商品或服務狀態,如果用戶已經收到了商品或享受了服務,商家可能會要求用戶將商品退回或提供相應的證明; 4、退款流程等等。

大家沒事的時候,都是會選擇逛逛閒魚這一平台的,大家都能夠發現這一平台上,是有著大量的一些商品的存在,都能夠讓大家看到各種各樣的一些二手的寶貝,雖然是二手的產品,但是這一些產品的質量,絕對都是沒有任何的問題,所以大家都能夠放心的選購,價格都是特別的實惠,都還是能讓大家面對面的與這一些賣家們進行交流溝通,進行一些講價的操作,完全都是可以的,只要大家談的妥當的話,那麼你們就能夠選擇進行交易,且大家在這裡付款的時候,想要進行微信付款,但是好像平台上是不允許,具體情況如何,跟著小編一起來看看吧。閒魚

微信支付可以不綁定銀行卡。微信支付不綁定銀行卡也可以使用,前提是進行實名認證,只要通過實名認證即可使用微信零錢進行發紅包、轉賬、收款、微信支付等操作。需注意,微信不綁定銀行卡不能提現,且收付款、轉帳等額度有限額,單筆及每日最高200元,每月最高500元。

1.首先我們需要打開手機上的微信APP,然後點選登入微信帳號,這樣就進入了微信的首頁。 2.在微信首頁點選右下角的【我】按鈕,再選擇【付款】選項,我們點選進入支付頁面。 3.進入【付款】頁面後點選【錢包】選項進入,在【錢包】頁面點選右上角的【帳單】。
