nicolasblanco / paybox_system

Paybox System e-commerce gateway Ruby implementation
MIT License
11 stars 9 forks source link

"Problème d'identification du commerce. Accès refusé !" #2

Open ghost opened 12 years ago

ghost commented 12 years ago

Salut à tous :)

Au moment de valider le paiement, quand je suis redirigé vers la page de paiement de paybox, j'ai cette erreur qui apparaît "Problème d'identification du commerce. Accès refusé !"

Quelqu'un peu m'aider à résoudre ce problème ? D'ou cela peux t-il venir ?

J'utilise le compte de test.

<%= paybox_hidden_fields :site => "1999888", :rang => "99", :identifiant => "2", :total => "49", :devise => 978, :cmd => "id cmd 123456", :porteur => "test@paybox.com", :retour => "amount:M;reference:R;autorization:A;error:E;sign:K", :effectue => "toto.com", :refuse => "toto.com", :annule => "toto.com", :repondre_a => "toto.com" %> J'ai essayé avec d'autres identifiants (ceux issus des docuements pdf) mais cela pose également problème. Une idée ? Merci d'avance :) PS : je poste en francais car l'erreur est en Francais ;)
elentras commented 12 years ago

Salut, j'ai eu le meme soucis, j'ai utilisé au debut cette gem mais au finale j'ai développé un petit module pour regler ce soucis.

https://gist.github.com/7f059f98b0f52ccf934f

Edit : je passe par un controlleur pour creer la requete http puis une redirection vers la plateforme de paiement paybox. Edit2 : Cette erreur est provoqué par une modification du système de paiement paybox, le point noir est la clé HMAC qui semble être générée différemment que celle fourni dans cette gem. Pour l'instant, je n'ai pas le temps de la fork + patch (proprement). Mais peut etre en fin de semaine.

nicolasblanco commented 12 years ago

T'as testé avec exactement les memes paramètres que j'ai mis dans l'exemple de la méthode hash_form_fields_from ?

@elentras c'est sympa de balancer un gist perso qui marche pour toi.

mais bon, ma lib est utilisée sur un projet en prod et fait pas grand chose de plus que de convertir les paramètres en strings uppercase (sauce Paybox) et calculer le hash avec la clé secrète : cf. https://github.com/slainer68/paybox_system/blob/master/lib/paybox_system.rb Donc si tu penses qu'il y a un problème la dedans, c'est plus sympa de me faire une pull request plutot que de réinventer la roue dans son coin.

Sinon effectivement deux solutions pour afficher la page de paiement : via un form ou via une redirection dans un controleur (en utilisant la méthode hash_form_fields_from plutôt que le helper).

Dernière chose, Paybox ils sont assez relous. En cas de problème vaut mieux contacter un gus technique direct et lui demander quels paramètres sont mauvais plutôt que de perdre une aprem a galérer.

elentras commented 12 years ago

Effectivement, je ne l'utilise pas dans le meme contexte que sur cette gem. De plus, j'ai juste retranscrit sous une librairie ce bloc qui est la copie conforme du script php d'exemple. (voir les variables en camelCase... Bouh ! J'ai honte)

J'ai choisi de passer par un controller qui construit ma requete et la cle hmac avant d'executer une redirection avec les parametres encapsulés. Ce qui me permet d'enregistrer chaque demande de paiement et d'etablir l'historique des paiements avec leur avancement et status...

Je vais voir pour faire un pull request asap, la j'ai encore de gros blocs a developper.

On 21 sept. 2012, at 15:26, Nicolas Blanco notifications@github.com wrote:

T'as testé avec exactement les memes paramètres que j'ai mis dans l'exemple de la méthode hash_form_fields_from ?

@elentras c'est sympa de balancer un gist perso qui marche pour toi.

mais bon, ma lib est utilisée sur un projet en prod et fait pas grand chose de plus que de convertir les paramètres en strings uppercase (sauce Paybox) et calculer le hash avec la clé secrète : cf. https://github.com/slainer68/paybox_system/blob/master/lib/paybox_system.rb Donc si tu penses qu'il y a un problème la dedans, c'est plus sympa de me faire une pull request plutot que de réinventer la roue dans son coin.

Dernière chose, Paybox ils sont assez relous. En cas de problème vaut mieux contacter un gus technique direct et lui demander quels paramètres sont mauvais plutôt que de perdre une aprem a galérer.

— Reply to this email directly or view it on GitHub.

adamico commented 11 years ago

Je m'incruste... effectivement nous sommes des bêtes rares à utiliser Paybox avec Ruby... l'année dernière tout marchait parfaitement (avec l'url pre-prod et en production), cet année (j'ai un contrat type évènementiel que je desactive quand il n'y a pas de transactions) "problème d'identification commerçant". Ils ont visiblement changé la méthode de génération de la clé HMAC... Je suis en contacte avec le support pour voir s'ils trouvent le problème, je m'occuperait d'une pull request dès que possible.

nicolasGuillouet commented 11 years ago

Salut,

j'ai aussi tourné en rond sur le problème. En fait, il ne vient pas de hash_form_fields_from, mais du helper : paybox_hidden_fields. En effet, il fait un Rack::Utils.escape pour chaque valeur. Du coup "test@paybox.com" devient "test%40paybox.com" qui n'est semble-t-il pas "unescapé" côté paybox, d'où un échec sur le test de validé de l'HMAC :-(. Si je m'en tiens au exemples php fournis par paybox, j'aurai tendance à dire qu'il ne faudrait pas faire d'escape ... (j'ai testé avec "PBX_CMD=ref toto" ça passe ;-)).
@slainer68 je te fais un pull request ;-)

adamico commented 11 years ago

Oups, oui j'ai oublié de mentionner que j'avais résolu la question de la même manière. Aucun escape n'est nécessaire.

nicolasblanco commented 11 years ago

@adamico : je clos cette issue donc ?

adamico commented 11 years ago

Oui. Le 15 mai 2013 12:38, "Nicolas Blanco" notifications@github.com a écrit :

@adamico https://github.com/adamico : je clos cette issue donc ?

— Reply to this email directly or view it on GitHubhttps://github.com/slainer68/paybox_system/issues/2#issuecomment-17931308 .

adamico commented 11 years ago

Par contre dans la vérification de la signature (https://github.com/slainer68/paybox_system/blob/master/lib/paybox_system.rb#L45), nous avons ceci

public_key.verify(digest, Base64.decode64(Rack::Utils.unescape(sign)), params)

La méthode Paybox::System::Rails::Integrity.check_paybox_integrity! me renvoie toujours l'erreur 'Bad Paybox integrity test' même pour des paiements qui ne devraient pas poser de soucis. Ou alors Paybox déconne encore une fois...