亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
小程式支付
#開發(fā)流程
注意事項(xiàng)
H5 支付
偽代碼
參考
JSAPI 支付(微信內(nèi)網(wǎng)頁支付)
同時(shí)支持 H5 支付和 JSAPI 支付
注意事項(xiàng)
參考
總結(jié)
首頁 微信小程式 小程式開發(fā) 從前端的角度來整理微信支付的流程

從前端的角度來整理微信支付的流程

Dec 09, 2020 pm 05:56 PM
微信支付

微信小程式開發(fā)教學(xué)梳理微信支付的流程

從前端的角度來整理微信支付的流程

#推薦:#微信小程式開發(fā)教學(xué)

因?yàn)闃I(yè)務(wù)需要,開發(fā)微信支付功能,涉及三種支付方式:

  • JSAPI 支付:微信內(nèi)網(wǎng)頁支付,需要開通微信服務(wù)號碼
  • 小程式支付:在小程式中支付,需要開通小程式
  • H5 支付:在手機(jī)瀏覽器(出微信內(nèi)網(wǎng)爺)中網(wǎng)頁支付

使用微信支付的前提必開通微信商家號,要使用到那種的支付方式要前需在商家平臺(tái)開通(要審核)。

支付的錢最終都會(huì)到商戶號碼裡(一般由公司財(cái)務(wù)開通)。

開發(fā)微信支付的過程中大大小小坑還是踩了不少,終於做完了,整理下開發(fā)流程。

參考:

  • 微信支付-存取指引
  • 微信支付-開發(fā)文件

小程式支付

開發(fā)流程

  1. 小程式端請求建立訂單接口,後端統(tǒng)一下單取得orderId 並返回
  2. 小程式端取得透過wx.login ()取得code
  3. 小程式端拿這codeorderId請求後端接口,取得支付所需資料
  4. 取得支付所需資料之後,小程式端呼叫wx.requestPayment()接口,直接呼叫起支付頁面
  5. 判斷是否支付成功後的邏輯

async?function?wxPay(goodId)?{
??//?1.?創(chuàng)建訂單?獲取orderId
??let?orderId?=?await?ajax("POST",?"/api/OrderProgram/CreateTheOrder",?{
????goodId,?//?商品id
??});
??//?2.?獲得?code
??let?code?=?await?wxlogin();?//?基于pr封裝的wx.login()方法
??//?3.?獲取支付的數(shù)據(jù)
??let?payData?=?await?ajax("POST",?"/api/OrderProgram/WxXcxPay",?{
????orderId,
????code,
??});
??//?4.?發(fā)起支付
??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("支付失敗");
??}
}

注意事項(xiàng)

  1. 申請微信小程式帳號
    申請成功可拿到AppID(小程式id)和AppSecret(小程式金鑰)
    申請類型為企業(yè)性質(zhì),否則無法接入微信支付
  2. 微信小程式認(rèn)證
    通過認(rèn)證的小程式才能接入微信支付和綁定商家平臺(tái)
  3. 申請商家平臺(tái)帳號
    需要第一步驟申請的AppID
    申請成功可拿到MchID(商家id)和MchKey(商家金鑰)
  4. 信小程式關(guān)聯(lián)商家號碼
    微信與商家都認(rèn)證成功後,在微信後臺(tái)微信支付選單中進(jìn)行關(guān)聯(lián)
  5. 存取微信支付
    在微信後臺(tái)微信支付選單中進(jìn)行存取

H5 支付

開發(fā)流程

  1. 前端端請求創(chuàng)建訂單接口,後端統(tǒng)一下單獲取orderId# 並返回
  2. #前端帶著orderId 請求支付接口,獲得mweb_url
  3. 然後跳轉(zhuǎn)mweb_url 會(huì)跳轉(zhuǎn)微信自動(dòng)調(diào)用微信支付
  4. 支付後返回支付頁,判斷是否支付成功(需發(fā)送請求後端查詢)
    4.1 重新整理頁面,取得最新的付款(訂單)狀態(tài)。
    4.2 設(shè)定一個(gè)的按鈕"我已付款",讓使用者點(diǎn)擊自動(dòng)查詢狀態(tài)。

偽代碼

async?function?wxH5Pay(goodId)?{
??//?1.?創(chuàng)建訂單?獲取orderId
??let?orderId?=?await?ajax("POST",?"/api/OrderProgram/CreateTheOrder",?{
????goodId,?//?商品id
??});
??//?2.?獲取支付跳轉(zhuǎn)的URL
??let?mweb_url?=?await?ajax("POST",?"/api/OrderProgram/WxH5Pay",?{?orderId?});
??//?3.?跳轉(zhuǎn)URL去微信支付
??if?(mweb_url)?{
????location.href?=?mweb_url;
??}?else?{
????console.log("回調(diào)地址出錯(cuò)");
??}
??//?4.?支付后返回支付頁,判斷是否支付成功
??//?4.1?刷新頁面,獲取最新的訂單(商品)狀態(tài)。
??//?4.2?設(shè)置一個(gè)"我已支付"的按鈕,讓用戶點(diǎn)擊之后查詢狀態(tài)。
}

注意事項(xiàng)

  • 在商家平臺(tái)設(shè)定正確的支付網(wǎng)域
  • 偵錯(cuò)需要在線上,如果嫌麻煩可以使用內(nèi)網(wǎng)穿透(Ngrok 或花生殼)
  • 需對redirect_url進(jìn)行urlencode處理
  • H5 付款不能直接在微信客戶端內(nèi)調(diào)起,請?jiān)谕獠繛g覽器調(diào)起。

參考

  • 微信支付-H5 支付-開發(fā)步驟

JSAPI 支付(微信內(nèi)網(wǎng)頁支付)

#開發(fā)流程

  • 商品頁
  1. 前端商品頁建立訂單,在後端統(tǒng)一下單後取得orderId
  2. 前端帶著orderId 跳到支付頁,
  • 支付頁
  1. #取得

    code

      第一次進(jìn)入頁面,判斷是否路徑中有
    1. code
    2. #沒有
    3. code,請求資料跳轉(zhuǎn)授權(quán)頁面,code 會(huì)透過回呼位址一起回傳回來
    4. 拿到
    5. code,傳送給後端,後端解析到openid ,保存好。
  2. 點(diǎn)擊確定支付按鈕,觸發(fā)

    wxPay() 方法

      發(fā)送
    1. orderId 給後端,取得wxData
    2. wxData 中包含wx.configwx.chooseWXPay 兩個(gè)介面的資料。
    3. 先呼叫
    4. wx.config()然後在呼叫 wx.chooseWXPay(),如果一切正常,付款頁面就會(huì)彈出。
  3. 支付狀態(tài)透過後端去查詢
偽代碼

    商品頁
//?1.?創(chuàng)建訂單?獲取orderId
let?orderId?=?await?ajax("POST",?"/api/OrderProgram/CreateTheOrder",?{
??goodId,?//?商品id
});
//?2.?攜帶id?跳轉(zhuǎn)到支付頁
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">點(diǎn)擊支付</button>
    ??</p>
    </template>
付款頁JS

//?Vue
data(){
????return?{
????????orderId:?this.$route.params.orderId,?//?訂單id
????????url:?'',//?獲取code的url
????????wxData:?null,//?js-sdk接口所需的數(shù)據(jù)
????}
},
mounted(){
????//?判斷是否有code
????this.getCode()
}
methods:?{
????getCode()?{
????????var?code?=?this.getUrlPram("code");
????????if?(code?!=?null)?{
????????????this.code?=?code;
????????????//?拿到?code?發(fā)給?后端
????????????this.sendCode(code);
????????}?else?{
????????????//?去拿code
????????????this.getUrl();
????????}
????},
????getUrl()?{
????????//?請求后端拿到url所需數(shù)據(jù),然后跳轉(zhuǎn)頁面在通過回調(diào)地址返回,獲取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)?{
????????//?發(fā)送code給后端?后端解析出openid
????????this.axios
????????????.post("/api/OrderProgram/GetOpenidAndAccessTokenFromCode",?{
????????????????code:?code,
????????????})
????????????.then((res)?=>?{
????????????????console.log(res);
????????????})
????????????.catch((err)?=>?{
????????????????console.log(err);
????????????});
????},
????wxPay:?async?function()?{
????????//?發(fā)送orderid,獲取wx.chooseWXPay和wx.config所需的參數(shù)
????????this.wxData?=?await?this.axios.post(
????????????"/api/OrderProgram/WxJSAPIPay",
????????????{?orderId:?this.orderId?}
????????);
????????let?wxConfigData?=?this.wxData.wxConfigData?//?獲取wx.chooseWXPay()所需數(shù)據(jù)
????????let?wxPayData?=?this.wxData.wxPayData;//?獲取wx.config()所需數(shù)據(jù)
????????this.$wx.config({
????????????debug:?false,?//?開啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來,若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會(huì)通過log打出,僅在pc端時(shí)才會(huì)打印。
????????????appId:?wxConfigData.appId,?//?必填,公眾號的唯一標(biāo)識
????????????timestamp:?wxConfigData.timeStamp,?//?必填,生成簽名的時(shí)間戳
????????????nonceStr:?wxConfigData.nonceStr,?//?必填,生成簽名的隨機(jī)串
????????????signature:?wxConfigData.paySign,?//?必填,簽名
????????????jsApiList:?[
????????????????"chooseWXPay",
????????????],
????????});
????????//?執(zhí)行支付
????????this.$wx.chooseWXPay({
????????????timestamp:?wxPayData.timeStamp,?//?支付簽名時(shí)間戳,注意微信jssdk中的所有使用timestamp字段均為小寫。但最新版的支付后臺(tái)生成簽名使用的timeStamp字段名需大寫其中的S字符
????????????nonceStr:?wxPayData.nonceStr,?//?支付簽名隨機(jī)串,不長于?32?位
????????????package:?wxPayData.package,?//?統(tǒng)一支付接口返回的prepay_id參數(shù)值,提交格式如:prepay_id=\*\*\*)
????????????signType:?wxPayData.signType,?//?簽名方式,默認(rèn)為'SHA1',使用新版支付需傳入'MD5'
????????????paySign:?wxPayData.paySign,?//?支付簽名
????????????success:?(res)?=>?{
????????????????this.$toast("支付成功");
????????????},
????????????fail:?(err)?=>?{
????????????????this.$toast("支付失敗");
????????????},
????????});
????},
}

同時(shí)支持 H5 支付和 JSAPI 支付

//?在創(chuàng)建訂單之后,就判斷環(huán)境使用哪種方法支付。
if?(isWx())?{
??this.WXPay(orderId);?//?帶著orderId跳轉(zhuǎn)到支付頁邏輯
}?else?{
??this.H5Pay(orderId);?//?執(zhí)行上面H5支付中的創(chuàng)建訂單之后的邏輯
}
//?判斷是否是微信瀏覽器
function?isWx()?{
??let?uAgent?=?navigator.userAgent.toLowerCase();
??reutrn(/micromessenger/.test(uAgent))???true?:?false;
}

注意事項(xiàng)

  • 開通微信商戶號 - 設(shè)置支付目錄(如果是 Vue 這類 SPA 頁面,到根目錄即可,也就是#號之前的地址)
  • 開通微信公眾號(服務(wù)號) - 設(shè)置安全域名、設(shè)置授權(quán)域名
  • 收集參數(shù):appId 和 AppSecret
  • 添加 Web 開發(fā)工具開發(fā)者(需要開發(fā)者同時(shí)開發(fā)者關(guān)注開發(fā)的微信公眾號和微信公眾賬號安全助手)參考文檔
    [圖片上傳失敗...(image-b07878-1605777597831)]
  • 設(shè)置回調(diào)域名(例如:www.xx.com/pay,最后獲取的 code 會(huì)拼在此回調(diào)地址后返回,返回后如www.xx.com/pay?code=xxxx
  • 獲取 code

    • 參考獲取 code 文檔
    • 在微信客戶端網(wǎng)頁打開授權(quán)地址,跳轉(zhuǎn)之后,在返回的回調(diào)地址之后拿到 code
https://open.weixin.qq.com/connect/oauth2/authorize
?appid=你的appid
&redirect_uri=你的回調(diào)地址(拿到code后返回)
&response_type=code(返回類型,默認(rèn)code)
&scope=snsapi_base(授權(quán)范圍,靜默授權(quán)拿到openid)
&state=STATE(自定義狀態(tài),非必填)
#wechat_redirect(重定向使用必須攜帶)

redirect_uri參數(shù)要和你在微信公眾號里設(shè)置的回調(diào)域名一致(例如:www.xx.com/pay),需要注意的是這 url 需要urlEncode

請求這個(gè)地址之后,code 會(huì)以你設(shè)置的redirect_uri地址里的參數(shù)帶回來,拿到之后傳給后端就行了。

  • 前端引入 js-skd

    • 使用script引入js-sdk
    • 下載使用 npm 包weixin-js-sdk
  • 獲取 wx.config 的參數(shù)
  • 獲取 wx.chooseWXPay 所需的參數(shù)

參考

  • 微信支付-JSAPI
  • 微信公眾號-網(wǎng)頁授權(quán)
  • JS-SDK 開發(fā)文檔

總結(jié)

整個(gè)流程走下來,給我的體驗(yàn)是:小程序支付最方面(因?yàn)榕渲蒙伲?,其次?H5,JSAPI 支付最麻煩(文章一多半都在寫它)

在微信支付功能開發(fā)過程中,其實(shí)最麻煩的不是開發(fā)流程,而是他的各種配置和授權(quán)流程,為了拿到所需的參數(shù)而來回折騰。

開發(fā)過程中的一些參數(shù)是經(jīng)常用到的,如 appid、openid、orderId

支付流程大徑相同,先獲取到用戶的 openid,知道你是誰,然后統(tǒng)一下單拿到 orderId 再去處理不同平臺(tái)的支付方式

開發(fā)時(shí)候用到的相關(guān)文檔,一定要仔細(xì)閱讀二遍以上為止?。?/p>

遇到問題不要死剛,多百度多 Google,說不準(zhǔn)你遇到的問題已經(jīng)有無數(shù)的人遇到過并且已經(jīng)有成熟的解決方案了。

前端和后端要多溝通,有什么問題(難點(diǎn))隨時(shí)反饋,需要什么參數(shù)好好說,遇到觀點(diǎn)不一致的時(shí)候千萬要注意控制住情緒,切莫撕逼(.——.)。

因?yàn)楸救怂接邢蓿瑢蠖肆鞒潭貌欢?,只能以前端的角度來梳理整個(gè)支付流程。

以上,希望對你有所幫助。

以上是從前端的角度來整理微信支付的流程的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
微信支付密碼忘了怎麼找回 微信支付密碼忘了怎麼找回 Feb 23, 2024 pm 09:40 PM

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

微信支付密碼忘了怎麼辦 微信支付密碼忘了怎麼辦 Jan 08, 2024 pm 05:02 PM

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

微信支付扣款順序怎麼設(shè)置 微信支付扣款順序怎麼設(shè)置 Sep 06, 2023 am 11:11 AM

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

美團(tuán)外送怎麼設(shè)定微信支付 設(shè)定微信付款的方法 美團(tuán)外送怎麼設(shè)定微信支付 設(shè)定微信付款的方法 Mar 12, 2024 pm 10:34 PM

  美團(tuán)外帶app軟體內(nèi)提供的美食小吃店舖非常多,而且所有的手機(jī)用戶都是透過帳號登入的。新增個(gè)人的收貨地址以及聯(lián)絡(luò)電話,享受最方便的外帶服務(wù)。打開軟體首頁,即可輸入商品關(guān)鍵字,線上搜尋就能找到相對應(yīng)的商品結(jié)果,上下滑動(dòng)選購下單即可,平臺(tái)也會(huì)根據(jù)用戶提供的配送地址,推薦週邊附近數(shù)十家好評超高的店鋪,還能設(shè)定不同的支付方式,一鍵下單完成訂單即可,騎手第一時(shí)間安排配送速度非???,還有不同金額的外賣紅包領(lǐng)取使用,現(xiàn)在小編在線詳細(xì)為美團(tuán)外賣用戶們帶來設(shè)定微信付款的方法?! ?選擇好商品後,提交訂單,點(diǎn)選立

閒魚可以用微信付錢嗎 改成微信付款的方法 閒魚可以用微信付錢嗎 改成微信付款的方法 Mar 12, 2024 pm 12:19 PM

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

微信支付成功後能馬上取消嗎 微信支付成功後能馬上取消嗎 Nov 29, 2023 pm 02:19 PM

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

滴滴出行怎麼設(shè)定微信支付 設(shè)定微信支付的方法 滴滴出行怎麼設(shè)定微信支付 設(shè)定微信支付的方法 Mar 13, 2024 pm 01:22 PM

滴滴出行app為大家日常出行提供更多方便,想去哪裡就去那裡,而且所有的滴滴車輛都是隨叫隨到的,再也不需要焦急等待了,數(shù)十個(gè)打車紅包免費(fèi)領(lǐng),出行速度更快。打開軟體首頁,依照個(gè)人的行程安排,輸入出發(fā)點(diǎn)以及目的地,正下方不同價(jià)位的車輛自由選擇,一鍵下單發(fā)布行程出去,滴滴司機(jī)都是秒接單的,以最快的速度到達(dá)指定地點(diǎn),上車前核對手機(jī)號即可,當(dāng)然支付車費(fèi)的方式非常多,微信支付寶都可以,但大家通常都是用微信,一鍵設(shè)定支付輕鬆搞定,現(xiàn)在小編在線仔細(xì)一一為滴滴出行用戶帶來設(shè)定微信支付的方法?! ?、我們在手機(jī)

微信支付申請退款的步驟分享 微信支付申請退款的步驟分享 Mar 25, 2024 pm 06:31 PM

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

See all articles