PayPal嵌入式流程未使用returnUrl或cancelUrl

9
我正在使用Paypal的自适应支付和嵌入式流程功能,通过迷你浏览器提供结账服务。除了当支付成功后,用户没有被重定向到我在PAY API请求中设置的returnUrl时,在沙盒环境中一切似乎都正常工作。同样适用于我的cancelUrl。
支付完成后,用户在迷你浏览器中会看到订单概述和一个标有“关闭”的按钮。如果用户点击此按钮,则迷你浏览器将关闭。
如果用户随时点击取消,则迷你浏览器将关闭。
除了设置一些轮询之类的东西来让我的页面意识到更改之外,似乎没有其他方法可以使用我的returnUrl和cancelUrl,这是没有道理的,对吧?
以下是我获取重定向URL的代码(使用自适应支付宝石):
pay_request = PaypalAdaptive::Request.new
data = {
  'requestEnvelope' => {'errorLanguage' => 'en_US'},
  'currencyCode' => 'USD',
  'receiverList' =>
          { 'receiver' => [
            {'email' => '...', 'amount'=> 10.00}
          ]},
  'actionType' => 'PAY',
  'returnUrl' => 'http://www.example.com/paid',
  'cancelUrl' => 'http://www.example.com/cancelled',
  'ipnNotificationUrl' => 'http://www.example.com/ipn'
}

pay_response = pay_request.pay(data)
redirect_to pay_response.approve_paypal_payment_url "mini"

以下是我设置 PayPal JS 的方法:

var dg = new PAYPAL.apps.DGFlowMini({ trigger: "buyit", expType: "mini" });

这似乎很简单,我不知道我漏掉了什么。

我也遇到了返回URL的问题,虽然PayPal IPN似乎在工作,但我在网页上收到了回调。https://www.paypal.com/us/cgi-bin/webscr?cmd=p/acc/ipn-info-outside - Ron
2个回答

9

很抱歉,我们这边好像出现了一个错误。我刚刚试过了并且已经向我们的集成团队确认了。:(

除了您提到的检查弹出窗口是否存在之外,我想不到其他短期解决方案,但可以从服务器端调用PaymentDetails API来检查支付状态。我已经在我们这边开了个bug,但没有具体时间表。

编辑于10/18:对不起,我说错了。这是有效的 - 只是我们的开发人员指南没有提供所有必需的信息。在小型浏览器流程中,您需要提供“callbackFunction”,并将dgFlow变量命名为“dgFlowMini”(后者很重要-因为apdg.js希望定义“dgFlowMini”变量)。这是有效的代码:

var returnFromPayPal = function(){
   alert("Returned from PayPal");
   // Here you would need to pass on the payKey to your server side handle to call the PaymentDetails API to make sure Payment has been successful or not
  // based on the payment status- redirect to your success or cancel/failed urls
}
var dgFlowMini = new PAYPAL.apps.DGFlowMini({trigger: 'em_authz_button', expType: 'mini', callbackFunction: 'returnFromPayPal'});

我这里有一个工作样例:https://pp-ap-sample.appspot.com/adaptivesample?action=pay(确保您选择“迷你”作为经验类型)

我们将更新文档并清理apdg.js,以删除对JS变量名称的依赖。


是的,我实际上创建了 apdg.js 的本地副本并对其进行了修改以适应我的需求。还有一些其他问题,isOpen 并不像你想象的那样工作。当用户点击 PayPal 按钮时,我现在有一个间隔的 Ajax 请求来轮询我的服务器,然后轮询 PayPal。这是唯一可靠的方法来知道付款何时已完成。 - Dan.StackOverflow
你好,是否可以将参数传递给回调函数?例如:var dgFlowMini = new PAYPAL.apps.DGFlowMini({trigger: 'em_authz_button', expType: 'mini', callbackFunction: 'returnFromPayPal($parameter)'}); - user254153
@Praveen,嵌入式支付流程是否适用于本机Android和iOS Web视图?关于这个问题到处都有不同的信息。在将现有自适应支付转换为它之前了解这一点将是很好的。谢谢。 - Heinrich
我已经让它在iPhone和Android手机和平板电脑上运行。我正在使用在https://developer.paypal.com/docs/classic/adaptive-payments/ht_ap-embeddedPayment-curl-etc/#mini-b中指定的迷你浏览器选项。我正在使用Bootstrap和AngularJS创建一个移动设备就绪的网站。目前似乎存在返回URL的问题,我将进一步研究,尽管PayPal IPN正在工作,我确实收到了回调。 - Ron
迷你浏览器可以工作,但在网页视图中却无法正常运行。PayPal能解决这个问题吗? - moDev
显示剩余2条评论

2

看起来嵌入式流程的PayPal体验变得更糟了。现在,当您调用迷你版或灯箱后,您将收到一个错误消息,指出“无法完成付款。此功能目前不可用。”


5
是的,PayPal的API真是一团糟。他们只是一帮懒惰的小偷,不关心任何人。 - Vlas Bashynskyi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接