Probleme rappel Paypal sur OVH mutu via fsockopen

  • Posts: 35
  • Thank you received: 4
7 years 9 months ago #260468

-- HikaShop version -- : 3.0.0
-- Joomla version -- : 3.6.5
-- PHP version -- : 5.6
-- OpenSSL -- : 0.9.8

Bonjour,

Le plugin de paiement paypal de Hikashop semble ne pas fonctionner correctement sur un OVH mutu !?

Le retour de notification de paiement (IPN) marche bien, mais apres investigation il semble que le plugin rappelle Paypal pour controler que le client qui vient de payer est bien VERIFIED (!?)
Ce controle se fait via l'API PHP fsockopen, hors celle-ci semble etre bloqué par défaut sur les OVH mutu !? car le plugin plante sur cette ligne !

Je pense a 3 pistes :

  1. proposer un parametre dans le plugin paypal pour effectuer ou pas le controle "VERIFIED" du client ?
    Bon cela ne semble pas une bonne piste, car si pas de retour suite a l'IPN, Paypal desactivera la notification de paiement comme expliquer ci dessous si j'ai bien compris ?!
    github.com/paypal/ipn-code-samples#ipn-overview
  2. remplacer l'appel du fsockopen (function onPaymentNotification du plugin Paypal) par un appel cUrl ?
    ou en file_get_contents, comme dans ce lien :
    github.com/paypal/ipn-code-samples/blob/...hp/PaypalIPN.php#L75
  3. qqun connait la procedure pour demander a OVH de regler le firewall pour les IPN Paypal ?
Qu'en pensez vous ?

Last edit: 7 years 9 months ago by garstud.

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

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
7 years 9 months ago #260472

Bonjour Marc !

1. Ce n'est pas une bonne idée. Si tu désactives cette vérification, alors n'importe qui pourrait valider la commande en appelant l'URL de notification. d'où le fait qu'il n'y a pas cette possibilité.

2. C'est possible de changer cela.
Le problème c'est que juste remplacer fsockopen par cURL n'est pas une solution viable pour tout le monde.
Idéalement, il faudrait tenter le fsockopen et si non disponible, faire un appel cURL.
Un peu comme l'on a dans le plugin ReCaptcha:

function _submitHTTPGet($path, $data)
	{
		$req = $this->_encodeQS($data);
		$response = file_get_contents($path . $req);
		if( $response == false ) {
			// create curl resource
			$ch = curl_init();
			// set url
			curl_setopt($ch, CURLOPT_URL, $path . $req);
			//return the transfer as a string
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
			// $output contains the output string
			$response = curl_exec($ch);
			// close curl resource to free up system resources
			curl_close($ch);
		}
		return $response;
	}

3. Je n'ai pas connaissance de tel blocage au niveau d'OVH mais si c'est le cas, il faut ouvrir un ticket avec le support OVH je suppose.

The following user(s) said Thank You: garstud

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

  • Posts: 35
  • Thank you received: 4
7 years 9 months ago #260561

Hello Nicolas,

Merci pour ces infos.

1) ok je comprends

2) oui, ca serait le top ! un classique pour être sûr que ca passe sur un maximum d'hébergement.
Après, il me semblait que cUrl est plus présent que fsockopen sur les hébergeurs, non ?
... Bon, faut que je tente le double-socket ou c'est ton equipe qui se le note dans un coin pour bientot ? :whistle:

3) je ne lache pas cette solution, j'ouvre un ticket aupres d'OVH et je vous fais un retour sur ce fil, prochainement.

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

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
7 years 9 months ago #260570

Bonjour,

Faisons 50/50 :)
Voici une version modifiée du plugin PayPal pour gérer cela. J'ai fait ça rapidement aujourd'hui sans tester.
Donc il y a juste à tester de ton coté.
Si tu peux faire cela, ca nous permettra d'inclure cela dans la prochaine version d'HikaShop.

File Attachment:

File Name: paypal.zip
File Size:10 KB

Attachments:
Last edit: 7 years 9 months ago by nicolas.

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

  • Posts: 35
  • Thank you received: 4
7 years 9 months ago #260588

Super ! merci bien !
Marché conclu, on teste ca et on revient vers vous dans les prochains jours ;)

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

  • Posts: 35
  • Thank you received: 4
7 years 9 months ago #260841

Bonjour,

Nous avons fait quelques tests en mode SandboxPaypal avec le nouveau plugin.

La bonne nouvelle est que sur ce serveur OVH, le onPaymentNotification detecte bien que le fsockopen ne marche pas, et il passe la main a Curl. ca semble ok de ce coté la.

Après, coté cUrl, ce n'est pas encore nikel, j'ai eu 1 soucis sur le code et 1 error paypal

Le soucis sur le code concerne l'execution du cUrl et le tratement de la reponse est des erreurs eventuelles :

		$response = curl_exec($ch);
		
		$errno = curl_errno($ch);
		$error = curl_error($ch);

		curl_close($ch);

		if (!$response) {
			if($this->payment_params->debug)
				echo 'CURL request didn\t return any data'. "\r\n\r\n";
			return false;                   <---  cette ligne ?
		}

		if($errno){
			if($this->payment_params->debug) {
				echo 'CURL error number: '.$errno. "\r\n\r\n";
				echo 'CURL error message: '.$error. "\r\n\r\n";
			}
		}
Le "return false" est surement mal positionné, car si pas de "response" on sort sans avoir d'info sur le "errno et "error".
Du coup en deplacant le "return false" , on a les infos suivantes :
  • errorno : 3
  • error : <url> malformed
  • data(sérialisé) :
    s:1069:"option=com_hikashop&ctrl=checkout&task=notify&notif_payment=paypal&tmpl=component&lang=fr&Itemid=545&mc_gross=8.00&invoice=157&protection_eligibility=Ineligible&item_number1=001&payer_id=7EDPYAR36VXGG&tax=0.00&payment_date=05%3A47%3A00+Jan+30%2C+2017+PST&payment_status=Completed&charset=windows-1252&mc_shipping=0.00&mc_handling=0.00&first_name=test&mc_fee=0.52&notify_version=3.8&custom=&payer_status=verified&business=gerard.madail-facilitator%40gmail.com&num_cart_items=1&mc_handling1=0.00&verify_sign=AFcWxV21C7fd0v3bYYYRCpSSRl31AY2enBhDnUDKAblRmPBEy0p50QLE&payer_email=gerard.madail%40gmail.com&mc_shipping1=0.00&tax1=0.00&txn_id=2XY48234BR017001M&payment_type=instant&last_name=buyer&item_name1=Lot-001+-+Olivier+MARC+%3A+IMAGES+DU+CPS&receiver_email=gerard.madail-facilitator%40gmail.com&payment_fee=&quantity1=1&receiver_id=WN565T9DVSKS2&txn_type=cart&mc_gross_1=8.00&mc_currency=EUR&residence_country=FR&test_ipn=1&transaction_subject=&payment_gross=&ipn_track_id=b2a85c1669964&240plan=R915211608&hikashop_front_end_main=1&view=checkout&cmd=_notify-validate";

- Est-ce qu'il manque le index.php avant le "option=com_hikashop" ?

Last edit: 7 years 9 months ago by Jerome.

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

  • Posts: 26158
  • Thank you received: 4028
  • MODERATOR
7 years 9 months ago #260843

Salutations !

On peut en effet inverser le if sur $errno et le if sur !$response.

Il faut remplacer la ligne

$uri = $url['path'] . ($url['query'] != '' ? '?' . $url['query'] : '');
Par
$uri = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query'] != '' ? '?' . $url['query'] : '');

Il ne manque pas de "index.php" car le data est bien les données qu'on envoie dans le POST.
On voit aussi que le charset est sur "windows-1252" ; il serait bien de forcer le charset en UTF8 dans le compte marchant sur Paypal.
Ca va permettre d'éviter quelques soucis.

Amicalement,


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: 35
  • Thank you received: 4
7 years 9 months ago #260850

Hello,

Merci pour ce retour.
On va voir avec le client pour régler l'encodage et on va refaire une batterie de test.
On vous tient au courant.

A+

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

  • Posts: 35
  • Thank you received: 4
7 years 9 months ago #261267

Bonjour,

On a refait des tests sur notre paypal SandBox, avec la correction de l'URI.
Ca passe bien en cUrl, mais on a un code err 35 lors de l'appel de verification vers Paypal !?

CURL data : s:1036:"option=com_hikashop&ctrl=checkout&task=notify&notif_payment=paypal&tmpl=component&lang=fr&Itemid=545&mc_gross=16.00&invoice=167&protection_eligibility=Ineligible&item_number1=&payer_id=7EDPYAR46VXGG&tax=0.00&payment_date=02%3A25%3A46+Feb+03%2C+2017+PST&payment_status=Completed&charset=windows-1252&mc_shipping=0.00&mc_handling=0.00&first_name=test&mc_fee=0.79&notify_version=3.8&custom=&payer_status=verified&business=gerard.madail-facilitator%40gmail.com&num_cart_items=1&mc_handling1=0.00&verify_sign=AKT9YF3SRMaJwCYrIl0ZYYCB3ktdAy4l5B9yF1h.XSnUgIQd2Nbo9vaL&payer_email=gerard.madail%40gmail.com&mc_shipping1=0.00&tax1=0.00&txn_id=9LL973874U4486418&payment_type=instant&last_name=buyer&item_name1=Prix+total&receiver_email=gerard.madail-facilitator%40gmail.com&payment_fee=&quantity1=1&receiver_id=WN565T9DVSKS2&txn_type=cart&mc_gross_1=16.00&mc_currency=EUR&residence_country=FR&test_ipn=1&transaction_subject=&payment_gross=&ipn_track_id=b908c29785309&240plan=R915181116&hikashop_front_end_main=1&view=checkout&cmd=_notify-validate";

cUrl error : 35
cUrl msg : error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

Du coup, on a une response vide de l'appel cUrl
et on a un mail qui part avec le sujet : "Notification de paiement de Paypal refusée: Echec de connexion vers Paypal pour la commande H1G67"
suivi d'un code HTTP 403 dans la log access.log

P.S. pour ce qui est de l'encodage UTF8, en mode sandbox on n'a pas trouvé si c'est modifiable !?!
par contre, on trouve bien comment le faire sur le compte reel :
jlchereau.blogspot.fr/2006/10/paypal-ipn-with-utf8.html
un des commentaires de cet article semble prétendre que le charset n'a pas d'effet sur le mode sandbox ... !?

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

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
7 years 9 months ago #261272

Bonjour Marc,

Pour l'erreur cURL, c'est typique d'un problème de cryptage SSL/TLS. Ajoutes la ligne:
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
après la ligne:
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
dans le fichier paypal.php du plugin et cela devrait corriger le problème.

Pour l'encodage sur la sandbox, je ne saurais dire. Il faudrait voir avec PayPal.

The following user(s) said Thank You: garstud

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

  • Posts: 35
  • Thank you received: 4
7 years 9 months ago #261468

Merci pour le code modifié. Nous avons ajouté le code, mais cela ne marche pas mieux !
Après investigations sur le Web, il semble que ce problème est récent (2016) et ne concerne que certains hébergeurs ...
En creusant davantage, OVH en fait partie.

Le problème réside dans le la version OpenSSL proposée sur les hébergements.
Pour sécuriser les échanges SSL, Paypal à remonté le prérequis minimum de la Bibliothèque OpenSSL des sites Web utilisant Paypal.
Il faut désormais une version 1.0.1 d'OpenSSL
Notre serveur OVH propose lui une version OpenSSL 0.9.8 (obsolète pour Paypal)

Extrait de la source :
www.eewee.fr/paypal-2016-changement-obli...e-ssl-v3-tls-et-ipn/
"PayPal, ce qui change en 2016 :
17 Juin 2016 :
TLS 1.2 sera la référence (le support du TLS 1.0 va prendre fin).
Il vous faudra OpenSSL 1.0.1 ou supérieur."


Nous n'avons pas encore pu vérifier ce point, nous sommes en contact avec le support OVH pour mettre a jour OpenSSL ou changer de serveur (ticket ouvert ce jour).



Vous pouvez vérifier la version OpenSSL de votre hébergement dans la console d'administration Joomla :
- Menu Systeme > Information Systeme
- onglet "Informations PHP"
- rechercher (Ctrl+F) : "openssl"

Vous devriez trouver la version OpenSSL indiquée comme sur la capture ci-jointe.

Attachments:

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

  • Posts: 26158
  • Thank you received: 4028
  • MODERATOR
7 years 9 months ago #261501

Merci beaucoup pour tes retours !

Je ne vois malheureusement pas ce qui va être possible de faire de notre côté si ni fsockopen ni cURL ne peuvent fonctionner.
Au niveau d'openSSL, avec les soucis de heartbleed je pensais que les serveurs étaient maintenant beaucoup plus à jour.
Car du 0.9.8 ça reste du Debian Squeeze (qui même sur le dépôt LTS est en 0.9.8o-4-23).

En espérant que vous puissiez migré de serveur afin d'avoir du support de TLS1.2 !


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: 35
  • Thank you received: 4
7 years 9 months ago #261546

Effectivement, le problème ne vient pas de Hikashop, mais bien, comme tu le précises, des hébergements qui ne sont pas a jour coté SSL !
Vu le tollé sur les dernières failles SSL, ca parait étonnant, mais on vient d'avoir le retour d'OVH, il propose de faire la mise à jour SSL manuellement.

D'ailleurs voici le retour (réactif) du support OVH, il nous ont donné le mode opératoire pour mettre a jour OpenSSL, c'est assez simple et cela c'est bien passé, nous avons désormais du OpenSSL 1.0.1 :

Pour mettre à jour la version d'OpenSSL et passer à l'utilisation de la version 1.2 du protocole TLS, veuillez appliquer ce changement depuis votre espace client OVH :
- Menu : Hébergements > [nom de votre domaine] > Informations générales
- Cliquer sur "Modifier la configuration" en face de "Version PHP globale".
- Cliquer sur le bouton "Modifier la configuration courante".
- Passer l'Environnement d'exécution de "Legacy" à "Stable".
- Choisir une version PHP égale ou supérieure à 5.6.
- Valider les changements.
Pour plus de détails sur la manipulation décrite ci-dessus, veuillez consulter cette page de guide :
docs.ovh.com/fr/fr/web/hosting/modifier-...mon-hebergement-web/

En fait, nous etions en PHP 5.6 Legacy sur ce serveur, et du coup nous sommes désormais en PHP 5.6 Stable avec OpenSSL 1.0.1.

Nous venons de refaire des tests du nouveau plugin Paypal d'Hikashop sans la dernière modif de code proposée qui force le TLS en v1.
Notre test avec la Sandbox Paypal est concluant, mais bizarrement, cela ne passe plus par cUrl, car fsockOpen repond bien désormais !!!
(il semble que la mise a jour OVH a corrigé le probleme que nous avions avec fSockOpen !? le mode opératoire d'OVH permet donc de régler notre 1er problème du même coup !)
Du coup, le 1er point est de vous dire que votre plugin Paypal marche bien en fSockOpen (c'est juste une vérification, car ca, vous le saviez deja ;) )

Et ensuite, 2eme point, nous avons désactivé l'appel fsockopen dans le code du plugin Paypal pour forcer l'appel en cUrl.
Impeccable, ca marche très bien aussi. Nous arrivons à commander et payer sur paypal avec le controle IPN du "VERIFIED Paypal" et notre commande change bien de statut automatiquement.

Merci à toute l'équipe pour la réactivité sur l'évolution du plugin Paypal ;)

P.S. je vais vous faire un dernier retour, car nous avons demandé à notre client de faire un essai de commande réelle (sans SandBox) pour valider le passage en OpenSSL 1.0.1 et le nouveau plugin Paypal Hikashop ... on revient vers vous dès que l'on a l'info.

Last edit: 7 years 9 months ago by garstud.

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

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
7 years 9 months ago #261559

Bonjour Marc,

Merci pour le retour détaillé ! Content que cela fonctionne dans les deux modes. Ca permettra d'améliorer la compatibilité avec les différents types de configuration serveur.

The following user(s) said Thank You: garstud

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

  • Posts: 35
  • Thank you received: 4
7 years 9 months ago #262218

Yes, tout a fait d'accord, c'est une belle évolution qui va surement améliorer l'intégration de Paypal pour Hikashop sur certains hébergeurs !

Une commande réelle a été passée sur le site de notre client et confirme que le nouveau plugin Paypal fonctionne bien avec fsockopen.
Puis on a désactivé le code fsockopen afin de laisser passer une seconde commande réelle en cUrl. C'est donc tout bon avec ce nouveau plugin Paypal pour Hikashop, bravo ;)

Suggestion d'évolution :
Après, le top serait que Hikashop détecte que la version d'OpenSSL du serveur n'est pas compatible avec les pre-requis de Paypal et affiche un warning "parlant" dans l'admin .... plutot qu'une erreur 35_SSL_ handshake_failure_machin_truc .... une idée comme ca en passant :whistle:
stackoverflow.com/questions/9693614/how-...sl-version-is-0-9-8k

Merci beaucoup pour votre réactivité efficace, A+

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

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
7 years 9 months ago #262225

Bonjour,

Merci pour l'idée et le lien. Nous allons voir pour rajouter un message :)

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

Time to create page: 0.083 seconds
Powered by Kunena Forum