条纹结帐:出了点问题

Posted

技术标签:

【中文标题】条纹结帐:出了点问题【英文标题】:Stripe Checkout: Something went wrong 【发布时间】:2022-01-05 20:23:50 【问题描述】:

我正在尝试将 Stripe 结帐(一次性付款)集成到我的 Angular 应用程序中(部署在 firebase 上,服务器后端使用 firebase 功能),但我的结帐卡在了 stripe 结帐页面:

Something went wrong
You might be having a network connection problem, or the payment provider cannot be reached at the moment.

这是我的 firebase 函数代码:

import * as functions from 'firebase-functions';

export const createStripeSessionTest = functions.https.onRequest(async (request, response) => 
  const STRIPE_SECRET_KEY = functions.config().stripe.test.secret;

  await execute(request, response, STRIPE_SECRET_KEY);
);

const execute = async (request: any, response: any, stripeSecretKey: string) => 
  const body = JSON.parse(request.body);

  const STRIPE_PRICE_ID = body.priceId
  const session = await createStripeSession(body, stripeSecretKey, STRIPE_PRICE_ID);

  response.setHeader('Access-Control-Allow-Origin', '*');
  response.setHeader('Access-Control-Allow-Methods', '*');
  response.setHeader("Access-Control-Allow-Headers", "X-Requested-With,Content-Type");

  response.send(session);


const createStripeSession = async (body: any, secretKey: string, priceId: string) => 

  const stripe = require('stripe')(secretKey);

  const session = await stripe.checkout.sessions.create(
    payment_method_types: ['card'],
    line_items: [
      price: priceId,
      quantity: 1,
    ],
    mode: 'payment',
    success_url: body.success_url, //'https://example.com/success?session_id=CHECKOUT_SESSION_ID',
    cancel_url: body.cancel_url, //'https://example.com/cancel',
  );

  return session;

我可以从 firebase 函数日志中确认我没有收到任何错误。此外,所有请求参数,例如priceId,已正确填充(通过 console.log 确认)。

但我确实在浏览器日志中看到了条带结帐页面的内容:

api.stripe.com/v1/payment_pages/cs_test_asdhfjkasfui32uhaisd:1 Failed to load resource: the server responded with a status of 401 ()

任何建议将不胜感激。我已经三次检查了我的密钥,它们似乎都正确配置了。

【问题讨论】:

401 表示未经授权。确保您的 API 密钥有效。 【参考方案1】:

我设法修复它。原来,我使用 NgxStripe 库来初始化条带,并直接在应用程序中使用条带 js 库来调用结帐过程。

因此,stripe-js 从未见过stripePublishableKey,这导致了这个关键不匹配问题。 (因此出现401 - unauthorized 错误)。

将 stripePublishableKey 直接传递给 loadStripe(..) 方法(在客户端)解决了这个问题:

loadStripe('pk_test_mystripekey').then(
  stripe => this.stripe = stripe
).then(
  () => this.createStripeSession()
)

Stripe 支持人员表示,报告给他们的许多问题确实是由于人们使用了错误的可发布密钥-秘密密钥组合。

【讨论】:

以上是关于条纹结帐:出了点问题的主要内容,如果未能解决你的问题,请参考以下文章

条纹结帐价格错误 - 无效整数

条纹结帐后如何生成收据页面

条纹结帐 - 删除或使电子邮件字段只读

条纹结帐键盘隐藏付款按钮

在结帐时为条纹产品添加描述

条纹结帐自定义按钮不充电