Paypal 自适应支付无法在移动设备上运行

Posted

技术标签:

【中文标题】Paypal 自适应支付无法在移动设备上运行【英文标题】:Paypal adaptive payment not working in mobile 【发布时间】:2017-08-21 02:26:23 【问题描述】:

我正在尝试设置贝宝自适应支付流程来创建连锁支付。在遇到许多麻烦后,我的桌面版付款正常工作,它将付款发送给所有接收者,并正确重定向到我的网站。我现在的问题是在真正的移动浏览器中(设置我的桌面浏览器的用户代理解决了所有问题,但这自然不是真正的移动用户体验)。 这是我的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Paypal test</title>
</head>

<body>
<!--MINI-->
<script src="https://www.paypalobjects.com/js/external/apdg.js" type="text/javascript"></script>
<script type="text/javascript" charset="utf-8">

    //this function register the order in my system
    function saveOrder() 

                //call an internal api to get the paypal api key for this transaction
                $.ajax(
                  url: "http://www.example.com/ajax/getPayKey.php",
                  success: function(datakey) 

                       arrData = datakey.split("|");
                       var paykey=arrData[0];

                       //with the obtained api key i set the value of the hidden field in the form
                       $("#paykey").val(paykey);

                  

                );




       


    var returnFromPayPal = function()

        // returning from paypal flow i need to know the transaction status to redirect the user to the correct page in my site
        $.ajax(
              url: "<?php echo URL_SITO; ?>/ajax/PaymentDetails.php?pay_key="+ $("#paykey").val(),
              success: function(data_return) 

                 //with the url returned i redirect user
                 document.location.href=data_return;
              

            );

    

    //init the paypal flow 
    var dgFlowMini = new PAYPAL.apps.DGFlowMini(trigger: 'submitBtn', expType: 'mini', callbackFunction: 'returnFromPayPal');

</script>

<!--Start pay key process-->
<div onclick="saveOrder();">Pay Order</div>

<form action="https://www.sandbox.paypal.com/webapps/adaptivepayment/flow/pay" target="PPDGFrame" class="standard" id="paypal_form_adaptive">
    <!--Start payment flow-->
    <input type="image" id="submitBtn" value="Pay with PayPal" src="https://www.paypalobjects.com/en_US/i/btn/btn_paynowCC_LG.gif">
    <input id="type" type="hidden" name="expType" value="mini">
    <input id="paykey" type="hidden" name="paykey" value="insert_pay_key">
</form>
</body>
</html>

我在 paypal 文档中读到我可以使用三种类型的流进行自适应支付,我发现所有这些流类型都存在问题。我选择了“迷你”选项,因为它最接近解决方案。 无论如何,使用上面的代码,我主要完成了流程,“迷你”在我的 Iphone 中打开了一个新标签,我完成了付款,但重定向错误。 Paypal 在我的付款页面返回但callbackFunction: 'returnFromPayPal' 永远不会被调用。没有回调我无法重定向用户。

如何才能在移动设备上正确完成此流程? 有人怎么在手机上完成了流程?

付款流程详情

我必须创建一个链式支付流程,1 个发送者和 2 个接收者(主要和次要),流程将类似于:

发件人购买商品 -> 支付主要收款人 -> 主要收款人支付一定百分比给次要收款人(网络应用所有者)。

这是我的业务类型,正如您所见,它是一个简单的链式流程,并且在桌面版本中可以正常工作。

实现我的业务类型的技术流程是什么?

发件人购买商品->我调用第一个api来创建付款并检索paykey->使用paykey我发送一个表单以实例化迷你浏览器流程->发件人在迷你浏览器中完成支付->迷你浏览器返回和启动回调js函数->在回调js函数中我调用另一个paypal api来获取付款详细信息->分析付款详细信息我知道交易是否完成->如果交易完成我必须将用户重定向到特定页面在我的网站上,如果交易未完成,我必须将用户重定向到另一个页面。

【问题讨论】:

【参考方案1】:

假设您使用的是 ios 版 Safari,您可以尝试使用 Safari 的调试器 https://developer.apple.com/safari/tools/ 。 您应该考虑的另一件事是在 HTTP 请求中发送一个 User-Agent 标头,将浏览器标识为移动浏览器。 (paypal mobile express redirects to web instead of mobile)

【讨论】:

以上是关于Paypal 自适应支付无法在移动设备上运行的主要内容,如果未能解决你的问题,请参考以下文章

没有模式框或弹出窗口的自适应支付?

PayPal 支付标准从移动设备返回 GET 而不是 POST,因此无法验证记录支付

Paypal 在结帐时无法检测到移动设备

协助 PayPal 自适应支付 - IOS 和 Android 开发

PayPal 自适应支付 - angelleye CodeIgniter 库

PayPal Mobile Express - “无法使用移动设备付款”