Passerelle de paiement Stripe

Bonjour,

J’ai paramétré Stripe comme passerelle de paiement dans Dokos. Cela fonctionne bien mais même si le paiement est réussie, le statut de la commande reste à « à livrer et facturer » et on a le bouton « à payer » qui reste (J’ai également paramétré le Webhook). Il est alors possible de payer à nouveau.

Comment faire pour que le bouton « A payer » n’apparaisse plus et que la facture soit générée automatiquement ?

Une demande de paiement a bien été créée mais est en statut « en attente » :

J’ai 2 demandes d’intégrations qui ont été créées :

  • Une « created » en statut « Terminé »
  • Une « succeeded » qui reste en statut « en file d’attente » (pourquoi ?)

Pourriez-vous m’expliquer comment faire pour finir d’automatiser le paiement ?

Je vous remercie.

Bonjour Yann,

La cause du problème est certainement la Demande d’Intégration qui est toujours en attente. Avez-vous consulté le Journal des Erreurs pour vérifier qu’il n’y a aucune erreur en lien avec le webhook ou les paramètres Stripe ?


La facture est générée automatiquement dès le paiement (quand la Demande d’Intégration est réussie) et marquée comme payée, ensuite il faut manuellement créer un Bon de Livraison si je ne me trompe pas.

D’ailleurs, le paiement est indiqué comme réussi sur le portail client juste après avoir validé les informations de carte bancaire car le paiement a effectivement fonctionné (et l’argent sera transféré par Stripe), mais la prise en compte de celui-ci dans Dokos n’a pas abouti.

Il est étrange que la Demande d’Intégration soit restée « En attente », elle devrait pourtant rapidement passer dans un autre état (échec, réussite, …). Si vous êtes en auto-hébergement, il s’agit peut-être d’un problème avec les workers.

Bonjour,
Je n’ai de messages d’erreur dans le journal des erreurs.
J’ai fait un test sur notre environnement de production et j’ai le même comportement (Stripe en mode test)
Par contre je n’ai pas de demande d’intégration “Created”, mais j’ai toujours la demande d’intégration “Succeeded” en statut “file d’attente”.
Sur Stripe, le webhook “Succeeded” est en succès (pas de Created non plus)
Pourriez-vous m’en dire plus sur les workers ?
Comment retrouver la tâche qui s’occupe des demandes d’intégration ?
Je vous remercie.

Bonjour Yann,

Les workers sont des processus python qui permettent d’effectuer les tâches d’arrière plan.
Pour voir si le “planificateur” est actif, il est possible d’aller à la page /app/background_jobs ou bien directement sur le serveur de lancer bench doctor dans votre dossier bench.

Si le planificateur est inactif, il faut le lancer avec bench enable-scheduler

Pouvez-vous me donner les versions de Dodock/Dokos/Payments que vous utilisez ?

Il y a également un bouton “Actions > Réessayer de traiter le webhook” qui permet de relancer les webhooks en statut différent de Terminé:

Si ça fonctionne via ce bouton, c’est très probablement un problème de workers, sinon c’est autre chose, mais il devrait y avoir une erreur dans la demande d’intégrations.

Bonne soirée

Bonjour,
En mettant à jour Dokos et en redémarrant les services cela semble mieux fonctionner.
Par contre, j’ai maintenant un message d’erreur qui me bloque dans la demande d’intégration (qui est en statut erreur) pour le cas “payment_intent.succeeded”:
Veuillez configurer un journal comptable pour ce type de transaction et ce compte : Écriture de paiement - 411 - Clients - LG
J’ai cherché mais je n’arrive pas à voir où paramétrer cela. Pourriez-vous m’aider svp ?
Merci.

Yann

Bonjour Yann,

Je me permets de vous mettre un lien vers une autre conversation sur ce sujet:

Bonne journée

Bonjour,
Oui j’avais vu cette conversation. J’ai bien désactivé le paramètre et cela fonctionne bien. Mais cela ne dit pas comment paramétrer les journaux. Je n’ai pas trouvé dans les paramètres :sweat_smile:

Yann

Bonjour @Yann,

Voici le lien vers la documentation concernant les journaux comptables:

Bonne journée !

Bonsoir,
Pour continuer sur mon problème d’origine de passerelle Stripe, j’arrive maintenant à générer automatiquement la facture de vente mais j’ai un problème avec la création de demande de paiement en automatique. J’ai déjà payé une 1ère fois mais le paiement ne se fait pas automatiquement les fois d’après.
Dans le journal d’erreurs, j’ai l’erreur ci-dessous.
Est-ce que ça vous dit quelque chose ?
Je suis obligé de payer sur le portail à chaque échéance.
Je vous remercie

Erreur de mise à jour d’abonnement pour l’abonnement ACC-SUB-2023-00002

Traceback with variables (most recent call last):
File “apps/erpnext/erpnext/accounts/doctype/subscription/subscription.py”, line 107, in process_active_subscription
SubscriptionPaymentRequestGenerator(self, invoice.name).make_payment_request()
self = <Subscription: ACC-SUB-2023-00002>
invoice = <SalesInvoice: ACC-SINV-2023-00017 docstatus=1>
File “apps/erpnext/erpnext/accounts/doctype/subscription/subscription_transaction.py”, line 394, in make_payment_request
payment_request = self.create_payment_request(submit=True)
self = <erpnext.accounts.doctype.subscription.subscription_transaction.SubscriptionPaymentRequestGenerator object at 0x7fb9f9216bc0>
File “apps/erpnext/erpnext/accounts/doctype/subscription/subscription_transaction.py”, line 477, in create_payment_request
pr.insert(ignore_permissions=True)
self = <erpnext.accounts.doctype.subscription.subscription_transaction.SubscriptionPaymentRequestGenerator object at 0x7fb9f9216bc0>
submit = True
get_payment_gateway_account = <function get_payment_gateway_account at 0x7fb9f7d7fbe0>
make_payment_request = <function make_payment_request at 0x7fb9f7d7f9a0>
link_dt = ‘Sales Invoice’
link_dn = ‘ACC-SINV-2023-00017’
pr = <PaymentRequest: ACC-PRQ-2023-03-14-00001>
File “apps/frappe/frappe/model/document.py”, line 265, in insert
self.run_before_save_methods()
self = <PaymentRequest: ACC-PRQ-2023-03-14-00001>
ignore_permissions = True
ignore_links = None
ignore_if_duplicate = False
ignore_mandatory = None
set_name = None
set_child_names = True
File “apps/frappe/frappe/model/document.py”, line 1100, in run_before_save_methods
self.run_method(“validate”)
self = <PaymentRequest: ACC-PRQ-2023-03-14-00001>
File “apps/frappe/frappe/model/document.py”, line 966, in run_method
out = Document.hook(fn)(self, *args, **kwargs)
self = <PaymentRequest: ACC-PRQ-2023-03-14-00001>
args = ()
kwargs = {}
fn = <function Document.run_method..fn at 0x7fb9f86f7d00>
method = ‘validate’
File “apps/frappe/frappe/model/document.py”, line 1331, in composer
return composed(self, method, args, **kwargs)
self = <PaymentRequest: ACC-PRQ-2023-03-14-00001>
args = ()
kwargs = {}
hooks = [<function apply at 0x7fba12f7b010>]
method = ‘validate’
doc_events = {'
': {‘after_insert’: [‘frappe.event_streaming.doctype.event_update_log.event_update_log.notify_consumers’, ‘erpnext.venue.doctype.booking_credit_rule.booking_credit_rule.trigger_credit_rules’], ‘on_update’: [‘frappe.desk.notifications.clear_doctype_notifications’, ‘frappe.core.doctype.activity_log.feed.update_feed’, ‘frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions’, ‘frappe.automation.doctype.assignment_rule.assignment_rule.apply’, ‘frappe.core.doctype.file.utils.attach_files_to_document’, ‘frappe.event_streaming.doctype.event_update_log.event_update_log.notify_consumers’, ‘frappe.automation.doctype.assignment_rule.assignment_rule.update_due_date’, ‘frappe.core.doctype.user_type.user_type.apply_permissions_for_non_standard_user_type’], ‘after_rename’: [‘frappe.desk.notifications.clear_doctype_notifications’], ‘on_cancel’: [‘frappe.desk.notifications.clear_doctype_notifications’, 'frappe.workflow.doctype.workflow_action.workflow_action.process_workflow…
handler = ‘erpnext.support.doctype.service_level_agreement.service_level_agreement.apply’
composed = <function Document.hook..compose..runner at 0x7fb9f7bc4ca0>
compose = <function Document.hook..compose at 0x7fb9f7bc43a0>
f = <function Document.run_method..fn at 0x7fb9f86f7d00>
File “apps/frappe/frappe/model/document.py”, line 1313, in runner
add_to_return_value(self, fn(self, *args, **kwargs))
self = <PaymentRequest: ACC-PRQ-2023-03-14-00001>
method = ‘validate’
args = ()
kwargs = {}
add_to_return_value = <function Document.hook..add_to_return_value at 0x7fb9f7bc4af0>
fn = <function Document.run_method..fn at 0x7fb9f86f7d00>
hooks = (<function apply at 0x7fba12f7b010>,)
File “apps/frappe/frappe/model/document.py”, line 963, in fn
return method_object(*args, **kwargs)
self = <PaymentRequest: ACC-PRQ-2023-03-14-00001>
args = ()
kwargs = {}
method_object = <bound method PaymentRequest.validate of <PaymentRequest: ACC-PRQ-2023-03-14-00001>>
method = ‘validate’
File “apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py”, line 60, in validate
self.set_message_from_template()
self = <PaymentRequest: ACC-PRQ-2023-03-14-00001>
File “apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py”, line 544, in set_message_from_template
data = frappe._dict(get_message(self, self.email_template))
self = <PaymentRequest: ACC-PRQ-2023-03-14-00001>
File “apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py”, line 779, in get_message
else check_if_immediate_payment_is_autorized(doc.get(“name”)),
doc = {‘name’: ‘ACC-PRQ-2023-03-14-00001’, ‘owner’: ‘Administrator’, ‘creation’: ‘2023-03-14 20:08:35.866128’, ‘modified’: ‘2023-03-14 20:08:35.866128’, ‘modified_by’: ‘Administrator’, ‘docstatus’: 0, ‘idx’: 0, ‘status’: ‘Draft’, ‘transaction_date’: ‘2023-03-14’, ‘payment_key’: ‘3ec373daa7e060c59547ac3b180d29b42d81edf9b3f8710e88bcf965’, ‘no_payment_link’: 0, ‘naming_series’: ‘ACC-PRQ-.YYYY.-.MM.-.DD.-’, ‘reference_doctype’: ‘Sales Invoice’, ‘reference_name’: ‘ACC-SINV-2023-00017’, ‘subscription’: ‘ACC-SUB-2023-00002’, ‘grand_total’: 4.0, ‘base_amount’: 0.0, ‘exchange_rate’: 1.0, ‘fee_amount’: 0.0, ‘currency’: ‘EUR’, ‘payment_gateways_template’: ‘Stripe Abonnement’, ‘payment_gateway’: ‘Stripe-lagaloche4’, ‘transaction_reference’: None, ‘payment_gateway_account’: ‘Stripe-lagaloche4 - EUR’, ‘cost_center’: None, ‘project’: None, ‘subject’: ‘Demande de paiement pour ACC-SINV-2023-00017’, ‘mute_email’: 0, ‘email_to’: ‘burloty@gmail.com’, ‘print_format’: ‘Sales Invoice’, ‘make_sales_invoice’: 0, 'e…
template = ‘Notification de facture’
payment_can_be_processed_immediately = None
File “apps/erpnext/erpnext/accounts/doctype/payment_request/payment_request.py”, line 797, in check_if_immediate_payment_is_autorized
return frappe.get_doc(
payment_request = ‘ACC-PRQ-2023-03-14-00001’
File “apps/frappe/frappe/init.py”, line 1173, in get_doc
doc = frappe.model.document.get_doc(*args, **kwargs)
args = (‘Payment Request’, ‘ACC-PRQ-2023-03-14-00001’)
kwargs = {}
frappe = <module ‘frappe’ from ‘apps/frappe/frappe/init.py’>
File “apps/frappe/frappe/model/document.py”, line 75, in get_doc
return controller(*args, **kwargs)
args = (‘Payment Request’, ‘ACC-PRQ-2023-03-14-00001’)
kwargs = {}
doctype = ‘Payment Request’
controller = <class ‘erpnext.accounts.doctype.payment_request.payment_request.PaymentRequest’>
File “apps/frappe/frappe/model/document.py”, line 109, in init
self.load_from_db()
self = <PaymentRequest: ACC-PRQ-2023-03-14-00001>
args = (‘Payment Request’, ‘ACC-PRQ-2023-03-14-00001’)
kwargs = {}
class = <class ‘frappe.model.document.Document’>
File “apps/frappe/frappe/model/document.py”, line 153, in load_from_db
frappe.throw(
self = <PaymentRequest: ACC-PRQ-2023-03-14-00001>
d = None
class = <class ‘frappe.model.document.Document’>
File “apps/frappe/frappe/init.py”, line 515, in throw
msgprint(
msg = ‘Demande de paiement ACC-PRQ-2023-03-14-00001 introuvable’
exc = <class ‘frappe.exceptions.DoesNotExistError’>
title = None
is_minimizable = False
wide = False
as_list = False
File “apps/frappe/frappe/init.py”, line 483, in msgprint
_raise_exception()
title = None
as_table = False
as_list = False
indicator = ‘red’
alert = False
primary_action = None
is_minimizable = False
wide = False
sys = <module ‘sys’ (built-in)>
out = {‘message’: ‘Demande de paiement ACC-PRQ-2023-03-14-00001 introuvable’, ‘title’: ‘Message’, ‘indicator’: ‘red’, ‘raise_exception’: 1}
_strip_html_tags = <functools._lru_cache_wrapper object at 0x7fb9f7c6eae0>
_raise_exception = <function msgprint.._raise_exception at 0x7fb9f7bc4e50>
inspect = <module ‘inspect’ from ‘/usr/lib/python3.10/inspect.py’>
msg = ‘Demande de paiement ACC-PRQ-2023-03-14-00001 introuvable’
raise_exception = <class ‘frappe.exceptions.DoesNotExistError’>
strip_html_tags = <function strip_html_tags at 0x7fba1a4d4310>
File “apps/frappe/frappe/init.py”, line 430, in _raise_exception
raise raise_exception(msg)
inspect = <module ‘inspect’ from ‘/usr/lib/python3.10/inspect.py’>
msg = ‘Demande de paiement ACC-PRQ-2023-03-14-00001 introuvable’
raise_exception = <class ‘frappe.exceptions.DoesNotExistError’>
frappe.exceptions.DoesNotExistError: Demande de paiement ACC-PRQ-2023-03-14-00001 introuvable

Bonjour @Yann,

Merci d’avoir remonté ce problème.
Il y a effectivement un problème lors de la création des demandes de paiement.
Nous préparons un correctif qui sera publié aujourd’hui ou demain au plus tard.

Bonne journée