代码之家  ›  专栏  ›  技术社区  ›  James Tian

即使提供了customerId,客户也不知道

  •  0
  • James Tian  · 技术社区  · 1 年前

    我觉得这里有些事情我没有做。 所以基本上我确保customerId匹配,但在处理付款后,它仍会显示客户为未知。

    后端

        const user = await strapi.entityService.findOne(
          "plugin::users-permissions.user",
          ctx.state.user.id
        );
    
        if (user.stripeCustomerId == null) {
          const customer = await stripe.customers.create({ email: user.email });
          const result = await strapi.entityService.update(
            "plugin::users-permissions.user",
            ctx.state.user.id,
            {
              data: {
                stripeCustomerId: customer.id,
              },
            }
          );
    
          const ephemeralKey = await stripe.ephemeralKeys.create(
            { customer: customer.id },
            { apiVersion: "2024-06-20" }
          );
    
          const paymentIntent = await stripe.paymentIntents.create({
            amount: 4444,
            currency: "usd",
          });
    
          return {
            ephemeralKey: ephemeralKey.secret,
            paymentIntent: paymentIntent.client_secret,
            customerId: customer.id,
          };
        } else {
          const ephemeralKey = await stripe.ephemeralKeys.create(
            { customer: user.stripeCustomerId },
            { apiVersion: "2024-06-20" }
          );
    
          const paymentIntent = await stripe.paymentIntents.create({
            amount: 4444,
            currency: "usd",
          });
    
          return {
            ephemeralKey: ephemeralKey.secret,
            paymentIntent: paymentIntent.client_secret,
            customerId: user.stripeCustomerId,
          };
        }
    

    前端

        const { initPaymentSheet, presentPaymentSheet } = useStripe();
        const { status, jwt } = useAuthStore();
    
        const proceedToOrder = () => {
            var config = {
                method: 'post',
                url: 'http://192.168.50.61:1337/api/orders/create-payment-intent',
                headers: {
                    Authorization: `Bearer ${jwt}`,
                },
            };
    
            axios(config).then(async (response) => {
                const { error } = await initPaymentSheet({
                    merchantDisplayName: 'Panda Eats',
                    customerId: response.data.customerId,
                    customerEphemeralKeySecret: response.data.ephemeralKey,
                    paymentIntentClientSecret: response.data.paymentIntent,
                    returnURL: 'stripe-example://stripe-redirect',
                    // retrieve this from your server
                });
                if (error) {
                    // handle error
                } else {
                    presentPaymentSheet();
                }
            });
        };
        const { showAuthSheet } = useAuthSheet();
        const handleOrderNow = () => {
            if (status == 'authenticated') {
                proceedToOrder();
            } else {
                showAuthSheet();
            }
        };
    

    任何帮助都将不胜感激!

    我尝试使用stripe api生成的客户端ID处理付款,我希望从stripe仪表板上看到付款属于生成的客户,但付款显示为访客。

    1 回复  |  直到 1 年前
        1
  •  0
  •   alex    1 年前

    您的PaymentIntent应使用相应的 customer 身份证件

    const paymentIntent = await stripe.paymentIntents.create({
       amount: 4444,
       currency: "usd",
       customer : customer.id
    });
    

    https://docs.stripe.com/api/payment_intents/create#create_payment_intent-customer