所有我试图在这里做的是能够从后端API获取paypal_api_key类似:
app.get("/api/keys/paypal", (req, res) => {
res.send(process.env.PAYPAL_CLIENT_ID || "sb");
});
前端侧:
const loadPaypalScript = async () => {
const { data: clientId } = await axios.get("/api/keys/paypal", {
headers: { authorization: `Bearer ${userInfo.token}` },
});
paypalDispatch({
type: "resetOptions",
value: {
"client-id": clientId,
currency: "GBP",
},
});
paypalDispatch({ type: "setLoadingStatus", value: "pending" });
};
loadPaypalScript();
错误:
Uncaught Error: Attempted to load sdk version 5.0.343 on page, but window.paypal at version undefined already loaded.
To load this sdk alongside the existing version, please specify a different namespace in the script tag, e.g. <script src="https://www.paypal.com/sdk/js?client-id=CLIENT_ID" data-namespace="paypal_sdk"></script>, then use the paypal_sdk namespace in place of paypal in your code.
at VM827 js:2
at Module.<anonymous> (VM827 js:2)
at t (VM827 js:2)
at VM827 js:2
at VM827 js:2
我试过了
<script src="https://www.paypal.com/sdk/js?client-id=***"></script>
它工作,但我不感兴趣,在这样的平原视线传递我的api密钥
1条答案
按热度按时间djp7away1#
客户端ID是并且必须是公共信息,它是加载脚本所必需的。在页面加载后异步获取它并使用它来动态加载脚本不会以任何方式隐藏它;在浏览器发出请求的那一刻,以及资源被加载的那一刻,它就“显而易见”了,所以如果这就是异步加载脚本的原因,那就没有任何意义;您将一事无成,应该只做有用的事情,或者将脚本标记作为HTML放在页面中,或者使用官方的react-paypal-js。
在任何情况下,错误的原因都是您执行了多次加载SDK的操作。您需要确保它只加载一次。(对于同时需要多个SDK的罕见用例,
data-namespace
可用,但这不是您的情况)