Informations sur la récurrence

  • Posts: 22
  • Thank you received: 3
  • Hikaserial Subscription Hikashop Business
6 days 55 minutes ago #365197

Bonjour,

Je suis en train de finaliser un plugin de paiements récurrents par prélèvements SEPA via la nouvelle version de l'API du fournisseur GoCardLess. Malgré l'exemple de celui de paypal_recurring et l'aide de Claude (IA ! ;) ), ce n'est pas un petit morceau !

Le plugin paypal affiche les informations sur la récurrence issues du produit lui même. Panier :

.

Cela correspond à la définition de la relation entre le produit et le plan de souscription :


Dans notre plugin, on n'affiche ce mode de paiement que si le panier ne contient qu'un seul produit et s'il a l'information "recurring". Donc ce n'est pas un problème mais je me demande comment on passe d'une information liée au produit (relation avec le plan) à une information liée à la commande ? En effet l'objet "order" disponible sur l'évènement onPaymentNotification contient ces informations de récurrences (cf. fichier objet_order) alors qu'il se pourrait que la commande contienne un autre produit non lié à un plan ? non récurrent. Quel est le raisonnement ? Cela n'est pas lié aux paramètres du plugin de paiement dont les valeurs de récurrences sont différentes (et stockées dans payment_params). J'uitilise cette info mais je ne comprends pas bien pourquoi elle est là. Normalement, je devrais aller la chercher dans le produit identifié dans l'objet "order", non ? Est-ce la bonne méthode ou bien faut-il systématiquement aller chercher l'info dans le produit ?

D'autre part, nous gérons des abonnements sans limite de durée et d'autres avec une limite. J'ai prévu ce champ dans les paramètres de plugin. Il est donc possible d'avoir plusieurs instances du plugin avec des paramètres différents pour couvrir ces différents cas. Néanmoins, il serait plus logique et confortable d'associer cette information au produit lui-même. Puisqu'on peut exprimer la durée de souscription lorsqu'on créé une association entre un produit et un plan, pourquoi n'est-il pas prévu un champ "nb d'instances" ? sans limite si vide. Dans l'objet "product" il semble y avoir une variable "terms" mais elle n'est pas initialisée.

Quelle est la bonne méthode pour avoir la possibilité d'acheter un abonnement sans limite (renouvellement auto sans limite dans le temps) ou un abonnement (autre produit) avec un abonnement limité à un nombre de paiements ? Lorsqu'on créé l'abonnement dans GoCardLess on a la possibilité de préciser le nb de paiements (ou pas). L'API permet donc d'avoir ce choix.

Merci pour votre éclairage.

Laurent

Attachments:
Last edit: 5 days 14 hours ago by Jerome.

Please Log in or Create an account to join the conversation.

  • Posts: 26171
  • Thank you received: 4030
  • MODERATOR
5 days 11 hours ago #365207

Bonjour,

Je vous invite à consulter la fonction "checkPaymentDisplay" de Paypal Recurring.
Vous y verrez comment accéder directement aux informations liées au recurring :

$recurring_time_value = 0;
$recurring_time_unit = false;
if(!empty($order->paymentOptions['recurring']) && !empty($order->paymentOptions['recurring']['duration'])) {
	$recurring_time_unit = substr($order->paymentOptions['recurring']['duration'], -1);
	if(!in_array($recurring_time_unit, array('d','w','m','y')))
		$recurring_time_unit = false;

	$recurring_time_value = (int)$order->paymentOptions['recurring']['duration'];
}
C'est dans cette même fonction que le texte sur le recurring va être ajouté à la description.

Ainsi, via " $order->paymentOptions " vous avez tout le nécessaire sans avoir à regarder le contenu du panier.
Il y a également le champs "value" qui vous indique le prix du renouvellement dans le cas ou l'intégralité du panier n'est pas en recurrence.

Pour la partie confirmation de commande ; la récupération du "payment option recurring" va demander de regarder dans plusieurs endroits :
$recurring_data = false;
if(!empty($order->cart->paymentOptions['recurring']))
	$recurring_data = $order->cart->paymentOptions['recurring'];
else if(!empty($order->cart->order_payment_params->recurring))
	$recurring_data = $order->cart->order_payment_params->recurring;
else if(!empty($order->order_payment_params->recurring))
	$recurring_data = $order->order_payment_params->recurring;
Pour la suite, c'est le même principe (les mêmes données).

La partie importante avec un plugin de recurring est la gestion du renouvellement qui va demander la création d'une nouvelle commande :
$orderClass = hikashop_get('class.order');
$order_id = $orderClass->createRecurringSuborder($original_order_id);
Et c'est cette fonction dans le core d'HikaShop qui va s'occuper de ne mettre que les produits recurring dans la nouvelle commande ; il n'y a pas besoin pour le plugin de gérer les produits ; tout à déjà été implémenté.

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

Please Log in or Create an account to join the conversation.

  • Posts: 22
  • Thank you received: 3
  • Hikaserial Subscription Hikashop Business
5 days 11 hours ago #365211

Merci pour ces éléments.
Globalement, on suit ces spécifications :
- features = true
- Vérification de $order->paymentOptions
- Implémentation de createRecurringSuborder()

Mais j'ai toujours des interrogations sur la durée de l'abonnement.
Dans les options de récurrence, l'objet $order contient :
= array(
'duration' => "1m", // période de base
'value' => null, // montant optionnel
'term' => '12m' // durée totale
)

1. Où et comment configurer le paramètre 'term' dans l'interface administrateur ? duration est fourni par l'assocation produit-plan où on définit la durée de base mais pas la durée totale ('term'). Je ne vois pas d'option dans la définition du plan non plus.

2. Si ce paramètre est bien transmis au système de paiement, devons-nous utiliser cette valeur pour limiter la durée totale de l'abonnement côté système de paiement (dans notre cas, GoCardless) ? Sera-t-il exprimé en nombre de "terms" (number of installments) ou est-ce une durée globale (duration: 1m, terms: 24m) ou encore une date calculée (fin de l'abonnement) ?

Merci d'avance pour ces précisions.

Laurent

Please Log in or Create an account to join the conversation.

  • Posts: 26171
  • Thank you received: 4030
  • MODERATOR
4 days 12 hours ago #365218

Bonjour,

Il n'y a aucun paramètre "term" dans HikaSerial (ou HikaShop) ; je ne sais pas d'où vient cette donnée.
HikaSerial ne gère aucunement les souscriptions à terme car ce monde n'est pas compatible avec les APIs génériques de souscription.

Je suis navré mais je ne peux pas vous aider.

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

Please Log in or Create an account to join the conversation.

  • Posts: 22
  • Thank you received: 3
  • Hikaserial Subscription Hikashop Business
18 hours 53 minutes ago #365252

Bonjour,

Le nombre de prélèvements/paiements est bien prévu dans les api de Paypal et GoCardless. Dommage qu'on ne puisse gérer cela depuis l'association produit/plan. J'ai contourné en ajoutant un champ "custom" dans les produits pour stocker cette information.

J'ai une autre question concernant les constantes de langues utilisées dans les paramètres du plugin en backend. Certaines sont spécifiques à ce plugin. D'après l'exemple du plugin Paypal, on ne peut pas utiliser un fichier de langue dédié dans le corps du plugin lui-même ? Il faut ajouter nos constantes au fichier language/en-GB/en-GB.com_hikaserial.ini (pour l'anglais) lors de l'installation du script. C'est bien cela ?

Merci

Laurent

Please Log in or Create an account to join the conversation.

  • Posts: 26171
  • Thank you received: 4030
  • MODERATOR
8 hours 17 minutes ago #365256

Bonjour,

Les plugins de paiement sont des plugins Joomla ; vous pouvez tout à fait intégrer un fichier de langue.
Les plugins livrés avec HikaShop ou HikaSerial vont utiliser les traductions des composants pour des raisons de simplicité ; mais une grande quantité de plugins dans le marketplace vont avoir leur propre fichier de langue en respectant la façon de faire de Joomla.

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

Please Log in or Create an account to join the conversation.

Moderators: Obsidev
Time to create page: 0.081 seconds
Powered by Kunena Forum