18

我让它在我的生产服务器上工作,但在本地主机上canMakePayment()返回null.

我已经通过缩小的 Stripe 代码跟踪了这一点,但是遇到了一个函数ko,该函数只是发送一个调用CAN_MAKE_PAYMENT到某个消息队列的操作,此时执行变得异步,我无法进一步跟踪,直到请求得到解决e.available === false而没有进一步的信息.

我已经验证了 AP​​I 确实在 localhost 上的 Chrome 中可用(window.PaymentRequest可用)。我也在本地运行https(虽然没有绿色检查)。

如何追踪导致 Stripe 报告PaymentRequest不可用的原因?如果我没有绿色 SSL 检查,Chrome 会拒绝 PaymentRequest 调用吗?如果是这样,我将如何测试这个?Chrome 文档只是说如果 PaymentRequest 可用,那么您可以调用 API。

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

4

3 回答 3

13

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

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

这是一个实验。在 Chrome 中浏览到 URL 以绿色显示“Secure https:”的站点,例如https://stackoverflow.com。打开开发者控制台,粘贴这些命令(从这里)并按下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”被划掉),并且如果您尝试在控制台中运行相同的代码,则不会弹出付款请求模式up(即使您为域添加了安全例外)。

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

来自条纹的更新:

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

为了让 Apple Pay 在 iOS 模拟器或测试设备上运行,该域必须可公开访问并通过 Stripe 仪表板 ( 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) 这样的工具来创建一个 public-面向具有有效 HTTPS 证书的域,该证书通过隧道连接到您的本地环境。

于 2018-04-01T19:55:50.547 回答
0

绕过 Stripe,我能够验证 Chrome 报告不支持“基本卡”支付方式。

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

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

于 2018-03-20T17:49:46.360 回答
-1

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

在 Visual Studio 中启用 SSL

于 2019-11-02T14:02:24.043 回答