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