我正在尝试使用付款属性 Payment._id 保存订单,但无法在创建路由中获取捕获 ID。有没有办法通过paypal传递一些id然后在捕获中获取该ID?将订单和付款保存在捕获路径中是否是个好主意?
支付模型存储贝宝捕获
router.post("/order/create", async (req, res) => {
const { items, payment_method, price } = req.body;
try {
//Document just for validation that doesn't save
const newOrder = new Order({
items,
payment_method,
price,
});
const validationError = await newOrder.validate();
if (validationError !== undefined) throw Error("Validation Failed");
let request = new paypalSDK.orders.OrdersCreateRequest();
const body = {
intent: "CAPTURE",
purchase_units: [
{
items: paypalItems(newOrder.items),
amount: {
currency_code: "USD",
value: newOrder.price,
breakdown: {
item_total: {
currency_code: "USD",
value: newOrder.price,
},
},
},
},
]
};
request.prefer("return=representation");
request.requestBody(body);
const order = await client.execute(request);
res.status(200).json({
orderID: order.result.id,
});
} catch (e) {
console.error(e);
res.status(500);
}
});
router.post("/order/capture", async (req, res) => {
const { items, payment_method, price } = req.body;
const orderID = req.body.orderID;
const request = new paypalSDK.orders.OrdersCaptureRequest(orderID);
request.requestBody({});
try {
const capture = await client.execute(request);
const captureID = capture.result.purchase_units[0].payments.captures[0].id;
const newPayment = new Payment(capture.result);
const savedPayment = await newPayment.save();
const newOrder = new Order({
items,
payment_method,
price,
payment: savedPayment._id,
});
await newOrder.save();
} catch (err) {
console.error(err);
return res.sendStatus(500);
}
res.status(200).json({});
});
答案 0 :(得分:1)
在您的 orders create request body 的 purchase_units[0]
中,您可以包含唯一的 * invoice_id
(付款人可见)或任意 custom_id
(仅收款人可见) ).
*发票 ID 之前不应该用于成功捕获的付款,否则这将导致默认配置中的重复发票 ID 错误(以防止同一事物意外重复付款)
成功获取订单后,PayPal 交易 ID 将为 purchase_units[0].payments.captures[0].id
。将其存储在您的数据库中以备将来参考。