Aller au contenu

Passage des paramêtres à paypal


BonBackLink

Sujets conseillés

Bonjour,

j'ai modifié le module paypal.php d'un script oscommerce ms2.2 afin de passer les champs adresse et noms etc ... à paypal ce qui évite à l'acheteur de les remplir sur paypal. La modification marche bien, mais les caractères accentués ne sont pas bien transmis, il y a un problème d'encodage. Un é dans os commerce est représenté par ¿½ dans paypal. Il me semble que dans oscommerce c'est de l'utf8 et dans paypal ? Comment assurer la compatibilitée ?

Voici le code en espérant que cela servent à d'autres :

paypal.php ligne 79 chez moi :

    function process_button() {
global $order, $currencies, $currency;

if (MODULE_PAYMENT_PAYPAL_CURRENCY == 'Selected Currency') {
$my_currency = $currency;
} else {
$my_currency = substr(MODULE_PAYMENT_PAYPAL_CURRENCY, 5);
}
if (!in_array($my_currency, array('CAD', 'EUR', 'GBP', 'JPY', 'USD'))) {
$my_currency = 'USD';
}


$process_button_string = tep_draw_hidden_field('cmd', '_xclick') .
tep_draw_hidden_field('business', MODULE_PAYMENT_PAYPAL_ID) .
tep_draw_hidden_field('item_name', STORE_NAME) .
// Modif // EOF Modif pour passage paramêtres à paypal
tep_draw_hidden_field('first_name', $order->customer['firstname']) .
tep_draw_hidden_field('last_name', $order->customer['lastname']) .
tep_draw_hidden_field('address1', $order->customer['street_address']) .
tep_draw_hidden_field('address2', "") .
tep_draw_hidden_field('city', $order->customer['city']) .
tep_draw_hidden_field('zip', $order->customer['postcode']) .
tep_draw_hidden_field('state', $order->customer['state']) .
tep_draw_hidden_field('country', $order->customer['country']['iso_code_2']) .
tep_draw_hidden_field('email', $order->customer['email_address']) .


// EOF Modif pour passage paramêtres à paypal


tep_draw_hidden_field('amount', number_format(($order->info['total'] - $order->info['shipping_cost']) * $currencies->get_value($my_currency), $currencies->get_decimal_places($my_currency))) .
tep_draw_hidden_field('shipping', number_format($order->info['shipping_cost'] * $currencies->get_value($my_currency), $currencies->get_decimal_places($my_currency))) .
tep_draw_hidden_field('currency_code', $my_currency) .
tep_draw_hidden_field('return', tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL')) .
tep_draw_hidden_field('cancel_return', tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'));

return $process_button_string;
}

Merci d'avance.

Modifié par BonBackLink
Lien vers le commentaire
Partager sur d’autres sites

Commence déjà par rajouter le paramètre charset=UTF-8 (ou autre charset utilisé) dans les paramètres passés à Paypal... Ce que tu obtiens (¿œ, mais plus vraisemblablement ï¿œ qui est l'encodage UTF-8 du "replacement character" affiché comme de l'ISO-8859-1) semble indiquer qu'il y a plus de problèmes que ça, i.e. tu dois déjà avoir quelque part une conversion incorrecte.

Jacques.

Lien vers le commentaire
Partager sur d’autres sites

Merci jcaron,

oui en effet je pense qu'il y a un problème de ce style. Mais je ne voit pas comment rajouter le paramètre charset=UTF-8 (ou autre charset utilisé) dans les paramètres passés à Paypal. Je lui envoie juste des variables qu'il reprend dans son interface. Je crois que je vais être obligé de rajouter un script php qui convertit en entité spéciales html.

Lien vers le commentaire
Partager sur d’autres sites

Merci Jacques,

j'ai un peu tout essayé, y compris mettre en utf8 dans les préférences de compte chez paypal. Il n'y a rien qui marche, apparemment de ce que j'ai pu voir, y compris sur les forum de dévellopement paypal, je ne suis pas le seul.

Alors pour l'instant solution à la hache j'ai viré less accents.

Si quelqu'un est arrivé avec le script que j'ai mis ci-dessus (script _xclick) à transmettre correctement les infos à paypal je suis preneur.

Merci.

Lien vers le commentaire
Partager sur d’autres sites

Moi je n'utilise pas OSCommerce, mais je passe sans problème tous les accents que je veux à Paypal et retour...

Comme je disais précédemment, ce que tu obtiens est le signe qu'il y a déjà (au moins une) conversion incorrecte avant. Remplis un panier, et sur la page où se trouve le bouton de paiement Paypal, regarde le code HTML pour voir déjà quelle gueule ont tes accents dans les <input type="hidden"...> générés, et si ça correspond à l'encodage que tu indiques à Paypal et à l'encodage de la page (évidemment il faut que tu soies en mesure de contrôler l'encodage utilisé pour l'affichage de ton HTML). A mon avis tu vas te rendre compte que ce n'est pas vraiment ça.

Je suppose évidemment que par ailleurs sur le site les accents fonctionnent bien, et qu'on peut donc au minimum supposer que php, mysql, oscommerce, les templates, etc. sont tous d'accord sur l'encodage.

Jacques.

Lien vers le commentaire
Partager sur d’autres sites

Le script est en php pas en html. Mais ce qu'il a de curieux avec la méthode de passage par le script _xclick c'est que tu peux très bien avoir les accents bon pour le nom des produits et pas pour la personne. Alors que du coté du script php os commerce ces données sont toutes issues de la base en utf 8. Il faut donc savoir comment les traite paypal. Sur les forums de développement Paypal les gens s'arrachent les cheveux avec ce problème. La seule réponse paypal c'est de dire: mettez en utf 8 dans la console paypal. Ce que nous sommes plusieurs à avoir fait mais cela ne marche pas.

Faut dire que ces paramètres pour préremplir le paiement CB c'est nouveau à mon avis leur traitement a un bug.

A moins qu'il y ai une solution cachée.

Merci je vous tiens au courant dés que j'ai du nouveau.

Lien vers le commentaire
Partager sur d’autres sites

Et à ton avis ton PHP il génère quoi? Du HTML, qui est interprété par ton navigateur. Donc tu prends ton navigateur favori, tu vas sur la page qui contient le formulaire en question et tu fais "Afficher la source", et tu regardes ce que contiennent les <input type="hidden" value="xxx">, en tenant compte du charset indiqué dans le formulaire, du charset de la page et éventuellement du charset du <form>. Visiblement certains champs doivent être encodés de travers, probablement parce qu'entre la base et le HTML il y a des conversions inutiles (ou manquantes).

Et à ma connaissance ce n'est pas spécialement nouveau, il me semble bien que ça fait plusieurs années que ça existe tout ça. En tous cas je viens de tester, ça marche parfaitement bien.

Jacques.

Lien vers le commentaire
Partager sur d’autres sites

Ben le scipt php dont j'ai mis un bout ci-dessus il envoie des paramètres à paypal, il ne s'affiche pas sur mon site, il s'affiche ensuite sur paypal, mais je ne sais ce qu'en fait paypal. Les pages affichés sur mon site sont toutes correctes.


/>http://www.pdncommunity.com/pdn/board/message?board.id=fr&thread.id=3151

merci.

Lien vers le commentaire
Partager sur d’autres sites

Bon, reprenons depuis le début.

Tu vas sur ton site, genre www.exemple.truc. Il y a une script PHP (genre index.php) qui est appelé. Ce script génère du HTML, qui est envoyé à ton navigateur, qui affiche la page correspondante.

Pareil dans le cas présent: tu vas sur la page de paiement, il y a un script PHP qui est appelé (je ne sais pas comment il s'appelle chez OScommerce, supposons que ce soit payment.php, qui appelle tout un tas d'autres fichiers, modules, librairies, etc.), il génère du HTML, qui est envoyé à ton navigateur, qui affiche alors une page avec un joli bouton "Paypal".

Le bouton en question est le résultat de tout un tas de HTML, un formulaire (<form...>) avec tout plein de <input type="hidden" name="xxx" value="yyy">, et un bouton. Quand tu cliques sur ce bouton, le formulaire est "soumis" à Paypal, avec tous les paramètres qui sont indiqués dans les <input type="hidden"...>.

Le bout de code que tu as donné est du PHP qui génère ce code HTML. Or, il se trouve que visiblement, ce code PHP se trompe quelque part, et génère du code HTML qui est incorrect sur certaines des valeurs qui n'ont pas le bon encodage et/ou ont été incorrectement converties (trop ou pas assez).

Donc si tu vas sur la page où se trouve ce bouton "Paypal", que tu fais "Afficher le source", tu vas avoir le code HTML correspondant à ce formulaire, y compris toutes les valeurs que tu passes à Paypal. Bref, tu vas voir le résultat de l'exécution de ton code PHP. C'est la première chose à faire quand on débuggue du php ou tout autre script sur un site web: on commence par vérifier que le résultat de l'exécution (le code HTML généré) correspond bien à ce qu'on voudrait/attend, et que le code HTML généré est bien correct. Si tu ne sais pas exactement ce que tu envoies à Paypal, tu ne peux pas reprocher à Paypal de mal le traiter. Ce serait comme remplir ta déclaration d'impôts les yeux fermés et l'envoyer sans la regarder, et ne pas être content parce qu'ils te font payer plus d'impôts que prévu: tu penses que tu as mis les bonnes valeurs dans les bonnes cases, mais en fait tu n'en sais rien, donc tu ne peux pas te plaindre. La première chose à faire est de vérifier ce qui est envoyé, et ça, tu va au moins en avoir une indication en regardant le code HTML.

Comprendo?

Jacques.

Lien vers le commentaire
Partager sur d’autres sites

Je me réponds à moi-même... C'est bien ça, il faut mettre charset en minuscules et ça marche très bien pour la description. Mais comme tu supprimes les accents dans le reste, difficile de dire ce qu'il en est pour le moment...

Jacques.

Lien vers le commentaire
Partager sur d’autres sites

Te comprendo muy bien si ;)

Sauf que sur os commerce cela ne marche pas comme ça voir :
/>https://www.paypal-france.fr/marchands/deja-client-paypal/formulaire-de-paiement-plus-court/codes.php

partie 2) Vous avez intégré PayPal en API

Le module de payement qui génère du html pour avoir un bouton de paiement, en appelle d'autres lors de l'appui sur le bouton dont la seule action est de générer des variables transmises à l'api paypal.

La finalité d'un script php ce n'est pas toujours de générer du html. Tu peux avoir un script php qui fait simplement un backup de base de donnée. ou bien encore qui ne contient que des fsockopen ou autre. D'où ce que j'ai écrit plus haut : "Ben le scipt php dont j'ai mis un bout ci-dessus il envoie des paramètres à paypal, il ne s'affiche pas sur mon site, il s'affiche ensuite sur paypal, mais je ne sais ce qu'en fait paypal. Les pages affichés sur mon site sont toutes correctes."

Peux être il faut que je me tape çà : https://www.paypalobjects.com/WEBSCR-600-20091109-1/fr_FR/FR/pdf/PP_WebsitePaymentsStandard_IntegrationGuide.pdf

Merci a plus.

Lien vers le commentaire
Partager sur d’autres sites

C'est pour ça que je suis allé sur ton site, j'ai préparé une commande, j'ai vu le bouton Paypal, j'ai fait "afficher le source", et j'ai vu le "CHARSET"?

Donc tu vires la suppression des accents, tu fais pareil, et tu regarde quelle gueule ces accents ont dans le source. Et tu penses à corriger le "CHARSET", évidemment.

Jacques.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

j'ai eu un problème similaire avec oscommerce et paypal IPN.

il faut vérifier le charset dans le code source de la page checkout_confirmation.php

et vérifier que le même est utilisé :

- dans l'interface Paypal

- dans le fichier paypal.php ou paypal_ipn.php

dans mon cas, le contributeur avait fixé le charset en iso-8859-2 alors qu'en général (il me semble) sur oscommerce on utilise plutôt de base iso-8859-1 ou utf-8

si ca peut aider...

Modifié par guill
Lien vers le commentaire
Partager sur d’autres sites

sur quelle page a tu vu charset en majuscule ? Sur confirmation.php où il y a le bouton confirmez commande qui t'envoie sur paypal ?

Je ne sais pas comment elle s'appelle et j'ai la flemme d'aller vérifier, mais oui, la page où il y a le bouton qui envoie chez Paypal, qui est le formulaire généré par le code que tu as donné au début, qui doit contenir le charset, et les paramètres que tu passes pour pré-remplir tout ça. Si le charset n'est pas bon même la description des produits pose problème (UTF-8 non reconnu et affiché comme de l'ISO). C'est donc cette page-là dont tu dois afficher le source pour vérifier que les coordonnées de l'utilisateur sont correctement encodées (ou pas).

Jacques.

Lien vers le commentaire
Partager sur d’autres sites

  • 4 semaines plus tard...

Merci de votre aide à tous les deux.

J'ai enfin eu un peu de temps pour traiter le problême proprement.

effectivement sur la page checkout_confirmation.php il y a un charset iso-8859-1, le changer veut dire changer tout le code de la page. J'ai donc mis simplement ce choix dans l'interface paypal et cela marche. J'ai donc enlever le code qui me permettait d'oter les accents.

A plus.

Lien vers le commentaire
Partager sur d’autres sites

le changer veut dire changer tout le code de la page.
Comment ça ? Il suffit juste de sauvegarder le fichier en FTP avec le nouveau format. Le plus basique des éditeurs de texte en est capable, théoriquement... ;)
Lien vers le commentaire
Partager sur d’autres sites

Ok,

en changeant par utf8 j'avais effectivement des trucs bizarres à la place des caractères accentués ce qui me paraissait tout à fait normal. Je na savais pas que notepad++ que j'utilise de par ailleurs permettait le remplacement en entités spéciales html.

A plus et merci.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...