Erreur lors de la création de demande de paiement

Bonjour,

J’ai un problème pour enregistrer les paiements. Lors de la cration d’une demande de paiement (soit manuellement depuis “app/payment-request” ou via une commande sur le site) la page de paiement affiche toujours :

Ce lien n’est pas valide ou n’a pas encore été activé.

J’ai essayé d’activer plusieurs mode de paiement et passerelles de paiement sur les paramètres e-commerce sans que cela ne change quoi que ce soit.

Je ne vois rien dans le journal d’erreurs.

Qu’est ce qui pourrait causer ce problème ?

Merci

Bonjour Pierrick,

Ce message apparaît quand aucun mode de paiement n’est actif.
Pour Dokos, un mode de paiement est actif pour le paiement en ligne, quand:

  • Il est bien activĂ©:

  • La passerelle de paiement associĂ©e Ă  la sociĂ©tĂ© de facturation (ici associĂ©e Ă  la sociĂ©tĂ© Mappemonde) est bien activĂ©e/n’est pas dĂ©sactivĂ©e

Peux-tu vérifier si tu as bien cette configuration s’il te plait ?

Merci !


Je n’avait pas rempli le champ “Passerelle de paiement” qui était vide, ça fonctionne à présent.

Merci

1 « J'aime »

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.
    image

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

Bonjour Pierrick,

Apparemment lors du premier appel à l’API Stripestripe_payment_intent_object.latest_charge.balance_transaction n’est pas encore disponible et semble l’être plus tard quand tu relance l’intégration manuellement.

Peux-tu ouvrir un ticket sur le répertoire Gitlab de l’application de paiement et on va regarder rapidement si les modalités d’appel on changé côté Stripe.

Merci,

Charles-Henri