PayPal + Node.js - 如果我与另一个用户登录并清除了浏览器缓存,则获取“已捕获订单”
Posted
技术标签:
【中文标题】PayPal + Node.js - 如果我与另一个用户登录并清除了浏览器缓存,则获取“已捕获订单”【英文标题】:PayPal + Node.js - Getting "Order Already Captured" if though I logged with another User and cleared browser Cache 【发布时间】:2021-09-28 09:20:02 【问题描述】:我正在开发一个带有 Nuxt + Node + Express 的网站,并且我正在尝试实施 PayPal。 我正在使用PayPal Node SDK,并按照他们的 Github 页面中的描述创建了文件。 我正在我的电脑上开发(所以,localhost..)并使用 PayPal Sandbox。
问题是:它第一次完美运行。我点击前端的“购买”按钮,我被重定向到 PayPal 支付页面,我使用沙盒帐户付款,然后我再次使用 URL 中的 TOKEN 重定向到我的网站。调用后端 API 的输出是“完成”。
但是,如果我使用其他用户登录,清除浏览器缓存甚至更改浏览器,然后再次尝试购买,它会显示:“订单已被捕获”。几个小时后,我可以再次购买。唯一有效的是重新启动服务器。我用cookies-parser
检查了服务器中是否有一些cookie,但没有。
打电话给任何人帮助我了解为什么会发生这种情况?
这是我使用的文件/代码:
创建了paypal_controller.js
:
const paypal = require("@paypal/checkout-server-sdk");
let clientId = "<<MY CLIENT ID>>";
let clientSecret = "<<MY CLIENT SECRET>>";
let environment = new paypal.core.SandboxEnvironment(clientId, clientSecret);
let client = new paypal.core.PayPalHttpClient(environment);
let request = new paypal.orders.OrdersCreateRequest();
request.requestBody(
intent: "CAPTURE",
purchase_units: [
description: "Subscription",
amount:
currency_code: "USD",
value: "200.00",
,
,
],
application_context:
return_url: "http://localhost:3000/user/dashboard",
cancel_url: "http://localhost:3000",
,
);
const createOrder = async (req, res) =>
console.log("creating order");
await client
.execute(request)
.then((data) =>
res.json(data);
)
.catch((err) =>
console.log(err);
res.json(err);
);
;
在api.js
中创建了路由:
const express = require("express");
const
createOrder,
captureOrder,
getOrderDetail,
= require("../controllers/paypal_controller");
const router = express.Router();
router.get("/payment/createorder", createOrder)
module.exports = router;
我在前端调用:
await this.$axios.$get('http://localhost:9000/api/payment/createorder')
.then((det) =>
window.location.href = det['result']['links'][1]['href']
)
【问题讨论】:
【参考方案1】:在服务器启动时,以下内容被初始化,因此每个用户的顺序相同:
let request = new paypal.orders.OrdersCreateRequest();
request.requestBody(
intent: "CAPTURE",
purchase_units: [
description: "Subscription",
amount:
currency_code: "USD",
value: "200.00",
,
,
],
application_context:
return_url: "http://localhost:3000/user/dashboard",
cancel_url: "http://localhost:3000",
,
);
您想将该代码放置在路线中,而不是外部
const createOrder = async (req, res) =>
console.log("creating order");
// place aforementioned code here, after validation!
await client
.execute(request)
.then((data) =>
【讨论】:
以上是关于PayPal + Node.js - 如果我与另一个用户登录并清除了浏览器缓存,则获取“已捕获订单”的主要内容,如果未能解决你的问题,请参考以下文章
Paypal 与 reactjs -node.js 集成 - 实施指南
node.js / axios AUTHENTICATION_FAILURE 与 PayPal 订阅 API