Accueil

Référence développeur · PrestaShop

Websource Avoirs pour PrestaShop — référence développeur

Hooks, option de paiement, contrôleurs, services, tables et réglages du module Websource Avoirs.

Version 1.1.1 · PrestaShop 1.7.7 à 9.x, PHP 7.1+ · Mis à jour le 09/10/2026

Guide utilisateur

Cette extension existe aussi pour : WordPress

Hooks utilisés

HookRôle
paymentOptionsOption « Payer avec mon avoir » (client connecté, avoir utilisable sur le panier).
actionOrderStatusPostUpdateÉtat payé (paid = 1) : émission des avoirs des produits (CreditIssuer::issueForOrder) et rapprochement d'un règlement de solde. État « Annulé » : restitution de l'avoir utilisé, retrait des avoirs émis non dépensés, annulation du solde dû.
displayAdminOrderSideEncart « Solde à régler » de la commande.
displayAdminProductsExtra, actionProductUpdate, actionProductSaveRègle d'avoir dans la fiche produit (onglet « Modules »).
displayCustomerAccountLien « Mes avoirs (solde) » du compte client.
displayOrderDetailRappel du solde à régler dans le détail d'une commande.

Un incident dans le module ne bloque jamais un changement d'état : l'erreur est écrite dans les logs (gravité 3).

Contrôleurs

ContrôleurRôle
front walletPage « Mes avoirs » : index.php?fc=module&module=websourcecredit&controller=wallet.
front validationValidation de la commande payée par avoir.
front payPage du lien de paiement : …&controller=pay&token=<jeton>. Le client doit être connecté avec le compte de la commande.
admin AdminWebsourceCreditPage Clients > Avoirs, onglets tab=wallets, customer (id_customer), rules, dues, movements.
admin AdminWebsourceCreditAjaxActions de l'encart de commande.

Actions de l'encart de commande

POST ajax=1 sur AdminWebsourceCreditAjax, paramètres wsc_do et id_order :

wsc_doParamètresRéponse JSON
copy_link—{"success": true, "url": "…", "message": "Lien créé. Il est valable jusqu'au … et ne sert qu'une fois."}
send_link—Idem, avec « E-mail envoyé à … » ou « Le lien est créé mais l'e-mail n'a pas pu partir… ».
mark_paidmethod, reference{"success": true, "message": "Solde marqué comme payé. La commande passe en « Paiement accepté »."}

Erreur : {"success": false, "message": "…"}.

Formulaires de la page Avoirs

POST wsc_form=1 + wsc_do :

wsc_doChamps
save_ruleproduct, kind (fixed, percent), amount, validity_days, usable_on (any, product), enabled
toggle_ruleid_product, active
delete_ruleid_product
adjustcustomer, direction (credit, debit), amount, currency, validity_days, reason

Services

Websource\Credit\Service\Services (fabrique statique) :

use Websource\Credit\Service\Services;

$balances = Services::wallet()->balances($idCustomer, $idShop);   // soldes par devise, en centimes
$usable   = Services::wallet()->usable($idCustomer, $idShop, $productCaps, $idCurrency);
$count    = Services::issuer()->issueForOrder($order);            // idempotent
$link     = Services::payLinks();                                 // création et résolution des liens
ServiceRôle
wallet()WalletServicebalances, usable, grant, debit, manualDebit, rollback, restoreOrder, cancelIssued, expireOverdue.
issuer()CreditIssuerÉmission des avoirs d'une commande payée.
checkout()CreditCheckoutPaiement par avoir (débit atomique, verrou par panier).
payLinks()PayLinkServiceLiens de paiement (jeton aléatoire, empreinte stockée, expiration, usage unique, révocation du précédent).
settlement()SettlementService, cartBuilder()Règlement en ligne du solde par une commande de règlement (produit technique).
rules(), lots(), ledger(), dues(), links()Dépôts des tables.
mailer()MailSenderE-mails wscredit_paylink, wscredit_paid (fr, en).

Les montants sont stockés en centimes de la devise (Money\Cents). Un avoir reste dans sa devise d'émission ; il est converti au taux du jour lors de son utilisation (Money\Exchange).

Règles d'émission

  • Une règle par produit et par boutique.
  • Avoir fixe : par unité achetée, plafonné au prix payé pour la ligne. Avoir en pourcentage : sur le prix TTC de la ligne.
  • Une commande réglée avec un avoir, même en partie, n'émet pas d'avoir.
  • Émission idempotente : une fois par produit et par commande (origin_key).
  • Expiration appliquée à la lecture du solde, sans tâche planifiée. Les lots les plus proches de l'expiration sont consommés en premier (Wallet\LotAllocator).

Tables

Préfixe {prefix}websourcecredit_ :

TableColonnes principales
ruleid_rule, id_product, id_shop, kind, value, validity_days, usable_on, active, date_add, date_upd
lotid_lot, id_customer, id_shop, id_currency, id_rule, id_product, id_order, amount_initial, amount_remaining, origin_key, date_add, date_expire
ledgerid_entry, id_customer, id_shop, id_lot, type (credit, debit, manual_plus, …), amount, id_currency, used_amount, used_currency, rate, rounding, id_order, note, id_employee, date_add
dueSolde dû par commande et son statut (ouvert, payé, annulé).
paylinkLiens de paiement : commande, empreinte du jeton, montant, expiration, statut.

Les notes générées par le module sont des codes traduits à l'affichage (@product:…, @checkout:…) ; un motif saisi à la main est conservé tel quel.

Réglages

CléDéfautRôle
WSCREDIT_ALLOW_PARTIAL1Commande possible avec un solde à payer.
WSCREDIT_LINK_DAYS7Validité d'un lien (1 à 90 jours).
WSCREDIT_DEFAULT_VALIDITY365Validité proposée pour un avoir.
WSCREDIT_ONLINE_SETTLEMENT1Règlement du solde en ligne.
WSCREDIT_OFFLINE_TEXTvideInstructions hors ligne, par langue.
WSCREDIT_KEEP_DATA1Conservation des données à la désinstallation.
WSCREDIT_OS_PARTIAL—Identifiant de l'état « Paiement partiel – solde à régler » (non « logable »).
WSCREDIT_SETTLE_PRODUCT—Identifiant du produit technique de règlement.

Templates

views/templates/front/wallet.tpl, pay.tpl, views/templates/hook/payment_info.tpl, customer_account.tpl, order_detail.tpl, order_side.tpl, surchargeables dans themes/<theme>/modules/websourcecredit/…. Chaînes de la boutique : domaine Modules.Websourcecredit.Shop. Classes CSS : .wsc-card, .wsc-balance, .wsc-table, .wsc-lines, .wsc-sum.

Limites connues

  • Le règlement en ligne du solde crée une seconde commande (produit technique) : doublon à traiter dans les exports.
  • Un panier réparti en plusieurs commandes ne peut pas être payé par avoir.
  • Seule l'annulation rend l'avoir utilisé ; un remboursement ne reprend pas automatiquement les avoirs émis.
  • L'état « Paiement partiel – solde à régler » ne compte la vente dans les statistiques qu'au passage en « Paiement accepté » ; le stock est décompté dès la création de la commande.

Tests

php tests/run.php (logique pure), php tests/integration_ps.php (instance PrestaShop).