移动端iDEAL支付无法被PayPal捕获问题求助
PayPal iDEAL支付移动端无法捕获款项问题求助
已在PayPal开发者平台提交支持工单,但开发者无法定位问题,特此求助。
问题核心
网站使用PayPal处理iDEAL支付时,桌面端支付流程完全正常,但iPhone等移动端支付后款项无法被捕获,更换多台移动设备测试问题依旧。
支付流程对比
桌面端流程
- 选择银行后跳转至银行支付页面,扫码完成支付后返回网站
- 交易数据存入数据库,页面显示成功提示
- 款项从银行账户扣除并进入PayPal账户,支付已成功捕获
移动端流程
- 选择银行后跳转至银行APP完成支付,之后跳转至PayPal自带的“感谢页面”
- 款项从银行账户扣除,但未进入PayPal账户,疑似被自动退款,支付未被捕获
沙箱环境测试结果
沙箱环境下问题完全复现:桌面端支付可正常捕获,移动端无法执行捕获操作。
API调用记录分析
查看PayPal开发者控制台的API调用记录:
- 移动端仅触发了订单创建请求,未执行捕获操作
- 桌面端完整执行了订单创建与捕获的全流程
相关代码片段
// CREATE GLOBAL VARS var invoice_id = '<?php echo $db_invoice_id; ?>'; function submit_database(transaction_id, transaction_amount, transaction_status) { // DEBUG console.log('---BELOW PAYPAL FUNCTION---'); console.log(invoice_id); console.log(transaction_id); console.log(transaction_amount); console.log(transaction_status); $.ajax({ type: "POST", url: "/data/betalingen/herinnering/", data: {invoice_id: invoice_id, transaction_id: transaction_id, transaction_amount: transaction_amount, transaction_status: transaction_status}, success: function(data,textStatus,jqXHR){ start_processingIDEALPayment(data,textStatus,jqXHR); } }); function start_processingIDEALPayment(data,textStatus,jqXHR) { // DEBUG //alert(data); console.log(data); if (data == 'success') { $('.access-purchase .actions').hide(); $('.access-purchase .content-inner .description').removeClass('alert-danger'); $('.access-purchase .content-inner .description').addClass('alert-success'); $('.access-purchase .content-inner .description').html('<i class="fa-solid fa-check"></i> Wij hebben je betaling succesvol ontvangen. De pagina wordt ieder moment ververst, waarna je toegang zult hebben tot de stream.'); setTimeout(function (){ //Reload page location.reload(); }, 5000); } } } paypal.PaymentFields({ fundingSource: paypal.FUNDING.IDEAL, fields: { // PREFILL NAME FIELD name: { value: "<?pho echo $db_name; ?>", }, } }) .render("#ideal-fields"); paypal.Buttons({ fundingSource: paypal.FUNDING.IDEAL, style: { label: "pay", }, createOrder: (data, actions) => { return actions.order.create({ "purchase_units": [{ "amount": { "currency_code": "EUR", "value": "<?php echo $next_amount_to_pay; ?>", "breakdown": { "item_total": { "currency_code": "EUR", "value": "<?php echo $next_amount_to_pay; ?>" } } }, "items": [ { "name": "Betaling voor factuur: #<?php echo $db_invoice_id; ?>", "unit_amount": { "currency_code": "EUR", "value": "<?php echo $next_amount_to_pay; ?>" }, "quantity": "1" }, ], }] }); }, onApprove(data, actions) { return actions.order.capture().then(function(orderData) { // DEBUG console.log('Capture result', orderData, JSON.stringify(orderData, null, 2)); // CREATE VARS var transaction = orderData.purchase_units[0].payments.captures[0]; var transaction_id = transaction.id; var transaction_amount = transaction.amount.value; var transaction_status = transaction.status; // DEBUG console.log(transaction_id); console.log(transaction_amount); console.log(transaction_status); // SUBMIT TO DB submit_database(transaction_id, transaction_amount, transaction_status); // SHOW MESSAGE TO USER $('.box.invoice-payment').hide(); // HIDE PAYMENT FORM $('#openPaymentHandler').hide(); // HIDE PAYMENT FORM $('#payment-callback').removeClass('alert-danger'); $('#payment-callback').addClass('alert-success'); $('#payment-callback').html('<i class="fa-solid fa-check"></i> Wij hebben je betaling in goede orde ontvangen.'); $('#payment-callback').show(); setTimeout(function (){ //Reload page location.reload(); }, 3500); }); }, onCancel(data, actions) { // CANCELED //DEBUG console.log(`Order Canceled - ID: ${data.orderID}`); var transaction_id = data.orderID; var transaction_amount = '0.00'; var transaction_status = 'cancelled'; // SUBMIT TO DB submit_database(transaction_id, transaction_amount, transaction_status); // SHOW MESSAGE TO USER $('#payment-callback').removeClass('alert-success'); $('#payment-callback').addClass('alert-danger'); $('#payment-callback').html('<i class="fa-regular fa-circle-xmark"></i> De betaling is afgebroken of mislukt.'); $('#payment-callback').show(); }, onError(err) { // ERROR // DEBUG console.error(err); if (err == 'Error: Detected popup close') { var errorMsg = '<i class="fa-regular fa-circle-xmark"></i> De betaling is mislukt, omdat het betaalvenster is afgesloten.'; } else { var errorMsg = '<i class="fa-regular fa-circle-xmark"></i> De betaling is afgebroken of mislukt.'; } // SHOW MESSAGE TO USER $('#payment-callback').removeClass('alert-success'); $('#payment-callback').addClass('alert-danger'); $('#payment-callback').html(errorMsg); $('#payment-callback').show(); alert(err); }, }).render("#ideal-btn");
内容的提问来源于stack exchange,提问作者user3131209
相关产品推荐
相关产品推荐

