node.js - 将贝宝捕获和自定义订单保存到数据库
问题描述
我尝试使用支付属性 Payment._id 保存订单,但无法在创建路由中获取捕获 ID。有没有办法通过贝宝传递一些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({});
});
解决方案
在purchase_units[0]
您的订单创建请求正文中,您可以包含唯一的** invoice_id
(对付款人可见,为搜索编制索引),或任意custom_id
(仅对接收人可见,不编制索引)。
*发票 ID 之前不应该用于成功捕获付款,否则这将导致默认配置中出现重复发票 ID 错误(以防止意外重复付款)
当您成功捕获订单时,PayPal 交易 ID 将为purchase_units[0].payments.captures[0].id
。将其存储在您的数据库中以供将来参考。
推荐阅读
- javascript - 在开发模式下代理服务器请求时,是否可以呈现不属于 react 项目的 html 文件?
- python - 使用 python 库 win32com.client 在没有任何权限的情况下发送 Outlook 电子邮件
- r - 从R中的向量创建多个随机样本的data.frame?
- docker - 我的 API 端点在生产中应该是什么样子?
- html - 悬停和动画在 CSS3 中都不起作用
- google-apps-script - 使用应用程序 javascript 将 Google 表格作为 .xlsx 文件下载到我的计算机
- live - 如何在 WebOS 中创建用于播放 M3U 播放列表 (IPTV) 的直播播放器?
- reactjs - 如何在 React.js 中连接 Polygon 链上的 Metamask 钱包并获取余额
- react-native - React Native - Google Sheets API 阅读问题
- angular - 在组合框列上实现虚拟不会绑定 KendoUI 角度中的最后一列