如何根据环境渲染Paypal智能按钮?

时间:2020-01-02 23:36:48

标签: javascript paypal paypal-sandbox

我可以在网站上添加带有实时客户端ID的paypal按钮,并且一切正常,但是出于开发目的,我在本地测试时使用了沙箱客户端ID,这意味着始终在src中更改客户端ID:

<script src="https://www.paypal.com/sdk/js?client-id=AYw0JC4IjiptK8Dyv--SPi98ze5My9hgTOmD_ckO8u197I56tpOtinZAu7p2flNCPGk5ZezoYSNS-U4Z&currency=GBP&disable-funding=credit,card">
    </script>

我创建了一个js文件,该文件会根据网站运行的环境加载不同的脚本文件-

const LOCAL_DOMAINS = ["localhost", "127.0.0.1", ""];

var paypalTestScript = 'https://www.paypal.com/sdk/js?client-id=AXQBIcWjoGGdwc1GXUtX9fx7o_U3lUIcmShJCa7FcJYX8MVOXa20yy1M7FgLdHPmEsWmU30ChP1X9xJJ&vault=true&currency=GBP&disable-funding=credit,card';
var paypalLiveScript = 'https://www.paypal.com/sdk/js?client-id=AYw0JC4IjiptK8Dyv--SPi98ze5My9hgTOmD_ckO8u197I56tpOtinZAu7p2flNCPGk5ZezoYSNS-U4Z&vault=true&currency=GBP&disable-funding=credit,card';

var paypalScriptToUse = "";
if (LOCAL_DOMAINS.includes(window.location.hostname)) {
    paypalScriptToUse = paypalTestScript;
} else {
    paypalScriptToUse = paypalLiveScript;
}

var script = document.createElement('script');
script.setAttribute('src', paypalScriptToUse);
document.head.appendChild(script);

但是,贝宝(Paypal)智能按钮在渲染中非常不一致,因为它可以工作7/8次中的1次。是否有一种稳定的方式来动态加载脚本?

1 个答案:

答案 0 :(得分:0)

您的代码似乎可以正常工作,我想您已经为基于URL的这种动态环境加载创建了正确的hack,尽管我从未见过这样做。通常,人们在环境之间切换的速度要慢得多,每天最多只能经过几次,因此注释和取消注释页面顶部的两行,即:

    <script>for sandbox...(currently uncommented)</script>
<!--
    <script>for live...(currently commented out)</script>
-->

..对于我到目前为止观察到的所有开发用例来说,已经足够了。


如果没有更多数据,就无法解决您的“它在7/8次中可以工作1次”的问题,就像完整的可运行代码段一样,我们可以使用以下代码进行测试和再现