新聞中心
本文主要內容分三部分,第一部分是需求分析,第二部分是實現(xiàn)步驟,第三部分是問題詳解。

創(chuàng)新互聯(lián)公司:于2013年開始為各行業(yè)開拓出企業(yè)自己的“網站建設”服務,為上1000家公司企業(yè)提供了專業(yè)的成都網站制作、做網站、網頁設計和網站推廣服務, 按需求定制網站由設計師親自精心設計,設計的效果完全按照客戶的要求,并適當?shù)奶岢龊侠淼慕ㄗh,擁有的視覺效果,策劃師分析客戶的同行競爭對手,根據客戶的實際情況給出合理的網站構架,制作客戶同行業(yè)具有領先地位的。
如果您只需要解決問題,請閱讀第一、二部分即可。
如果您有更多時間,進一步學習問題相關知識點,請閱讀至第三部分。
1、需求分析
點擊微信掃碼支付按鈕,會彈出掃碼支付彈框,在彈框中部顯示一個微信支付的二維碼。
用戶打開微信掃碼并支付成功后,就會關閉彈框,彈出成功消息提示,并刷新表格數(shù)據,更新對應訂單的支付狀態(tài),置灰微信掃碼支付按鈕。
用戶點擊彈框內的取消按鈕,就會隱藏彈框。
2、實現(xiàn)步驟
(1)準備工作(了解即可)
登錄微信公眾平臺,獲取微信公眾號開發(fā)者ID(AppID)。
登錄微信支付商戶平臺,申請Api證書、設置APIv3秘鑰。當然,這里有一個前提,必須要有商家的營業(yè)證書,否則無法認證和申請。
獲取微信支付商戶號、獲取商戶證書序列號。
(2)編寫后端接口(了解即可)
在pom.xml文件中,引入微信支付相關依賴。
在application.xml文件中,配置上面在準備工作中獲取的微信支付相關配置信息。
新建一個微信支付配置類WechatConfig,映射配置文件中配置的參數(shù)。
編寫一個微信支付下單請求參數(shù)WxOrderDTO類。具體參數(shù)詳情見官方文檔:https://pay.weixin.qq.com/docs/merchant/apis/native-payment/direct-jsons/native-prepay.html.
編寫一個微信返回通知結果集WxResultDTO類。具體參數(shù)詳情見官方文檔:https://pay.weixin.qq.com/docs/merchant/apis/native-payment/payment-notice.html。
編寫一個微信支付工具類WxPayUtils,在其中定義一個獲取HttpClient實例的公共方法getClient,通過商戶號和序列號,以及加載秘鑰文件和證書文件,生成對應的HttpClient實例。
編寫調用微信支付接口的WxPayService業(yè)務類,在其中編寫一個Native支付的統(tǒng)一下單方法CreateNativeOrder。
編寫一個微信支付的WxPayController類,在其中編寫一個微信支付下單的方法nativeWxPay。值得注意的是,請求參數(shù)WxOrderDTO中的notify_url參數(shù)對應的地址,就是微信支付返回通知的回調地址。
編寫一個帶條件分頁查詢訂單列表的接口,用來查詢對應訂單的支付狀態(tài)。
這個比較簡單,按個人業(yè)務需求編寫,此處不再贅述。
編寫一個微信支付返回通知回調方法wxCallBack,在這里對微信返回的通知信息進行了簽名驗證、參數(shù)解密,判斷通知數(shù)據中交易狀態(tài)為成功后,修改訂單狀態(tài)。
擴展:申請微信退款功能實現(xiàn)詳細,基本類同微信支付下單流程,此處不再贅述。退款參數(shù)詳情見官方文檔:https://pay.weixin.qq.com/docs/merchant/apis/native-payment/create.html。
(3)編寫前端
在真實項目中,前端對于微信掃碼支付所做的操作并不多。
無非就是調用后端微信掃碼支付下單的接口,請求成功后在頁面渲染微信支付二維碼。
當用戶完成支付操作后,利用定時器輪循查詢訂單支付狀態(tài),從而判斷當用戶支付成功時,刷新數(shù)據并重新渲染頁面。
詳細實現(xiàn)步驟如下:
編寫掃碼支付二維碼彈框。
取消
在API文件中定義2個接口。
// 查詢訂單支付狀態(tài)
export const getDetApi = ({ params }: PropsData): any => {
return fetch({ url: `/pay/${params.id}`, method: 'get', params })
}
// 微信掃碼支付下單接口
export const nativeWxPayApi = ({ params }: PropsData): any => {
return fetch({ url: `/pay/nativeWxPay/${params.id}`, method: 'get' })
}
編寫微信掃碼支付方法,在點擊微信掃碼支付按鈕時調用。
// 微信掃碼支付
async function getNativeWxPayOrder() {
if (props.info) {
// 當前訂單的id
const id = (props.info as any).id
try {
// 調用微信掃碼支付下單接口
const res = await nativeWxPayApi({
params: {
id: id
}
})
if (res) {
// 渲染后端返回的微信支付二維碼
form['urlCode'] = res.result.code_url
// 刷新訂單狀態(tài)
await getOrderStatus()
}
} catch (e) {
console.log(e)
}
}編寫查詢訂單支付狀態(tài)方法,在調用微信掃碼支付接口完成后調用。
// 獲取訂單支付狀態(tài)
const getOrderStatus = async() => {
const id = (props.info as any).id
const params = {
params: {
id: id
}
}
// 使用定時器循環(huán)請求查詢訂單支付狀態(tài)接口,直到返回支付成功為止
const myStateInterval = setInterval(async () => {
// 調用查詢訂單支付狀態(tài)接口
const res = await getDetApi(params)
if (res.status === 200) {
// 如果訂單支付狀態(tài)顯示為已支付
if (res.result['status'] === 1) {
// 清除定時器
clearInterval(myStateInterval)
// 消息通知
emit('success', '成功')
// 關閉彈框,刷新數(shù)據
close()
}
}
}, 3000)
}3、問題詳解
(1)后端接口代碼編寫細節(jié)
后端微信支付下單和申請退款接口詳細,請參考視頻教程:https://www.bilibili.com/video/BV1eb4y187Qy?p=18&spm_id_from=pageDriver&vd_source=2571ea6a1d02797fe7590325786e2e84。
一切版權歸原作者所有,如有侵權請聯(lián)系刪除。
(2)用到文檔地址整理
- 微信支付API文檔:https://pay.weixin.qq.com/docs/merchant/apis/native-payment/direct-jsons/native-prepay.html。
- 微信商戶平臺:https://pay.weixin.qq.com/。
- 微信公眾平臺:https://mp.weixin.qq.com。
文章題目:Vue3問題:如何實現(xiàn)微信掃碼支付?全面!
URL網址:http://www.fisionsoft.com.cn/article/dpcgich.html


咨詢
建站咨詢
