Bonjour,
j’utilise depuis peu dolibarr, v11.02. J’ai rencontré le problème suivant et je propose une solution :
Module adhérents, module paypal configuré correctement avec sécurité à 1 pour le cryptage.
lorsqu’on crée un adhérent, le hash de cryptage est créé avec le type (ou source) « membersubscription », alors que le hash est généré avec le type « member »,
dans le fichier /public/payment/newpayment.php le type est récupéré sous la variable en GET « source » :
$source = GETPOST("s", 'alpha')?GETPOST("s", 'alpha'):GETPOST("source", 'alpha');
Plus loin dans le code on crée le hash de vérification avec cette variable :
if ($source && $REF) $token = dol_hash($conf->global->PAYMENT_SECURITY_TOKEN.$source.$REF, 2);
le problème c’est que la variable en GET récupérée est générée par la fonction getOnlinePaymentUrl qui se trouve dans /core/lib/payments.lib.php,
et cette fonction génère le lien du mail avec un OU || :
elseif ($type == 'member' || $type == 'membersubscription')
{
$out=$urltouse.'/public/payment/newpayment.php?source=membersubscription&ref='.($mode?'<font color="#666666">':'');
et la source en DUR dans le code est toujours source=membersubscription
du coup le hash de vérification ne fonctionne pas car membersubscription sera toujours la variable en GET
alors que le hash de comparaison est créé avec « member » et non pas « membersubscription »
du coup il faudrait mettre :
$out=$urltouse.'/public/payment/newpayment.php?source='.$type.'&ref='.($mode?'<font color="#666666">':'');
De plus, il faut ajouter un OU || dans le fichier newpayment.php aux environs de la ligne 1367 :
// Payment on member subscription
if ($source == 'membersubscription' || $source == 'member')
Car « member » n’est pas dans la condition.
Si j’ai pu aider…
JC