Je me heurte maintenant à un autre problème.
- Je fait une reservation
- je vais sur le panier, j’effectue le paiement et là la plateforme de paiement apparait bien.
- J’effectue le paiement (en mode sandbox sur Stripe)
- Le paiement se fait avec succès, j’arrive sur la page de paiement validé
- Après ça la commande reste en attente de paiement alors que sur Stripe elle apparait bien.

Dans les demandes d’intégration je vois que le service “payment_intent” “created” est terminé mais le “succeeded” est en Echec avec le message d’erreur suivant:
Traceback (most recent call last):
File "apps/payments/payments/payment_gateways/doctype/stripe_settings/webhook_events/stripe.py", line 48, in handle_webhook
response = reference_document.run_method(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "apps/frappe/frappe/model/document.py", line 1019, in run_method
out = Document.hook(fn)(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "apps/frappe/frappe/model/document.py", line 1412, in composer
return composed(self, method, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "apps/frappe/frappe/model/document.py", line 1394, in runner
add_to_return_value(self, fn(self, *args, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^
File "apps/frappe/frappe/model/document.py", line 1016, in fn
return method_object(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py", line 585, in on_payment_authorized
self.run_method("set_as_paid", reference_no)
File "apps/frappe/frappe/model/document.py", line 1019, in run_method
out = Document.hook(fn)(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "apps/frappe/frappe/model/document.py", line 1412, in composer
return composed(self, method, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "apps/frappe/frappe/model/document.py", line 1394, in runner
add_to_return_value(self, fn(self, *args, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^
File "apps/frappe/frappe/model/document.py", line 1016, in fn
return method_object(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "apps/frappe/frappe/utils/typing_validations.py", line 30, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py", line 347, in set_as_paid
payment_entry = self.create_payment_entry(reference_no=reference_no)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py", line 438, in create_payment_entry
self.get_payment_gateway_fees(reference_no)
File "apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py", line 502, in get_payment_gateway_fees
transaction_fees = controller.get_transaction_fees(reference_no)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "apps/payments/payments/payment_gateways/doctype/stripe_settings/stripe_settings.py", line 413, in get_transaction_fees
fee_amount=flt(stripe_payment_intent_object.latest_charge.balance_transaction.fee) / 100.0,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'fee'
Voilà les données de la requete:
{
"id": "evt_3S11SKIzT1fQC7ZX1MkTVsmx",
"object": "event",
"api_version": "2025-07-30.basil",
"created": 1756370717,
"data": {
"object": {
"id": "pi_3S11SKIzT1fQC7ZX1pM5nwLq",
"object": "payment_intent",
"amount": 50,
"amount_capturable": 0,
"amount_details": {
"tip": {}
},
"amount_received": 50,
"application": null,
"application_fee_amount": null,
"automatic_payment_methods": null,
"canceled_at": null,
"cancellation_reason": null,
"capture_method": "automatic_async",
"client_secret": "pi_3S11SKIzT1fQC7ZX1pM5nwLq_secret_CW2cqemwOWjgzGZBeHPnoniPX",
"confirmation_method": "automatic",
"created": 1756370716,
"currency": "eur",
"customer": null,
"description": null,
"excluded_payment_method_types": null,
"last_payment_error": null,
"latest_charge": "ch_3S11SKIzT1fQC7ZX1yBecmp0",
"livemode": false,
"metadata": {
"reference_name": "ACC-PRQ-2025-08-28-00007",
"reference_doctype": "Payment Request"
},
"next_action": null,
"on_behalf_of": null,
"payment_method": "pm_1S11SJIzT1fQC7ZX9848n1Sv",
"payment_method_configuration_details": null,
"payment_method_options": {
"card": {
"installments": null,
"mandate_options": null,
"network": null,
"request_three_d_secure": "automatic"
}
},
"payment_method_types": [
"card"
],
"processing": null,
"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
}
},
"livemode": false,
"pending_webhooks": 4,
"request": {
"id": null,
"idempotency_key": "98a6d023-e2bb-4d62-9286-984f2595bd78"
},
"type": "payment_intent.succeeded"
}
Si je fait “Réessayer de traiter le webhook” la demande d’intégration se passe correctement et la facture est créé comme il faut.
Qu’est ce qui pourrait causer ce message d’erreur ?
Merci