我在生产服务器上运行此功能,但在localhost canMakePayment()
上返回null
。
我已经通过缩小的Stripe代码跟踪了这一点但是碰到了一个功能ko
的墙,它只是将一个名为CAN_MAKE_PAYMENT
的动作发送到某个消息队列,此时执行变为异步,我无法进一步跟踪,直到使用e.available === false
解决请求时没有进一步的信息。
我已经验证了在localhost上确实可以使用Chrome(window.PaymentRequest
可用)。我也在本地https
上运行(虽然没有绿色支票)。
如何跟踪导致Stripe报告PaymentRequest
不可用的原因?如果我没有绿色SSL支票,Chrome会拒绝PaymentRequest电话吗?如果是这样,我该如何测试呢? Chrome文档只是说如果PaymentRequest可用,那么您可以调用API。
如果我知道消息队列的处理位置,我可以进一步调试。
答案 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。