为什么Stripe paymentRequest.canMakePayment()在Localhost上失败?

时间:2018-03-20 17:43:01

标签: stripe-payments

我在生产服务器上运行此功能,但在localhost canMakePayment()上返回null

我已经通过缩小的Stripe代码跟踪了这一点但是碰到了一个功能ko的墙,它只是将一个名为CAN_MAKE_PAYMENT的动作发送到某个消息队列,此时执行变为异步,我无法进一步跟踪,直到使用e.available === false解决请求时没有进一步的信息。

我已经验证了在localhost上确实可以使用Chrome(window.PaymentRequest可用)。我也在本地https上运行(虽然没有绿色支票)。

如何跟踪导致Stripe报告PaymentRequest不可用的原因?如果我没有绿色SSL支票,Chrome会拒绝PaymentRequest电话吗?如果是这样,我该如何测试呢? Chrome文档只是说如果PaymentRequest可用,那么您可以调用API。

如果我知道消息队列的处理位置,我可以进一步调试。

3 个答案:

答案 0 :(得分:3)

Stripe的支持团队向我确认需要进行绿色SSL验证。

  

“付款请求按钮的先决条件之一是   付款请求所在的页面必须作为   使用有效证书保护。这是两者的要求   生产和发展。“

这是一个实验。浏览到Chrome中的网站,其中网址为“安全https:”绿色,例如https://stackoverflow.com。打开开发人员控制台,粘贴这些命令(from here)并按 Enter

const supportedPaymentMethods = [
  {
    supportedMethods: 'basic-card',
  }
];
const paymentDetails = {
  total: {
    label: 'Total',
    amount:{
      currency: 'USD',
      value: 0
    }
  }
};
const options = {};
const request = new PaymentRequest(
  supportedPaymentMethods,
  paymentDetails,
  options
);
request.show();

然后,您会看到弹出付款请求模式。

但是如果您浏览到您自己的本地站点,地址栏中的地址栏中显示红色“不安全”(并且“https”被划掉),并且您尝试运行相同的代码在控制台中,不会弹出任何付款请求模式(即使您为域添加了安全例外)。

因此,显然Chrome(可能还有其他浏览器)在连接不完全安全时阻止Stripe(以及Stripe等其他工具)访问该浏览器功能。

Stripe更新:

  

虽然Chrome iOS确实包含PaymentRequest实现,但它不允许在iframe中使用PaymentRequest,这会阻止Stripe的付款请求按钮元素工作。我们正在与Chrome小组合作,以便在将来的版本中解决此问题。

     

要使Apple Pay在iOS模拟器或测试设备上运行,域名必须可通过条带信息中心(https://dashboard.stripe.com/account/apple_pay)或API公开访问和注册。 https://stripe.com/docs/stripe-js/elements/payment-request-button#verifying-your-domain-with-apple-pay我们建议使用像ngrok(ngrok.com)这样的工具来创建一个面向公众的域,该域具有隧道到本地环境的有效HTTPS证书。

答案 1 :(得分:0)

绕过条纹,我能够验证Chrome是否报告“基本卡”付款方式不受支持。

这需要根据Google的文档设置PaymentRequest并尝试request.show()命令。

我猜这与没有绿色SSL验证有关,我会尝试修复它。

答案 2 :(得分:0)

您应该在Visual Studio中启用SSL才能使用paymentRequest。

Enable SSL in Visual Studio