Business::PayPal::API::ExpressCheckoutで住所とか氏名とかの日本語が正しく送れない理由
- 2011.12.12
- PayPal perl
- Business::PayPal::API, PayPal, perl, SOAP::Lite
PerlでPayPalのExpressCheckoutを実装するのにBusiness::PayPal::APIを使っているのだけれど、日本語(2byte文字)がうまく送信できない。
UTF-8で送ろうが、フラグ付きにしようが、だ。
散々悩んだ挙句、原因はSOAP::Liteが勝手にbase64エンコードするからだと判明。
Business::PayPal::APIは内部でSOAP::Liteを使用していて、Asciiだとそのままなのだけれど、それ以外はbase64にエンコードする仕様の様子。
前々から、例えば、OrderDescription に日本語を使うと上手くいかないと思っていたのだけれど、、、。
仕方がないから Business::PayPal::API::ExpressCheckoutをカスタマイズする。
/usr/lib/perl5/site_perl/5.8.8/Business/PayPal/API/ExpressCheckout.pm
## add all the other fields
for my $field ( keys %types ) {
next unless defined $args{$field};
if( $field eq 'MaxAmount' ) {
push @secrd, SOAP::Data->name( $field => $args{$field} )->type( $types{$field} )
->attr( {currencyID => $currencyID, xmlns => $self->C_xmlns_ebay} );
}
## 追記ココから
elsif($field eq 'Address'){
my @addr;
my $hash = $args{$field};
for my $f ( keys %$hash) {
push @addr, SOAP::Data->name( $f )->type(string => $args{$field}{$f} );
}
my $obj = SOAP::Data->name( $field => \SOAP::Data->value( @addr ));
push @secrd,$obj;
}
## 追記ココまで
else {
push @secrd, SOAP::Data->name( $field => $args{$field} )->type( $types{$field} );
}
}
SOAPなんて使ってたらダメだね...
-
前の記事
MojoliciousアプリをCGIとして動作させる時は、静的ファイルの扱いに注意が必要 2011.11.28
-
次の記事
MAMP(Apache+MySQL)を使ってローカルでらくらくperl開発 2011.12.15