В настоящее время наш проект использует FastAPI в качестве серверной части и Vue в качестве внешнего интерфейса. Мы генерируем идентификатор платежного намерения на серверной стороне, а внешний интерфейс создает соответствующий платеж, используя этот идентификатор. После успешной оплаты вебхук Stripe отправляет событие во внутренний API. Однако мы столкнулись с некоторыми проблемами во время процесса оплаты на внешнем интерфейсе. Сначала я опубликую код:
Бэкэнд-код:
{
"code": "resource_missing",
"doc_url": "https://stripe.com/docs/error-codes/resource-missing",
"message": "No such PaymentMethod: 'pi_...'; It's possible this PaymentMethod exists on one of your connected accounts, in which case you should retry this request on that connected account. Learn more at https://stripe.com/docs/connect/authentication",
"param": "payment_method",
"payment_intent": {
"id": "pi_...",
"object": "payment_intent",
"amount": 1512,
"amount_details": {
"tip": {}
},
"automatic_payment_methods": {
"allow_redirects": "always",
"enabled": true
},
"canceled_at": null,
"cancellation_reason": null,
"capture_method": "automatic_async",
"client_secret": "pi_..._secret_...",
"confirmation_method": "automatic",
"created": 1731412378,
"currency": "gbp",
"description": null,
"last_payment_error": null,
"livemode": false,
"next_action": null,
"payment_method": null,
"payment_method_configuration_details": null,
"payment_method_types": [
"card"
],
"processing": null,
"receipt_email": "[email protected]",
"setup_future_usage": null,
"shipping": null,
"source": null,
"status": "requires_payment_method"
},
"request_log_url": "https://dashboard.stripe.com/test/logs/req_fsqWt4IIR3rXhM?t=1731412381",
"type": "invalid_request_error"
}
Из сообщения об ошибке видно, что ошибка указывает на require_pay_method. Однако как следует создавать метод Payment_method? Ключевой вопрос заключается в том, что мы не планируем использовать Stripe’s Elements для сбора информации о картах пользователей. Как нам с этим справиться? Я проверил документацию Stripe, но не нашел подходящего решения, возможно, из-за моего ограниченного владения английским языком и отсутствия некоторой ключевой информации.
Я надеюсь получить некоторые рекомендации. Заранее большое спасибо за вашу помощь, особенно за то, что нашли время помочь мне в вашем плотном графике. Ваша поддержка и идеи очень ценятся. Спасибо большое!
В настоящее время наш проект использует FastAPI в качестве серверной части и Vue в качестве внешнего интерфейса. Мы генерируем идентификатор платежного намерения на серверной стороне, а внешний интерфейс создает соответствующий платеж, используя этот идентификатор. После успешной оплаты вебхук Stripe отправляет событие во внутренний API. Однако мы столкнулись с некоторыми проблемами во время процесса оплаты на внешнем интерфейсе. Сначала я опубликую код: Бэкэнд-код: [code]@router.post("/create_payment_intent") async def create_payment_intent( request: Request, order_id: str = Form(...), order_amount: int = Form(...), currency: str = Form("gbp") ): metadata = { 'user_id': "", 'order_id': order_id } # Create payment intent intent = stripe.PaymentIntent.create( amount=order_amount, currency=currency, receipt_email=user_email, metadata=metadata, automatic_payment_methods={'enabled': True} )
res = { "client_secret": intent.client_secret, "payment_intent_id": intent.id } return JSONResponse(RestResult(code=Code.TRUE, msg=Message.SUCCESS_CREATE_PAYMENT_INTENT, data=res).__dict__) [/code] Код интерфейса: [code]import { RequestApi } from '@/api/RequestApi'; import { loadStripe } from '@stripe/stripe-js';
export class StripeUtil { static pay(params: any) { return new Promise((resolve, reject) => { RequestApi.createPayment(params).then(async res => { const stripe = await loadStripe(import.meta.env.VITE_STRIPE_KEY); if (!stripe) { return reject('stripe load failed'); } const { client_secret, payment_intent_id } = res.data;
const { error } = await stripe.confirmPayment({ clientSecret: client_secret, confirmParams: { payment_method: payment_intent_id, return_url: 'https://example.com/order/123/complete', }, }); if (error.type) { showDialog({ message: error.message }).then(); reject(error.message); } }).catch(error => { return reject(error); }); }); } } [/code] Сообщение об ошибке: [code]{ "code": "resource_missing", "doc_url": "https://stripe.com/docs/error-codes/resource-missing", "message": "No such PaymentMethod: 'pi_...'; It's possible this PaymentMethod exists on one of your connected accounts, in which case you should retry this request on that connected account. Learn more at https://stripe.com/docs/connect/authentication", "param": "payment_method", "payment_intent": { "id": "pi_...", "object": "payment_intent", "amount": 1512, "amount_details": { "tip": {} }, "automatic_payment_methods": { "allow_redirects": "always", "enabled": true }, "canceled_at": null, "cancellation_reason": null, "capture_method": "automatic_async", "client_secret": "pi_..._secret_...", "confirmation_method": "automatic", "created": 1731412378, "currency": "gbp", "description": null, "last_payment_error": null, "livemode": false, "next_action": null, "payment_method": null, "payment_method_configuration_details": null, "payment_method_types": [ "card" ], "processing": null, "receipt_email": "[email protected]", "setup_future_usage": null, "shipping": null, "source": null, "status": "requires_payment_method" }, "request_log_url": "https://dashboard.stripe.com/test/logs/req_fsqWt4IIR3rXhM?t=1731412381", "type": "invalid_request_error" } [/code] Из сообщения об ошибке видно, что ошибка указывает на require_pay_method. Однако как следует создавать метод Payment_method? Ключевой вопрос заключается в том, что мы не планируем использовать Stripe’s Elements для сбора информации о картах пользователей. Как нам с этим справиться? Я проверил документацию Stripe, но не нашел подходящего решения, возможно, из-за моего ограниченного владения английским языком и отсутствия некоторой ключевой информации. Я надеюсь получить некоторые рекомендации. Заранее большое спасибо за вашу помощь, особенно за то, что нашли время помочь мне в вашем плотном графике. Ваша поддержка и идеи очень ценятся. Спасибо большое!
В настоящее время наш проект использует FastAPI в качестве серверной части и Vue в качестве внешнего интерфейса. Мы генерируем идентификатор платежного намерения на серверной стороне, а внешний интерфейс создает соответствующий платеж, используя...
В настоящее время наш проект использует FastAPI в качестве серверной части и Vue в качестве внешнего интерфейса. Мы генерируем идентификатор платежного намерения на серверной стороне, а внешний интерфейс создает соответствующий платеж, используя...