使用uniapp在前端實現支付功能 思路代碼均有


 


### 因為我做的這個是個APP,所以從APP的角度來看如何實現支付。


最簡單的一個思路就是 發送訂單的相關數據(比如 價格數量等)發送到后台 ,讓后台生成一個訂單給返回到前台,然后前台拿着這個訂單數據去調支付API
主要工作是在后台進行,前台我認為只是需要發起兩次請求。
[uni.requestPayment(OBJECT)官方文檔](https://uniapp.dcloud.io/api/plugins/payment)

## 下面是發送獲取訂單請求的代碼
```yaml
function getOrderInfo(orderType, payMethod, buyAmount, payPrice) {
// 獲取訂單的地址
let url = 根據自己實際情況配置;
uni.request({
url: url,
method: "POST",
header: {
userId,
userToken
},
data: {
userId: userId,
orderType: orderType,
buyAmount: buyAmount,
payPrice: countMoney,
payMethod: methods
},
success: (result) => {
console.log(result);
res(result);
},
fail: (e) => {
err(e);
}
})
})
}

```

## 下面是發送支付請求的代碼

 

```yaml
支付類型orderType 支付方式payMethod 1:微信APP 2:支付寶APP 支付數量buyAmount 支付金額 payPrice
async function requestPayment(orderType, payMethod, buyAmount, payPrice) {
// await login();
console.log("獲取訂單前")
let orderInfo = await getOrderInfo(orderType, payMethod, buyAmount, payPrice);
console.log("得到訂單信息", orderInfo);
if (orderInfo.statusCode !== 200) {
console.log("獲得訂單信息失敗", orderInfo);
uni.showModal({
content: "獲得訂單信息失敗",
showCancel: false
})
return;
}
// 去支付

// console.log(xinxi);
uni.requestPayment({
// 支付方式
provider: payMethod,
// 訂單內容
orderInfo: orderInfo.data.data,
success: (res) => {
console.log("success", JSON.stringify(res));
return res;
},
fail: (err) => {
console.log("fail", JSON.stringify(err));
return err;
}
})
}
```


這個我僅在APP使用,其他的地方不清數是否一致。

[PHP實現支付csdn搜索列表](https://so.csdn.net/so/search/s.do?q=php%E5%AE%9E%E7%8E%B0%E6%94%AF%E4%BB%98&t=&u=)
[JAVA實現支付csdn搜索列表](https://so.csdn.net/so/search/s.do?q=java%E5%AE%9E%E7%8E%B0%E6%94%AF%E4%BB%98&t=&u=)
#### 友情提示一哈,要實現支付 一定要把相關的配置給整好 不然微信支付會一直報錯。
環境配置:
在manifest.json中 APP SDK 配置中 勾選支付,配好appid
APP 模塊權限中勾選支付。
最后,制作了一個自定義基座,把自己APP的證書上傳。使用自定義基座運行實現了微信支付。
### 支付流程

1、支付寶支付

app—------調用支付接口(傳遞id,金錢,支付類型)

后台調用第三方,返回回調接口,和交易碼、商品名、金額

app通過sdk調用支付寶,傳遞商品名、回調地址、交易碼、金額

支付后查看第三方返回的狀態是成功還是失敗,還是處理中,成功的話調用后台接口獲取支付狀態

2、微信支付

app—------調用支付接口(傳遞id,金錢,支付類型)

后台調用第三方,返回預支付id

app把預支付id提交給微信,再刷新狀態接口

3、銀聯支付

app—------調用支付接口(傳遞id,金錢,支付類型)

后台調用第三方,返回銀聯交易號

app通過sdk 傳遞銀聯交易號給銀聯做支付

4、ios內購

1.客戶端向Appstore請求購買產品,Appstore驗證產品成功后,從客戶端的Apple賬戶中扣費。

2.Appstore向客戶端返回一段receipt-data(票據),里面記錄了本次交易的證書和簽名信息。

3.客戶端向我們可以信任的服務器(后台)提供receipt-data

4.服務器對receipt-data進行一次base64編碼

5.把編碼后的receipt-data發往itunes.appstore進行驗證

6.itunes.appstore返回驗證結果給服務器

7.服務器對商品購買狀態以及商品類型,向客戶端發放相應的道具與推送數據更新通知

漏票原因及解決辦法

出現的兩種驗證方式:

IAP built-in Model(本地驗證):此種方式跳過來3-7步,在第2步中拿到票據直接向itunes.appstore請求驗證票據,根據票據的結果來修改數據。有一些單機游戲因為不涉及后台服務器會采取此種方式,但由此單來的不安全也很明顯,比如一些越獄的手機會很容易對此進行一些數據操作。這里暫不做討論。

IAP Server Model(服務器驗證):如果把數據放在服務器做校驗(如實走完1-7的流程),就不用擔心客戶端出現偽造票據等問題。但是這樣還會出現問題。

想象一下,如果得到票據說明蘋果已經扣款成功,就在這時向服務器發送票據驗證的時候出現來異常,這個時候可能網絡突然斷了,未把票據發送的服務器驗證,導致明明已經扣了款,卻沒有收到相應的內購產品,出現了漏單問題。

一:得到票據,立即保存本地,並向服務器驗證

二:驗證成功,刪除本地保存數據。若未成功,再次驗證重試。

三:APP重啟時,如有本地票據則與服務器進行認證,若認證成功則刪除票據。

四:若以上流程還未能解決漏單問題,則可在APP增加類似找回按鈕,依據本地保存票據進行找回(流程三)。

注:服務器需建立表單記錄票據數據,避免多次增加內購產品。

作者:仰望星空_4645
鏈接:https://www.jianshu.com/p/d9a8936d5932
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


# 最后,讀者如果發現了什么問題,望不吝賜教,拜謝各位大佬。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM