PayPalのcustom変数

お客様から「どうしてもPayPalに接続することができない」とのご報告をいただきました。
当方で動作検証しても、問題なく動作するし、はて? といろいろ試したところ、
特定の氏名を入力した場合に限り、PayPalに接続できないことがわかりました。
(つまり特定のお名前のお客様は、PayPalが利用できていなかったのです)
氏名は日本語で入力しているのだから、日本語の文字化けだろうと当たりをつけたのですが、
途中経過を追っても日本語は正しく扱われていました。

原因追及のため総当たり式でパラメータを確認したところ、
どうやら"custom"という変数を削除すると問題を回避できることを見出しました。

以下、ちょっと内部的な話ですが、同様の問題で悩んでいる方のために解説します。

まず前提として、日本語コードは UTF-8 で統一するのが、トラブルを起こしにくいようです。
Shift_JISコードを用いると、氏名、商品名などが文字化けして、うまく行かないことがありました。
次に、現代経済学の直観的方法では、CGIパラメータの暗号化を行っています。
暗号化を行うとサイトの安全性は高まりますが、1つ間違うと PayPalが全く解読できない、という事態に陥ります。
今回お客様から頂いたご報告は、この「暗号が全く解読できない」といった状況でした。


※以下の問題、最終的にはC言語を用いてOpenSSLのプログラムを作成することで解決しました。
※現在のところ、日本語に対応した暗号化はプログラムを作り込まないと難しいようです(7/2追記)


そして、解決方法なのですが、CGIパラメータの中から"custom"変数を取り除いたところ、
うまく PayPal側で暗号解読ができました。
この"custom"変数とは、文字通り「カスタム」のことで、お客様の目に触れない情報を自由に付けることができる変数です。
PayPalの説明書には
「顧客には提示されることのない、オプションのパススルー変数。在庫のトラッキングに使用可能」
とあります。
なぜ、この変数を除くと暗号化が上手く行くのか?
詳細は未だにわかりません。(解読側がPayPal内部にあるので)
日本語との組み合わせで問題が生じているので、日本語特有の現象なのかもしれません。



今回の現代経済学の直観的方法では、"custom"変数を重要な目的に使用していなかったので、
省くことによって問題解決できました。
しかし、ショップによっては"custom"変数に重要な情報を記入していることもあろうかと思います。
もしそうなったら、解決は非常に困難でしょう。
恐らく完全解決する方法は、「日本語を全く入力せず、英語かローマ字にする」ことでしょうか。
現状の PayPalには、まだまだ日本語と相性の悪い部分があるようです。