批准 PayPal 订单但服务器端
Approve PayPal Order but serverside
我有这个付款代码:
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
发送请求服务
批准步骤总是发生在客户端。付款的人表示同意,他们不在您的服务器内,他们通过客户端连接到它。
但是,批准之前的步骤(创建订单)和批准之后的步骤(捕获订单,这是实际创建交易的步骤)都是从服务器完成的。您将需要为每个服务器路由;看起来你已经有了一条创建路线。第二个捕获路由应该将 id
作为输入,捕获它,进行任何验证,例如在向客户端返回响应之前检查任何成功的交易是否具有正确的金额。 (Error/unsuccessful 事务响应也应传播回客户端,因此它可以显示适当的消息或在 INSTRUMENT_DECLINED 的情况下重新启动)
要在客户端进行审批,请使用此流程:https://developer.paypal.com/demo/checkout/#/pattern/server
我有这个付款代码:
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 发送请求服务
批准步骤总是发生在客户端。付款的人表示同意,他们不在您的服务器内,他们通过客户端连接到它。
但是,批准之前的步骤(创建订单)和批准之后的步骤(捕获订单,这是实际创建交易的步骤)都是从服务器完成的。您将需要为每个服务器路由;看起来你已经有了一条创建路线。第二个捕获路由应该将 id
作为输入,捕获它,进行任何验证,例如在向客户端返回响应之前检查任何成功的交易是否具有正确的金额。 (Error/unsuccessful 事务响应也应传播回客户端,因此它可以显示适当的消息或在 INSTRUMENT_DECLINED 的情况下重新启动)
要在客户端进行审批,请使用此流程:https://developer.paypal.com/demo/checkout/#/pattern/server