【问题标题】:Using Stripe Checkout in Cordova在 Cordova 中使用 Stripe Checkout
【发布时间】:2018-02-08 12:07:00
【问题描述】:

我可以让Stripe Checkout 在我的 Ionic/Cordova 应用程序中工作。它显示了一个 iFrame,允许用户输入他们的 Stripe 登录信息/信用卡信息以完成支付过程。

但是,我无法正确支持一个用户案例 - 当用户单击 Stripe Checkout iFrame 中的 Terms | Privacy 链接时,该链接会使用 Cordova Webview 打开,这会破坏我的应用程序,因为 Cordova 离开了我的应用程序并前往 Stripe 的Terms | Privacy 网页。 iOS 上没有后退按钮,即使在 Android 上也没有后退按钮,但应用程序状态完全被破坏,因为我们已经离开了我们的应用程序。

我曾尝试使用In app browser,但没有成功,因为我无法从 Stripe 获取 URL 以将它们提供给 In app browser。此外,由于security reasons,我无法操作 Stripe Checkout iFrame HTML。因此,我似乎没有办法通过更改 iFrame HTML 来使 Terms | PrivacyIn app browser 中打开或隐藏/删除 Terms | Privacy

这个问题有解决方案吗?如果没有,我可能会考虑不在我的应用中使用 Stripe Checkout。

谢谢!

【问题讨论】:

    标签: javascript cordova iframe stripe-payments


    【解决方案1】:

    总而言之,您不应该在 Cordova 应用程序中使用 Checkout。虽然某些功能在某些情况下可能有效,但并非所有功能都能正常工作(就像您描述的问题一样)。

    相反,您应该使用 Stripe 的 Elements 库设计您自己的自定义表单,以便在您的 Cordova 网络视图中使用它。

    【讨论】:

    • Elements 似乎不记得我的 Stripe 信息(例如,使用经过验证的电话号码,我不需要再次输入我的抄送信息),就像 Checkout 一样,我认为这是第一大好处我从结帐处获得。那时我可能会坚持使用陈旧而苍白的表单输入来获取客户信息。
    • Stripe Elements 是否可以在生产环境中使用? (我的 webview 显示在 file:// 而不是 https://
    • 我认为@Ywain 应该对 Elements 有所了解。将 stripe.js 引用放在 cordova 应用程序上会导致警告说生产使用需要 SSL。 AFIK 这打破了它与科尔多瓦(或电容器)应用程序的生产使用。
    【解决方案2】:

    我已经成功地使用提到的 InAppBrowser 插件让 Stripe Checkout 在 Cordova 应用程序中工作。

    你是对的,你不能用直接返回 URL 提供 InAppBrowser 插件,因为用于结帐的 Stripes javascript 只会创建一个重定向。

    解决方法是创建您自己的 php 文件,该文件将执行条带重定向。

    redirect.php 看起来像这样,用于使用 sofort 支付类型。

    <?php 
    
    // Include neccessary php Stripe sdk 
    require_once('PATH TO STRIPE SDK');
    
    $stripe_secret_key = 'YOUR STRIPE SECRET KEY'; 
    $stripe_api_key = 'YOUR STRIPE API KEY'; 
    
    // Using Stripe SDK create the Checkout 
    
    
    // price in € 
    $price_including = 100; 
    
    
    \Stripe\Stripe::setApiKey($stripe_secret_key);
    
            $session = \Stripe\Checkout\Session::create([
                'payment_method_types' => ['sofort'],
                'line_items' => [[
                  'price_data' => [
                    'currency' => 'eur',
                    'product_data' => [
                      'name' => 'YOUR PRODUCT NAME',
                    ],
                    'unit_amount' => $price_including*100,
                  ],
                  'quantity' => 1,
                ]],
                'mode' => 'payment',
                'success_url' => 'URL TO YOUR SUCCESS PAGE',
                'cancel_url' => 'URL TO YOUR ERROR PAGE',
              ]);
            
              $sid = $session->id;
    
    
    // with the created Session ID call the Stripe Javascript which will do the redirect
    
    // Include Stripe JS First
    echo '<script src="https://js.stripe.com/v3/"></script>'; 
    
              echo '<script type="text/javascript">
    
                         var stripe = Stripe("'.$stripe_api_key.'");
    
                          function redirect() 
                          {
                            return stripe.redirectToCheckout({ sessionId: "'.$sid.'" });
                          }
    
                          redirect(); 
             
              </script>'; 
    
    
    ?>
    

    基本上就是这样,您现在要做的就是调用 InAppBrowser 并使用指向您创建的 php 文件的 URL ;)

    【讨论】:

      猜你喜欢
      • 2017-03-10
      • 2020-06-25
      • 2020-10-05
      • 2020-10-16
      • 2021-02-03
      • 1970-01-01
      • 2016-08-09
      • 2018-01-08
      • 2019-09-29
      相关资源
      最近更新 更多