2 Stimmen

Wie zu greifen POST-Parameter (mit Rails) in der ursprünglichen Reihenfolge, in der sie kamen?

Hallo zusammen! Ich integriere das IPN-System von Paypal, und ihr Authentifizierungsprozess erfordert, dass mein Server auf eine Paypal-Anfrage mit einem POST an Paypal mit Parametern antwortet, die EXAKT denen entsprechen, die Paypal mir geschickt hat (allerdings mit einem angehängten String). Ich habe also den Hash der Parameter in einen String verwandelt (entsprechend formatiert) und ihn zurückgeschickt, aber es sieht so aus, als ob der resultierende String nicht in der gleichen Reihenfolge wie die ursprünglichen POST-Parameter ist (was zu keiner Authentifizierung führt).

Weiß jemand, wie ich auf die tatsächlichen POST-Parameter selbst zugreifen kann (im Gegensatz zu den params Hash), so dass ich kopieren kann, dass und senden Sie es zurück zu Paypal? Der Haken an der Sache ist, dass die Reihenfolge der Parameter, die ich an Paypal sende, genau mit der Anfrage übereinstimmen muss, die meinen Server erreicht hat.

Ergibt das einen Sinn? Irgendwelche Gedanken? Vielen Dank im Voraus!

--Jared

3voto

Brett Bender Punkte 18860

Paypals IPN kann ein wenig pingelig sein, wenn ich mich richtig erinnere (Sie haben wirklich zu geben sie genau was sie mit Ihrer angehängten Nachricht gesendet haben oder nichts funktioniert).

Sie sollten wahrscheinlich greifen die rohen Post-Daten in Ihrem Controller, eine Zeichenfolge an sie anhängen, und konstruieren Sie eine Art von HTTP-Anfrage mit Ihrem rohen Post-Daten, bevor Sie es zurück. Ich erinnere mich, tun es das letzte Mal, dass ich Paypals IPN verwendet, und es funktionierte relativ gut.

Ich würde verwenden ActionController#raw_post und ändern Sie es einfach, bevor Sie eine Anfrage an Paypal zurücksenden. Denken Sie auch daran, es gibt eine Zeitüberschreitung für IPN-Antworten (ich denke) und Paypal kann Sie mehrere Benachrichtigungen mit genau den gleichen Daten senden, wenn sie nicht zurück, was sie erwarten, so dass Sie wahrscheinlich wollen, um sie eine Anfrage zurück sofort zu senden, bevor Ihr Code etwas anderes tut.

0voto

aceofspades Punkte 7510

Sie können den params-Hash nicht verwenden, die Reihenfolge geht verloren. Verwenden Sie die ursprünglichen Anforderungszeichenfolgen, zum Beispiel request.request_uri o request.query_string .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X