我有這個付款代碼:
generatePayPalButton() {
paypal
.Buttons({
createOrder: async () => {
const res = await this.sendReq.postReq("/api/paypal/create-order", { quantity: 1 })
return res.id
},
onApprove: function (data: any, actions: any) {
const capture = actions?.order?.capture().then((details: any) => {
console.log(details)
})
},
onCancel: () => {
console.log("Canceled")
},
onError: (e: any) => {
console.error(e)
}
})
.render("#paypal")
}
您可以清楚地看到,我在前端批準了訂單。但我想在后端批準訂單并將其保存到資料庫中。
這是我的后端代碼:
router.post("/api/paypal/create-order", async(req, res) => {
const request = new paypal.orders.OrdersCreateRequest()
const quantity = req.body.quantity
const total = quantity * dataController.payement.pricePerNight
request.prefer("return=representation")
request.requestBody({
intent: "CAPTURE",
purchase_units: [{
amount: {
currency_code: "USD",
value: total,
breakdown: {
item_total: {
currency_code: "USD",
value: total,
},
},
},
}, ],
})
try {
const order = await paypalClient.execute(request)
res.send({ id: order.result.id })
} catch (e) {
console.error(`Paypal error: `, e.message)
res.send(e)
}
})
所以在后端我只有一條路線,我把訂單ID回傳給我,這樣我就可以向用戶收費。但我怎么能確定他付了錢。我可以在后端檢查令牌或其他東西嗎?
我正在使用:NodeJs,表達 @paypal/checkout-server-sdk Angular sendRequestService
uj5u.com熱心網友回復:
批準步驟始終在客戶端進行。付款的人正在給予他們的批準,他們并不住在您的服務器內,他們通過客戶端連接到它。
但是,批準之前的步驟(創建訂單)和批準之后的步驟(捕獲訂單,這實際上是創建交易)都是從服務器完成的。您需要為其中的每一個提供服務器路由;看起來你已經有一個創建路線。第二個捕獲路由應該將一個id作為輸入,捕獲它,進行任何驗證,例如在向客戶端回傳回應之前檢查任何成功的交易是否具有正確的金額。(錯誤/不成功的事務回應也應該傳播回客戶端,因此它可以顯示適當的訊息或在 INSTRUMENT_DECLINED 的情況下重新啟動)
要在客戶端進行審批,請使用以下流程:https ://developer.paypal.com/demo/checkout/#/pattern/server
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/450146.html
標籤:javascript 节点.js 有角度的 表示 贝宝
