2011年 12月 12

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なんて使ってたらダメだね…

More from my site

  • PerlでPayPal エクスプレスチェックアウトAPIのLandingPageオプションを使うPerlでPayPal エクスプレスチェックアウトAPIのLandingPageオプションを使う Perlモジュール Business::PayPal::API PayPalのAPIを使う時は Business::PayPal::API というモジュールが便利。 先日のエントリー PayPal利用時の決済フローを考える でLandingPageオプションの事を書いたのですが、Business::PayPal::API […]
  • EC-CUBE PayPal決済モジュールのチェック機構を強化するEC-CUBE PayPal決済モジュールのチェック機構を強化する EC-CUBE PayPal決済モジュールの注意点の続き PayPal決済モジュールのチェック機構を強化 とりあえずのコードを書いてみた。 なれないPHPだし、PostgreSQLだしで、いいのか悪いのか判断できません。 基本的にEC-CUBE本体から拾ったコードを再利用しただけです。 コードはEC-CUBE 開発コミュニティサイト - […]
  • PayPalウェブペイメントスタンダードもリニューアルしたんだねPayPalウェブペイメントスタンダードもリニューアルしたんだね 随分前に、PayPalのsandboxで見た事があったんだけど、いつの間にかリリースしていた決済画面。 ウェブペイメントスタンダードの欠点だったPayPal会員以外がクレジットカード決済するのに分かりにくい・・・っていうのが改善された感じ。 ウェブサイト自体も日本語化がかなり進んでいるみたいだし、日本でも本格的に活動していきそうな感じがする。 実際かなり便利 […]
  • PayPal利用時の決済フローを考えるPayPal利用時の決済フローを考える ウェブ ペイメント スタンダードを利用した場合 PayPalで決済する際、ウェブ ペイメント […]
  • EC-CUBE PayPal決済モジュールの注意点EC-CUBE PayPal決済モジュールの注意点 PayPal決済モジュールはチェックが甘い? PayPal決済モジュールは支払先のメールアドレス(receiver_email)の正当性しかチェックしていない。 支払われた金額のチェックを行っていないため、(ポストされる内容を変更など)不正な金額を支払ったとしても入金済みにしてしまう。 PayPalから届く入金確認メールの金額と違っていないか確認する必要がある。 […]
  • PayPal sandboxでの環境設定PayPal sandboxでの環境設定 IPN(即時支払い通知)のシステム構築 以前作ったsandboxでのテスト環境を使って、別の事業を構築する為のテストを行ったらエラーに悩まされた。 IPNで通知される状態が payment_status=Pending pending_reason=paymentreview となってしまう。悩んだあげく、受取人のアカウント設定がおかしいのに気付く。 前にいろ […]

Filed under: PayPal,perl

Trackback Uri



コメントする