【问题标题】:Paypal adaptive payments mobile browser (Safari & Chrome on iPhone)Paypal 自适应支付移动浏览器(iPhone 上的 Safari 和 Chrome)
【发布时间】:2015-05-01 04:21:57
【问题描述】:

我已经使用迷你浏览器选项实现了嵌入式自适应支付,该选项在 Android 手机上运行良好,但在 iPhone 浏览器(Safari 和 Chrome)上出现问题

在 Safari 上:- 用户必须手动关闭 PayPal 弹出窗口,而它应该已经自动关闭。 (手动关闭弹出窗口后,它会触发我用来更新订单的 JavaScript 回调函数)

Chrome:- 当用户点击支付按钮打开支付宝授权迷你浏览器,但支付成功或取消支付后,它不会自动关闭弹窗,甚至不会触发回调手动关闭。

我正在使用以下代码

<form action="https://www.sandbox.paypal.com/webapps/adaptivepayment/flow/pay" target="PPDGFrame">
<input id="type" type="hidden" name="expType" value="mini">
<input id="paykey" type="hidden" name="paykey" value="AP-XXXXXXXXXXX"> 
<input type="submit" id="PPsubmitBtn" value="Pay">
</form>
<script src="https://www.paypalobjects.com/js/external/apdg.js"></script>
<script>
var dgFlowMini = new PAYPAL.apps.DGFlowMini({trigger: 'PPsubmitBtn', callbackFunction: 'updateOrder'});

function updateOrder() {
     //My order stuff update code goes here
}
</script>

【问题讨论】:

  • 今天(2017 年 1 月 6 日),我在 iOS 10.1.1 (14B100) 上再次对其进行了测试 - Safari 和 Chrome,两者都运行良好。
  • 您好 Vinod,我使用的是完全相同的代码。当我单击“支付”按钮时,我会看到一个弹出窗口,但是该弹出窗口中没有加载任何内容。我期待看到 PayPal“登录”屏幕。我注意到,弹出窗口中的 URL 部分是“about:blank”。您能否指导我了解这种行为的任何潜在根本原因?谢谢。

标签: iphone paypal mobile-safari paypal-adaptive-payments chrome-ios


【解决方案1】:

当涉及到 PayPal 自适应支付问题和以下问题时,这应该可以解决每个人的各种问题:

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

这取代了对 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>

【讨论】:

  • 我会试一试,让你知道结果。谢谢:-)
猜你喜欢
  • 2015-03-28
  • 2012-05-14
  • 2014-06-23
  • 2015-07-19
  • 2021-08-04
  • 2017-08-21
  • 2011-03-22
  • 1970-01-01
  • 2020-03-02
相关资源
最近更新 更多