Paypal Express Checkout 窗口不断加载
Posted
技术标签:
【中文标题】Paypal Express Checkout 窗口不断加载【英文标题】:Paypal Express Checkout window keeps loading 【发布时间】:2018-05-06 19:15:48 【问题描述】:我正在尝试集成 PayPal 按钮,以便对我刚刚创建的新 Paypal 帐户执行简单的付款。 按照指南,我渲染了按钮,但是当我单击它并显示新窗口时,什么也没有发生。 “加载锁”一直在旋转,但新窗口和我的页面中都没有显示错误。不执行对“onError()”函数的调用。我不知道怎么了!我听从了导游的指示!
在浏览其他网站时,我看到在新窗口中,在加载(以及“加载锁”旋转)时,一些 get/post 被执行,在我的情况下没有执行任何操作。
这是我的 html 和相关的 .js 文件(嗯,是其中的一部分)
//THIS FUNCTION IS CALLED TO DISPLAY A NEW ELEMENT CONTAINING THE BUTTON
function payment(todelete)
destroy(todelete);
$("#pay").delay(timeFade).fadeIn(timeFade);
paypal.Button.render(
env: 'sandbox',
client:
sandbox: 'MYKEY',
production: 'MYKEY'
,
commit: true,
payment: function(data, actions)
fetch("/getOldAmount").then(function(res)
return (res.json());
).then(function(data)
var old_amount = data[0].Donation;
var amount_tot = $("#amount").val();
//BUILDING A RANDOM TEST JSON, NOT RELATED TO MY CODE
var payment_json =
transactions: [
amount:
total: '1.00',
currency: 'USD'
]
;
if(amount_tot > old_amount)
//WHEN CLICKING PAYPAL BUTTON I CAN SEE THIS LOG, SO EVERYTHING IS FINE HERE
console.log("EXECUTING PAYPAL POST");
return actions.payment.create(payment_json);
else
console.log("Amount too low to execute transaction");
);
,
onAuthorize: function(data, actions)
return actions.payment.execute().then(function(payment)
console.log("AUTHORIZED");
);
,
onError: function(data, actions)
console.log("ERRORRRRRR");
console.log(data);
, '#paypal-button');
<div class="container pagination-centered" style="display: block">
<div class="form-group">
<label class="richest_header" for="amount">ENTER AMOUNT</label>
<input type="text" class="form-control amount-field" id="amount" placeholder="Amount..." name="amountField">
</div>
<div id="paypal-button"></div>
</div>
<!-- HEADER -->
[...]
<script src="https://www.paypalobjects.com/api/checkout.js">
<script type="text/javascript" src="assets/script/myscript.js"></script>
[...]
我需要做更多的事情吗? 我需要添加代码吗? 难道我做错了什么? 为什么 paypal 的文档这么差?
【问题讨论】:
but no errors are shown in the new window, nor in my page
- 这是指浏览器 developer 工具控制台吗?即那里没有错误?您尝试过多种浏览器(Firefox、Chrome、IE、Edge 等)?所有行为都一样吗?除了在onAuthorize
中解析为未定义的承诺之外,您是否需要返回其他内容?
您是从 localhost 启动文件还是仅从 file:/// 启动文件?
抱歉信息太少了。我指的是每个页面的控制台、我设置按钮的页面以及 PayPal 为启动付款而创建的新窗口。我之所以指定这个是因为当我做错事(例如构建一个格式不正确的 json)时,按钮执行的调用会返回一个错误(例如 "Bad Request" ),但现在什么也没有发生。我已经尝试了所有浏览器,Firefox、Edge、Chrome 和 Internet Explorer。每次都是同样的老故事。
【参考方案1】:
你需要将promise返回给payment()
-- return fetch("/getOldAmount").then(...
【讨论】:
...这就是他们看到加载微调器的确切原因。他们没有兑现承诺,因此弹出窗口不知道何时显示结帐体验。 感谢您的回答!我会尝试这样做,如果这是问题,我会告诉你;) 非常感谢!有效!!!!你能解释一下出了什么问题吗?为什么? 当然!所以payment()
函数需要你回传一个承诺——这就是它最终获得在 iframe 中启动 url 所需的付款 ID 的方式。在您的情况下,由于没有返回承诺,payment()
函数刚刚得到undefined
,这意味着它没有足够的上下文来正确启动结帐流程。
感谢您的解释!以上是关于Paypal Express Checkout 窗口不断加载的主要内容,如果未能解决你的问题,请参考以下文章