Rya*_*yan 1 javascript paypal paypal-sandbox
我正在尝试使用他们的checkout.js和以下提供的说明集成PayPal Express Checkout:https: //developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/advanced-integration/
每当我点击'PayPal'按钮时,我都会收到来自checkout.js脚本的undefined indexOf错误.我很快就得到了模态弹出窗口,然后就消失了.
TypeError: Cannot read property 'indexOf' of undefined
at Object.onSuccess (https://www.paypalobjects.com/api/checkout.js:11449:30)
at _loop2 (https://www.paypalobjects.com/api/checkout.js:1670:62)
at SyncPromise.dispatch (https://www.paypalobjects.com/api/checkout.js:1700:29)
at SyncPromise.then (https://www.paypalobjects.com/api/checkout.js:1718:18)
at Component.buildUrl (https://www.paypalobjects.com/api/checkout.js:11448:40)
at Object.onSuccess (https://www.paypalobjects.com/api/checkout.js:8770:57)
at _loop2 (https://www.paypalobjects.com/api/checkout.js:1670:62)
at SyncPromise.dispatch (https://www.paypalobjects.com/api/checkout.js:1700:29)
at SyncPromise.then (https://www.paypalobjects.com/api/checkout.js:1718:18)
at Function.syncPromiseTry [as try] (https://www.paypalobjects.com/api/checkout.js:1763:42)"
Run Code Online (Sandbox Code Playgroud)
它引用的行在checkout.js中:
return props.payment().then(function(token) {
if (token.indexOf("BA-") === 0) {
Run Code Online (Sandbox Code Playgroud)
我正在使用的代码直接来自PayPal的文档:
paypal.Button.render({
env: 'sandbox', // Specify 'sandbox' for the test environment
payment: function() {
var CREATE_PAYMENT_URL = '/api/checkout/create-express-payment';
paypal.request.post(CREATE_PAYMENT_URL)
.then(function(data) {
console.log('Payment ID: ', data.paymentId);
resolve(data.paymentId);
})
.catch(function(err) {
reject(err);
});
},
onAuthorize: function(data, actions) {
// Execute the payment here, when the buyer approves the transaction
}
}, '#paypal-button');
Run Code Online (Sandbox Code Playgroud)
我可以确认data.paymentId实际上是带有正确的支付ID,我甚至尝试将其编码到resolve呼叫中.这个错误似乎发生在我的内部API甚至被调用以获取付款ID之前(然后在调用之后再次发生).
我一直试图达到PayPal技术支持一周,并且在许多请求之后甚至没有收到确认.另外,我无法在Heroku上测试REST API,因为他们的沙箱响应时间超过30秒,而Heroku超时.这将是我最后一次在项目中使用PayPal ......而且这个速度看起来我需要尽快从这个项目中改变.
我有这个问题.我的用例是Express Checkout(客户端)和Paypal SDK(服务器).Paypal将此称为高级集成.
我解决了这个问题如下:
我让我的服务器返回一个JSON对象作为响应,具有单个属性"paymentID".这在Paypal文档的高级集成页面中进行了解释,但其重要性并未明确说明.
查看该文档的第4步,它清楚地说明了您需要返回的内容:
您的服务器向您的客户发送回复以传回付款ID:
Run Code Online (Sandbox Code Playgroud){ "paymentID": "PAY-0J356327TH335450NK56Y2PQ" }
checkout.js将此返回值作为"token"参数处理.
这是适合我的代码:
Run Code Online (Sandbox Code Playgroud)paypal.Button.render({ env: 'sandbox', payment: function(resolve, reject) { var CREATE_PAYMENT_URL = 'http://localhost/api/payment/create'; paypal.request.post(CREATE_PAYMENT_URL, { // js object used to create payment }).then(function(data) { resolve(data.paymentID); }).catch(function(err) { reject(err); }); }, onAuthorize: function(data) { var EXECUTE_PAYMENT_URL = 'http://localhost/api/payment/execute'; paypal.request.post(EXECUTE_PAYMENT_URL, { // js object used to complete payment // needs to include properties for paymentID and payerID }).then(function(data) { // process results after transaction is completed }).catch(function(err) {}); }, onCancel: function(data) {} }, '#paypal-button');
| 归档时间: |
|
| 查看次数: |
3539 次 |
| 最近记录: |