文字コードの違うサイト間のPOST送信

"EC-CUBE"にクレジット決済サービスの"クロネコペイメント"を組み込む際に、"EC-CUBE"の文字コードがUTF-8に対して、決済情報の受け手である"クロネコペイメント"がShift-JISのため文字化けが生じてしまった。

"クロネコペイメント"は宅急便の「ヤマト運輸」のグループ会社が提供するオンライン決済サービスである。

商品の配送は「ヤマト運輸」に限られてしまうが、基本料金無しで購入時の手数料だけでクレジットやコンビニ・電子マネー決済・ネットバンクでの決済に対応できるので購入者の支払いに幅ができ売上げにも影響してくる。

さて、この"クロネコペイメント"を実装するために仕様書が用意されているが、自分のサイト(ここではEC-CUBE)から決済システムにデータを送信する際にFormタグを利用したPOST送信となるのだが、"クロネコペイメント"側がShift-JISにしか対応していないので文字化けを起こして正常に決済できなくなってしまう。

受け手がShift-JISなら送信時にShift-JISにエンコードしてみても、送信するベースのHTMLがUTF-8だと余計に文字化けをして解決しない。

そこで調べてみるとJavaScriptを利用することでPOST時にエンコードしてくれることがわかった。

下記にサンプルソースを記述する。


<form action="クロネコペイメント送信先" method="post" target="_blank" accept-charset="Shift_JIS">
<input type="button" value="支払い手続きへ" onClick="org=document.charset; document.charset='Shift-JIS'; document.UserForm.submit(); document.charset=org;">
</form>



今回はUTF-8からShift-JISなので「document.charset='Shift-JIS'」となっているが、送信先の文字コードがUTF-8やEUCでもこのパラメータを変えると対応できるらしい。

ただ、JavaScriptなのでブラウザに依存する問題、またはJavaScriptを手動で無効にしている場合は機能しないので注意が必要だ。

そもそも"クロネコペイメント"側でUTF-8に対応してくれれば一番なのだが・・・。

"文字コードの違うサイト間のPOST送信" へのコメントを書く

お名前
メールアドレス
ホームページアドレス
コメント