BonBackLink Posté 20 Novembre 2009 Posté 20 Novembre 2009 (modifié) 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é 20 Novembre 2009 par BonBackLink
captain_torche Posté 20 Novembre 2009 Posté 20 Novembre 2009 Essaye d'utiliser la fonction utf8_decode().
BonBackLink Posté 20 Novembre 2009 Auteur Posté 20 Novembre 2009 Merci de ton aide. C'est une bonne idée. J'ai fais le test cela met maintenant un ? à la place du é. Grat grat je cherche encore. Merci.
jcaron Posté 20 Novembre 2009 Posté 20 Novembre 2009 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.
BonBackLink Posté 21 Novembre 2009 Auteur Posté 21 Novembre 2009 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.
jcaron Posté 21 Novembre 2009 Posté 21 Novembre 2009 Paramètre, variable, c'est la même chose ici. Tu rajoutes tep_draw_hidden_field('charset', 'UTF-8') . là où il faut... Jacques.
BonBackLink Posté 23 Novembre 2009 Auteur Posté 23 Novembre 2009 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.
jcaron Posté 23 Novembre 2009 Posté 23 Novembre 2009 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.
BonBackLink Posté 24 Novembre 2009 Auteur Posté 24 Novembre 2009 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.
jcaron Posté 24 Novembre 2009 Posté 24 Novembre 2009 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.
BonBackLink Posté 25 Novembre 2009 Auteur Posté 25 Novembre 2009 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.
jcaron Posté 25 Novembre 2009 Posté 25 Novembre 2009 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.
jcaron Posté 25 Novembre 2009 Posté 25 Novembre 2009 Au fait, c'est "charset", pas "CHARSET", il me semble bien que Paypal est sensible aux majuscules/minuscules. Jacques.
jcaron Posté 25 Novembre 2009 Posté 25 Novembre 2009 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.
BonBackLink Posté 26 Novembre 2009 Auteur Posté 26 Novembre 2009 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.
jcaron Posté 26 Novembre 2009 Posté 26 Novembre 2009 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.
BonBackLink Posté 29 Novembre 2009 Auteur Posté 29 Novembre 2009 Merci de ton aide jacques, 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 ? Merci à plus.
guill Posté 3 Décembre 2009 Posté 3 Décembre 2009 (modifié) 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é 3 Décembre 2009 par guill
jcaron Posté 4 Décembre 2009 Posté 4 Décembre 2009 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.
BonBackLink Posté 29 Décembre 2009 Auteur Posté 29 Décembre 2009 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.
Dudu Posté 30 Décembre 2009 Posté 30 Décembre 2009 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...
BonBackLink Posté 30 Décembre 2009 Auteur Posté 30 Décembre 2009 (modifié) Si je change le charset iso-8859-1 en utf8 tout les é par exemple de la page doivent être changé en é Non ? En tout cas c'est ce que je voulais dire. Merci. Modifié 30 Décembre 2009 par BonBackLink
Dudu Posté 30 Décembre 2009 Posté 30 Décembre 2009 Pas du tout ! Au contraire, l'UTF-8 accepte plus de caractères que l'ISO 8859-1.
captain_torche Posté 30 Décembre 2009 Posté 30 Décembre 2009 Par contre, il faudra changer l'encodage du fichier, effectivement, sous peine d'avoir des caractères bizarres. Des éditeurs gratuits tels que Notepad++ le font (Et j'imagine que DreamWeaver aussi).
BonBackLink Posté 30 Décembre 2009 Auteur Posté 30 Décembre 2009 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.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant