Retours de Paiement

Retours de Paiement 1.0.0

Vous n'avez pas l'autorisation de télécharger
Compatibilité XF
  1. 2.3.x
Description courte
This add-on provides advanced refund capabilities for XenForo, including admin-initiated refunds and smart partial refund handling. It integrates seamlessly with Stripe and PayPal, offering a robust framework for payment providers and add-ons to manage refunds efficiently. Users can initiate refunds directly from the admin panel or via purchase logs, ensuring smooth user upgrades and seamless transaction management.
Admin navigate à Logs → Paiement du fournisseur →[specific=payment entry]Cliquez "Retourner le Frais" (visible uniquement pour les fournisseurs supportant les remboursements)
Entrez le montant du remboursement (pré-rempli avec le solde restant rembourrasable)
Pour les améliorations de l'utilisateur : option de rétablir la transaction (désengager l'utilisateur)
Pour d'autres types de produits achetables : le remboursement est traité par le fournisseur et le gestionnaire d'ajout-on gère la réversibilité via l'événement payment_refund_complete
L'add-on appelle l'API de remboursement du fournisseur, enregistre les résultats et suit le montant total remboursé

Initiate a payment from the provider logs:
334027-a28eb784f22f6b7021af1809151d0d5b.webp

Si la commande a été effectuée pour une Augmentation de Utilisateur gérée par XenForo, vous pouvez spécifier le montant du remboursement et l'action désirée pour l'augmentation.
334028-589e1953b887adec70754183603a5709.webp

Si la commande a été effectuée dans un autre complément, vous serez invité à déclencher uniquement un remboursement :
334029-29c99ba2dc43409f955e75661e8e314f.webp

Comment ça fonctionne (ce point-là-vien est principalement pour la documentation des développeurs qui veulent étendre les capacités de remboursement à leurs fournisseurs de paiement ou aux compléments)
Le complément s'insère :
Sur les fournisseurs de paiement Stripe et PayPal REST — Ajoute les méthodes supportsRefunds() et refund() pour les appels API, et surcharge getPaymentResult() pour détecter les remboursements partiels par rapport à ceux complets dans les webhooks entrants.
AbstractProvider — Ajoute une méthode safe default supportsRefunds() retournant false pour que les fournisseurs anciens ne crashent pas.
LogController — Injecte un bouton "Émettre un Remboursement" sur les vues détails des enregistrements de paiement et ajoute une action de formulaire de remboursement.
PaymentRepository — Ajoute des méthodes helper pour le suivi cumulatif des remboursesments et la déduplication.
Extensibilité
Les fournisseurs de paiement tierces peuvent ajouter le support de remboursement en implémentant les méthodes supportsRefunds() et refund() directement dans leur classe de fournisseur — aucune dépendance avec ce complément n'est requise.
Les compléments tiers achetable peuvent écouter l'événement payment_refund_complete pour gérer des actions liées au remboursement (par exemple, annuler l'accès à un cours).
Comment ajoutez-vous le support de remboursement à votre fournisseur de paiement?
Étape 1 : Ajoutez supportsRefunds() à votre fournisseur
Dans la classe de votre fournisseur (qui étend XF\Payment\AbstractProvider), ajoutez :
PHP:
public function supportsRefunds(): bool
{
    return true;
}
Étape 2 : Implémenter la méthode remboursement ()
Ajoutez la méthode remboursement () avec cette signature exacte :
PHP:
public function refund(
    \XF\Entity\PaymentProfile $paymentProfile,
    \XF\Entity\PurchaseRequest $purchaseRequest,
    string $transactionId,
    ?float $amount = null,
    string $currency = 'USD'
): array
{
    // $paymentProfile - contains your API credentials in $paymentProfile->options
    // $purchaseRequest - the original purchase (has cost_amount, cost_currency, provider_metadata)
    // $transactionId - the transaction ID from the payment log entry being refunded
    // $amount - refund amount (null means full refund)
    // $currency - currency code
    // Call your provider's refund API here...
    // On success, return:
    return [
        'success' => true,
        'provider_refund_id' => 'your_provider_refund_id',
    ];
    // On failure, return:
    return [
        'success' => false,
        'error' => 'Human-readable error message',
    ];
}
Retirer le Réféssé
PHP:
public static function onPaymentRefundComplete(
    \XF\Entity\PaymentProviderLog &$logEntry,
    \XF\Entity\PurchaseRequest &$purchaseRequest,
    float $amount,
    string $currency,
    bool $purchaseReversed,
    array $providerResult
): void
{
    // Check if this refund is for your purchasable type
    if ($purchaseRequest->purchasable_type_id !== 'your_purchasable_type')
    {
        return;
    }
    // Handle the refund (e.g., revoke access, send notification)
}
Vous devrez également enregistrer ce récepteur dans votre fichier _data/code_event_listeners.xml de votre add-on :
XML:
<listeners>
    <listener event_id="payment_refund_complete"
              execute_order="10"
              callback_class="Your\AddOn\Listener"
              callback_method="onPaymentRefundComplete"
              active="1" />
</listeners>
Instructions critiques

Notes importantes:
- Ne pas utiliser ou nécessiter les classes du espace de noms Jack\PaymentRefund.
- Votre fournisseur devrait avoir zéro références à l'add-on remboursement.

Résolution de l'ID de transaction: Le paramètre $transactionId provient du champ transaction_id dans l'enregistrement xf_payment_provider_log que l'admin est en train de rembourser. Selon la façon dont votre fournisseur enregistre les paiements, ce peut ou non être l'ID que vous avez besoin pour votre API de remboursement. Si ce n'est pas le cas, recherchez l'ID correct dans log_details ou provider_metadata de la demande d'achat. Voir le méthode resolveChargeId() de l'extension Stripe pour un exemple.

Gestion des devises: Le paramètre $amount est toujours une valeur décimale (par exemple, 10.00). Si votre API fournisseur attend les montants dans la unité de devise la plus petite (comme les centimes), convertissez-le dans votre méthode refund().

Remboursements partiel : L'addon remboursement gère automatiquement le suivi cumulatif. Votre méthode refund() doit simplement traiter ce qui lui est donné. L'addon garantit que $amount ne dépasse jamais la balance restante réellement rembourrasseable.

Déduplication des webhook : Quand un admin émet un remboursement, le webhook suivant du fournisseur (par exemple, le charge.refunded de Stripe) est détecté comme une duplication et enregistré comme informatif — empêchant les doubles annulations.
Auteur
axtona
Vues
118
Type d’extension
zip
Taille du fichier
22.2 Ko
Première publication
Dernière mise à jour
Évaluations 0.00 étoile(s) 0 évaluations
Lien cassé ? Envoyer un message à l’équipe NP et nous vous aiderons rapidement !
Soutenez le développeur Si vous êtes satisfait du test ou que votre projet vous a rapporté de l’argent, cliquez sur le bouton « Plus d’informations » pour soutenir le développeur en achetant.

Plus de ressources de axtona

 Blogs A
Blogs 1.7.4
Donnez à vos utilisateurs une façon de s'exprimer davantage dans leur propre espace personnel!
OSDonate Pro / OS Donate Pro A
OSDonate permet de montrer un bouton de don PayPal sur votre site Joomla.
[MC] Infinite Scroll A
This add-on allows infinite scrolling for threads and posts.
Haut