#stripe-payments
#stripe-платежи
Вопрос:
Пользователи моего сайта будут покупать кредиты, используя единый платежный процесс Stripe с сеансом оформления заказа. Они могут покупать отдельные кредиты или пакеты кредитов, например, пакет 10 кредитов по сниженной цене. После успешной оплаты я хочу захватить событие с помощью webhook и обновить баланс пользователя в соответствии с продуктом и количеством, оплаченным пользователем.
В настоящее время я отслеживаю payment_intent.succeeded
события и вижу информацию об оплате и оплате, однако я не могу найти никакой информации, связанной с заказанным продуктом. Что я упускаю? Спасибо.
Это пример события намерения платежа, которое я фиксирую:
{
"amount": 5250,
"amount_capturable": 0,
"amount_received": 5250,
"application": null,
"application_fee_amount": null,
"canceled_at": null,
"cancellation_reason": null,
"capture_method": "automatic",
"charges": {
"data": [
{
"amount": 5250,
"amount_captured": 5250,
"amount_refunded": 0,
"application": null,
"application_fee": null,
"application_fee_amount": null,
"balance_transaction": "txn_1HUSonCfZ37XLQD8mLERR2YR",
"billing_details": {
"address": {
"city": null,
"country": "JP",
"line1": null,
"line2": null,
"postal_code": null,
"state": null
},
"email": "xxxx.xxxx.xxxx@gmail.com",
"name": "asd",
"phone": null
},
"calculated_statement_descriptor": "XXX XXXX",
"captured": true,
"created": 1600847712,
"currency": "jpy",
"customer": "cus_I4c27DIUQuvAHQ",
"description": null,
"destination": null,
"dispute": null,
"disputed": false,
"failure_code": null,
"failure_message": null,
"fraud_details": {},
"id": "ch_1HUSomCfZ37XLQD8d133buOK",
"invoice": null,
"livemode": false,
"metadata": {},
"object": "charge",
"on_behalf_of": null,
"order": null,
"outcome": {
"network_status": "approved_by_network",
"reason": null,
"risk_level": "normal",
"risk_score": 39,
"seller_message": "Payment complete.",
"type": "authorized"
},
"paid": true,
"payment_intent": "pi_1HUSoWCfZ37XLQD82vnE1yQT",
"payment_method": "pm_1HUSolCfZ37XLQD8gSn0oy4x",
"payment_method_details": {
"card": {
"brand": "visa",
"checks": {
"address_line1_check": null,
"address_postal_code_check": null,
"cvc_check": "pass"
},
"country": "US",
"exp_month": 11,
"exp_year": 2050,
"fingerprint": "uaJa23vzDgA7fnSC",
"funding": "credit",
"installments": null,
"last4": "4242",
"network": "visa",
"three_d_secure": null,
"wallet": null
},
"type": "card"
},
"receipt_email": null,
"receipt_number": null,
"receipt_url": "https://pay.stripe.com/receipts/acct_1HU77uCfZ37XLQD8/ch_1HUSomCfZ37XLQD8d133buOK/rcpt_I4c233eGeSYOaN9cPvncC4AcU2Sm4s7",
"refunded": false,
"refunds": {},
"review": null,
"shipping": null,
"source": null,
"source_transfer": null,
"statement_descriptor": null,
"statement_descriptor_suffix": null,
"status": "succeeded",
"transfer_data": null,
"transfer_group": null
}
],
"has_more": false,
"object": "list",
"total_count": 1,
"url": "/v1/charges?payment_intent=pi_1HUSoWCfZ37XLQD82vnE1yQT"
},
"client_secret": "pi_1HUSoWCfZ37XLQD82vnE1yQT_secret_XXX",
"confirmation_method": "automatic",
"created": 1600847696,
"currency": "jpy",
"customer": "cus_I4c27DIUQuvAHQ",
"description": null,
"id": "pi_1HUSoWCfZ37XLQD82vnE1yQT",
"invoice": null,
"last_payment_error": null,
"livemode": false,
"metadata": {},
"next_action": null,
"object": "payment_intent",
"on_behalf_of": null,
"payment_method": "pm_1HUSolCfZ37XLQD8gSn0oy4x",
"payment_method_options": {
"card": {
"installments": null,
"network": null,
"request_three_d_secure": "automatic"
}
},
"payment_method_types": [
"card"
],
"receipt_email": null,
"review": null,
"setup_future_usage": null,
"shipping": null,
"source": null,
"statement_descriptor": null,
"statement_descriptor_suffix": null,
"status": "succeeded",
"transfer_data": null,
"transfer_group": null
}
Комментарии:
1. оплата происходит на вашем веб-сайте или на предварительно настроенных страницах, которые предлагает stripe?
2. @Berto99 Я использую сеанс оформления заказа stripe
Ответ №1:
Предполагая, что вы поместили сведения о продукте в line_items
созданный вами сеанс оформления заказа (см. Шаг руководства), тогда вам нужно узнать, как «выполнить заказ» (см. Шаг руководства), что вы можете сделать, прослушивая checkout.session.completed
события.
Когда вы получаете событие, событие data
будет сеансом проверки по идентификатору, и затем вы можете получить этот сеанс и указать expand[]=line_items
, чтобы иметь возможность проверять line_items
для сеанса.
Обновление: я изменил приведенное выше, чтобы отразить то, что line_items
не включено по умолчанию. Вы должны получить сеанс и включить его в расширение.
Комментарии:
1. Я передаю
price_id
line_items
ссылку на продукт и цену. Ни одно из них не включено вdata
изcheckout.session.completed
payment_intent.succeeded
событий или2. Простите,
line_items
они не прикреплены по умолчанию, их необходимо запрашивать во время извлечения сexpand
помощью (чтобы их не было в данных события). Я обновил свой ответ выше.