对条带付款使用付款方式意图

本教程将介绍对条带付款使用付款方式意图的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

对条带付款使用付款方式意图 教程 第1张

问题描述

我有这个:

const stripe = require('stripe')('sk_test', {
  stripeAccount: 'acct_...'
 });
const paymentIntent = await stripe.paymentIntents.create({
 amount: 1900,
 currency: 'cad',
 customer: 'cus_...',
 // confirm: true,
  }, {
 stripeAccount: 'acct_...',
});
console.log(paymentIntent)

然后我运行这个paymentIntent,它可以工作,但不会实际向客户收费,因为它显示没有存档的付款方式。然后我使用这个客户id,并查看我的条纹仪表板,它显示了那里的支付方式,并且该方法与id相匹配。所以现在我相信我在创建paymentIntent时做错了什么,但是付款正在进行,只是没有确认,因为它说没有附加付款方式!那么,为什么这不起作用呢?

错误:UnhandledPromiseRejectionWarning: Error: You cannot confirm this PaymentIntent because it's missing a payment method. You can either update the PaymentIntent with a payment method and then confirm it again, or confirm it again directly with a payment method.

推荐答案

PaymentIntent需要支付方式对象,如;

payment_method_types: [card],

PaymentIntent对象

const {
  error: backendError,
  clientSecret,
  paymentIntentId,
  transfer_group,
} = await fetch('/create-payment-intent', {
  method: 'POST',
  headers: {
 'Content-Type': 'application/json',
  },
  body: JSON.stringify({
 paymentMethodType: 'card',
 currency: 'cad',
 customerEmail: billingDetails.email,
 description: 'Basket_Order_Id',
  }),
}).then((r) => r.json());
 and when you created the paymentintent on your backend you should return 

  app.post('/create-payment-intent', async (req, res) => {
  const {paymentMethodType, currency, customerEmail, description, 
suppliers} =
  req.body;
  console.log('paymentIntent Create requ body', req.body);

  req.session.suppliers = suppliers;
  suppliersArray = suppliers;

 const idEmpotency = nanoid();
 // Each payment method type has support for different currencies. In order 
 to
 // support many payment method types and several currencies, this server
 // endpoint accepts both the payment method type and the currency as
// parameters
//
 // Some example payment method types include `card`, `ideal`, and 
`alipay`.
 const params = {
payment_method_types: [paymentMethodType], 'CARD'
amount: 20000,
currency: currency,
description: description,
receipt_email: customerEmail,
statement_descriptor_suffix: 'Your Bank Descriptor on Customer Account',
transfer_group: idEmpotency,
// confirm: true,
// capture_method: 'manual',
 };
try {
const paymentIntent = await stripe.paymentIntents.create(params);

// Send publishable key and PaymentIntent details to client
console.log('paymentIntent', paymentIntent);

res.send({
  clientSecret: paymentIntent.client_secret, - SENDING YOUR CLIENTSECRET
  paymentIntentId: paymentIntent.id,
  transfer_group: paymentIntent.transfer_group,
});
}catch (e) {
  return res.status(400).send({
  error: {
 message: e.message,
},
});
}
  });

  client_secret and use it on your front-end 



 const {error: stripeError, paymentIntent} = await stripe.confirmCardPayment(
  clientSecret, USE YOUR CLIENT SECRET THAT RETURNED FROM YOUR BACKEND FROM  PAYMENT INTENT OBJECT
  {
 payment_method: {
card: elements.getElement(CardElement),
billing_details: {
  name: 'Michael',
},
 },
  }
);


 Before confirming the client_secret that returned from payment_intent you can not succesfully confirm the payment.

 You can use stripe elements to start with their own card payment component.

 I recommend you to check here https://stripe.com/docs/payments/quickstart, you will get more idea...

好了关于对条带付款使用付款方式意图的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。