Ruby Paypal自适应支付移动应用程序在完成或取消时挂起

Ruby Paypal自适应支付移动应用程序在完成或取消时挂起,ruby,mobile,paypal,payment,Ruby,Mobile,Paypal,Payment,我有一个Ruby On Rails移动应用程序,它使用PayPal自适应支付和迷你浏览器。当在iPhone上的Safari中运行时,该应用程序工作正常:在完成付款(或取消付款)后,将执行returnFromPaypal回调函数,并将用户重定向到预订页面但是,当我以全屏模式运行应用程序时(从保存到主屏幕的图标,这是预期的操作模式),当我取消付款或完成付款时,应用程序会挂在PayPal页面上,并分别显示消息“稍等-此窗口将自动关闭”和“返回”。 下面是我的付款页面的.haml视图(很抱歉,我没有HT

我有一个Ruby On Rails移动应用程序,它使用PayPal自适应支付和迷你浏览器。当在iPhone上的Safari中运行时,该应用程序工作正常:在完成付款(或取消付款)后,将执行returnFromPaypal回调函数,并将用户重定向到预订页面

但是,当我以全屏模式运行应用程序时(从保存到主屏幕的图标,这是预期的操作模式),当我取消付款或完成付款时,应用程序会挂在PayPal页面上,并分别显示消息“稍等-此窗口将自动关闭”和“返回”。

下面是我的付款页面的.haml视图(很抱歉,我没有HTML版本)。

有人知道发生了什么吗?谢谢大家!

= javascript_include_tag  src="https://www.paypalobjects.com/js/external/apdg.js"
#edit_payment.current
  .scroll
    %ul
      %li
        = form_tag "https://www.sandbox.paypal.com/webapps/adaptivepayment/flow/pay", :method=>'get', :target=>"PPDGFrame", :class=>"standard" do
          = hidden_field_tag :type, "mini", :name=>"expType"
          = hidden_field_tag :paykey, @pay_key, :name=>"paykey"
          = image_submit_tag "paypal_button.jpg", :id=>"submitBtn", :class=>"submit"
    :javascript
      var returnFromPayPal = function(){
          window.location.href = get_full_url("#{room_reservation_path(@room,@reservation)}");
      };                                                                                                                                  
      var dgFlowMini = new PAYPAL.apps.DGFlowMini({trigger: 'submitBtn',expType: 'mini', callbackFunction: 'returnFromPayPal'});

我也遇到了同样的问题,直到我在一个新窗口中将代码改为重定向到PayPal。然后,当用户完成支付或取消时,页面不会挂起,它会自动关闭

有关迷你浏览器体验(expType=mini)的更多信息,请参见:

据我所知,这是“按设计工作”。只需在WebView中捕获重定向,并在服务器上调用付款检查方法

在apdg.js中,您可以找到检查:

if (ua.match(/iPhone|iPod|Android|Blackberry.*WebKit/i)) {
    win = window.open('', this.name);
    winOpened = true;
}
因此,当前窗口已被完全替换。没有回电话的机会

或者您可以在WebView本身中支持多个窗口。 例如Android:

mWebView.getSettings().setSupportMultipleWindows(true);
mWebView.getSettings().setUserAgentString("web browser");
及 @凌驾

public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) {
不确定iOS WebView中有多个窗口