reactjs - 在 React Web 应用程序中使用 paypalhere sdk
问题描述
我正在构建一个用于库存管理的网络应用程序。我在前端有 React,在后端有 Nodejs+mongodb。我们公司在当地活动中售货,我们的大部分销售都是用卡支付的。为了处理信用卡支付,我们在手机上使用 Paypal Here 应用程序,该应用程序连接到读卡器,我们手动输入支付金额。由于我们有超过 200 种不同的产品(定制艺术品),我们决定构建这个应用程序,以便我们可以快速搜索正在购买的产品,将它们添加到“购物车”中,其中将自动计算总价格和税金,然后一共会出现3个支付选项按钮,一个是现金,一个是venmo,一个是刷卡。首先,我认为卡选择按钮可以从外部链接到 Paypal Here 应用程序,并且在重定向时会自动填写付款金额,但后来我意识到我实际上可以在应用程序中集成一个 Paypalhere sdk,这听起来比重定向更好。一共有三种不同的sdk,一种是ios的,一种是android的,一种是web的,web的就是我需要的。我找了一个npm包,没有运气,然后我尝试通过react helment手动将脚本和src插入到文档中,没有运气,在componentDidMount上,没有运气。我不习惯没有要使用的 npm 包,所以我今天的问题是如何将这个 sdk 集成到我的 React 应用程序中?s 三个不同的sdk,一个用于ios,一个用于android,一个用于web,一个用于web 是我需要的。我找了一个npm包,没有运气,然后我尝试通过react helment手动将脚本和src插入到文档中,没有运气,在componentDidMount上,没有运气。我不习惯没有要使用的 npm 包,所以我今天的问题是如何将这个 sdk 集成到我的 React 应用程序中?s 三个不同的sdk,一个用于ios,一个用于android,一个用于web,一个用于web 是我需要的。我找了一个npm包,没有运气,然后我尝试通过react helment手动将脚本和src插入到文档中,没有运气,在componentDidMount上,没有运气。我不习惯没有要使用的 npm 包,所以我今天的问题是如何将这个 sdk 集成到我的 React 应用程序中?
这是 Web 集成文档的链接:https ://developer.paypal.com/docs/integration/paypal-here/sdk-dev/web/#integration
这是我用来手动插入脚本onComponentDidMount的代码,我不知道它是否有效,但即使它有效,我也不知道如何访问它......
useEffect(() => {
const script = document.createElement("script");
script.src = "https://www.paypalobjects.com/pph/websdk/js/pphwebsdk-1.1.14.min.js";
script.async = true;
document.body.appendChild(script);
return () => {
document.body.removeChild(script);
};
}, []);
解决方案
添加后不要删除脚本。
您可以设置回调函数,让使用 PPH 的代码在脚本加载后运行。这是一个带有回调函数的示例,它用于常规的 PayPal 按钮而不是 PPH,但您可以根据需要对其进行调整。
function loadAsync(url, callback) {
var s = document.createElement('script');
s.setAttribute('src', url); s.onload = callback;
document.head.insertBefore(s, document.head.firstElementChild);
}
loadAsync('https://www.paypal.com/sdk/js?client-id=sb¤cy=USD', function() {
paypal.Buttons({
// Set up the transaction
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: '0.01'
}
}]
});
},
// Finalize the transaction
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
// Show a success message to the buyer
alert('Transaction completed by ' + details.payer.name.given_name);
});
}
}).render('body');
});
或者,您可以从<head>
应用程序的索引中静态加载 SDK,它始终可以随时使用。
推荐阅读
- google-sheets - 将公式复制到 A 列的最后一行(在表格中)
- javascript - 获取 json 文件时出现 GET - 404(未找到)错误
- angular - 直接从 html 中调用 Angular 组件的函数会破坏单元测试
- azure - 在 blob 存储中转换 xslx csv 文件并存储到 ADLS
- database - 如何开始数据输入、记录和绘图程序?(我可能会移植到一个网站)
- tensorflow - 微调后如何评估 Huggingface 模型?
- docker - 如何在 HPC 集群上运行奇异容器?- 错误:创建用户命名空间失败:用户命名空间已禁用
- reactjs - 无法读取未定义的属性(读取“updateProfile”)
- cpu - 假设 64 位计数器不会溢出是否安全?
- python - 为配置屏幕中的每个设置调用不同方法的 Pythonic 方式