【问题标题】:Paypal Adaptive payment for mobile webPaypal 移动网络自适应支付
【发布时间】:2012-05-14 20:34:52
【问题描述】:

我正在为移动网站集成 Paypal Adaptive Payment API。 但是当我向

提交付款时

https://www.paypal.com/webscr?cmd=_ap-payment&paykey=value

(对于沙盒:https://www.sandbox.paypal.com/cgi-bin/webscr

它总是重定向到 Paypal 主网站。不是贝宝移动网站。 如何将客户端重定向到支付宝移动网站?

【问题讨论】:

标签: paypal mobile-website paypal-adaptive-payments


【解决方案1】:

尝试将您的网站重定向到

https://www.sandbox.paypal.com/webapps/adaptivepayment/flow/pay?paykey=AP-XYZ&expType=mini

填写您的支付密钥代替 AP-XYZ

让我知道它是否有效。

【讨论】:

  • 支付位有效,但不幸的是,在 PayPal 屏幕的末尾没有“返回”按钮,只有一个用于关闭浏览器选项卡的“关闭”按钮。这不支持将客户返回到可能有销售跟踪代码的原始站点。我还注意到,在移动支付上,支付通知可能需要几个小时。他们确实不支持移动网络上的自适应支付。
  • 难道您不应该包含一些 javascript 以使流程正常工作吗?这就是他们在官方文档中的建议(尽管 paypal 文档的可靠性很低)
  • 谁能提供生产URI示例吗?
  • 有一个未记录的功能可让您在完成后将移动流量重定向回您的网站。只需在 URL 中使用 expType=redirect 而不是 expType=mini。在页面下方查看我的答案。
  • 用这个把我的头发拉出来。它不适合我。来自贝宝的文档太糟糕了。
【解决方案2】:

我发现的最佳方法是迷你浏览器体验。但是我在实现它的移动设备上遇到了各种不同的问题(这就是它的初衷)。您会看到许多关于自适应支付的类似问题以及使用灯箱和迷你浏览器体验的各种问题。

但最后...我在数小时后,日复一日地想通了!当涉及到 PayPal 自适应支付的问题以及以下问题时,这应该可以解决每个人的各种问题:

  1. 默认重定向的贝宝页面不支持移动设备,在移动设备上看起来很糟糕。
  2. 灯箱“挂起”并且在某些移动设备上无法关闭。
  3. 完成支付或取消后迷你浏览器不关闭。
  4. 迷你浏览器不会从 paypal apdg.js 脚本重定向到 callBackFunction。
  5. 付款完成后(或取消时)不重定向到 returnUrl 和 cancelUrl
  6. Chrome for ios (iphone) 不会启动回调函数,因此在付款完成或取消后,它只会让您停留在您启动 paypal 付款页面的页面,从而阻止您验证付款成功或失败。李>

请打鼓……来了!!这取代了对 PayPal javascript 文件等的任何需求。您所需要的只是下面的内容以及您自己的获取 PayKey 以添加到重定向 url 的方法。我的实时网站是https://www.trackabill.com,自适应支付使用以下代码正常工作。

<div>
    <?php $payUrl = 'https://www.paypal.com/webapps/adaptivepayment/flow/pay?expType=mini&paykey=' . $payKey ?>

    <button onclick="loadPayPalPage('<?php echo $payUrl; ?>')" title="Pay online with PayPal">PayPal</button>
</div>
<script>
    function loadPayPalPage(paypalURL)
    {
        var ua = navigator.userAgent;
        var pollingInterval = 0;
        var win;
        // mobile device
        if (ua.match(/iPhone|iPod|Android|Blackberry.*WebKit/i)) {
            //VERY IMPORTANT - You must use '_blank' and NOT name the window if you want it to work with chrome ios on iphone
                //See this bug report from google explaining the issue: https://code.google.com/p/chromium/issues/detail?id=136610
            win = window.open(paypalURL,'_blank');

            pollingInterval = setInterval(function() {
                if (win && win.closed) {
                    clearInterval(pollingInterval);
                    returnFromPayPal();
                }
            } , 1000);
        }
        else
        {
            //Desktop device
            var width = 400,
                height = 550,
                left,
                top;

            if (window.outerWidth) {
                left = Math.round((window.outerWidth - width) / 2) + window.screenX;
                top = Math.round((window.outerHeight - height) / 2) + window.screenY;
            } else if (window.screen.width) {
                left = Math.round((window.screen.width - width) / 2);
                top = Math.round((window.screen.height - height) / 2);
            }

            //VERY IMPORTANT - You must use '_blank' and NOT name the window if you want it to work with chrome ios on iphone
                //See this bug report from google explaining the issue: https://code.google.com/p/chromium/issues/detail?id=136610
            win = window.open(paypalURL,'_blank','top=' + top + ', left=' + left + ', width=' + width + ', height=' + height + ', location=0, status=0, toolbar=0, menubar=0, resizable=0, scrollbars=1');

            pollingInterval = setInterval(function() {
                if (win && win.closed) {
                    clearInterval(pollingInterval);
                    returnFromPayPal();
                }
            } , 1000);
        }
    }

    var returnFromPayPal = function()
    {
       location.replace("www.yourdomain.com/paypalStatusCheck.php");
        // Here you would need to pass on the payKey to your server side handle (use session variable) to call the PaymentDetails API to make sure Payment has been successful
        // based on the payment status- redirect to your success or cancel/failed page
    }
</script>

【讨论】:

    【解决方案3】:

    实际上有一个简单的解决方案,在任何地方都没有记录。不久前我们正在与 PayPal 讨论添加它,所以我想知道它是否最终得到实施。

    无论如何,只需将用户重定向到以下 URL,他们将在完成后重定向回您的网站:

    https://www.sandbox.paypal.com/webapps/adaptivepayment/flow/preapproval?preapprovalKey=PA-XXXXX&expType=redirect
    

    这里的区别在于使用expType=redirect 而不是expType=mini。我不确定这是什么时候添加的,但是经过一些逆向工程和一些实验后,我们有了一个非常简单的解决方案。

    【讨论】:

      【解决方案4】:

      没错 - 自适应支付 UI 未针对移动设备进行优化。但最接近它提供的是我们所说的 MiniBrowser 体验。您可以尝试看看这是否满足您的需求。您可以在 X.com 上找到操作指南:Implementing the Mini-Browser Option

      【讨论】:

      • x.com 的上述链接已损坏
      猜你喜欢
      • 2015-03-28
      • 2015-07-19
      • 2021-08-04
      • 2012-09-18
      • 2012-06-03
      • 2014-10-13
      • 2013-11-10
      • 2013-11-07
      • 2014-01-23
      相关资源
      最近更新 更多