UTF – 8 Kodierung der Paypal IPN mit Ruby on Rails

Vorgestern war es soweit. Das Premiumsystem für Zoomoringer.de ging in die Beta-Phase. Die ersten Tester durften drauf und es wurden auch schon echte Zahlungsabwicklungen mit PayPal getestet. Dabei sind wir zufällig auf ein Problem gestoßen. Mein Partner konnte seine Rechnung nicht ansehen. Diese Rechnungen werden live generiert und verwenden Daten, die uns von PayPal übermittelt werden.

Relativ schnell wurde mir klar, dass es sich um ein Kodierungsproblem handelte, denn in dem was wir von PP übermittelt bekamen waren mehrere Umlaute drin. Also ging ich der Sache auf den Grund und fand auch einen hilfreichen Blog Post. Dieser ist allerdings auf ASP.NET ausgerichtet.

Ich selbst habe zunächst die Methode in meinem Warenkorb Model angepasst, die letztlich den Button für PayPal generiert – „jetzt Zahlen“. Wichtig ist hier, dass man an PayPal charset=’utf-8′ übergibt. In Ruby sieht das wie folgt aus:

values = {
  [...]
  :invoice => id,
  :notify_url => notify_url,
  :currency_code => 'EUR',
  :charset => 'UTF-8'
}

line_items.each_with_index do |item, index|
  values.merge!({
    "amount_#{index+1}" => item.price,
    [...]
  })
end

In Zeile 6 steht die Anweisung dazu.

Als zweites muss man im PayPal Konto die Kodierung auf UTF-8 umstellt.

  1. Bei PayPal einloggen
  2. Unter „Mein Konto“ auf „Mein Profil“
  3. „Verkäufer/Händler (Kaufabwicklung, API, eBay…)“
  4. Unter „Weitere Verkaufstools“ >> „Sprachliche Kodierung von PayPal Buttons“
  5. „Weitere Optionen“ wählen
  6. Codierung auf „UTF-8“ stellen

Diese beiden Änderungen haben bei uns bereits die Lösung gebracht. Wichtig ist noch, dass auch Rails mit UTF-8 arbeiten muss. Das selbe gilt für die Datenbankverbindung.