Tag: 決済



2010 3月30日

Perlモジュール Business::PayPal::API

PayPalのAPIを使う時は Business::PayPal::API というモジュールが便利。

先日のエントリー PayPal利用時の決済フローを考える でLandingPageオプションの事を書いたのですが、Business::PayPal::API で実装するとそのままでは利用出来ないので、Business::PayPal::API::ExpressCheckout のソースを変更する必要があります。

PayPalの英語版APIの解説書(PDF)にはLandingPageの記載が無いようでしたので日本独自の仕様なのでしょうか??変更方法は簡単です。
パスは自分の環境ですと
/usr/lib/perl5/site_perl/5.8.5/Business/PayPal/API/ExpressCheckout.pm でした。

変更方法

Business::PayPal::API::ExpressCheckoutの21行目付近に、

my %types = ( Token                     => 'ebl:ExpressCheckoutTokenType',
		  OrderTotal                => 'cc:BasicAmountType',
		  currencyID                => '',
		  MaxAmount                 => 'cc:BasicAmountType',
		  OrderDescription          => 'xs:string',
		  Custom                    => 'xs:string',
		  InvoiceID                 => 'xs:string',
		  ReturnURL                 => 'xs:string',
		  CancelURL                 => 'xs:string',
		  Address                   => 'ebl:AddressType',
		  ReqConfirmShipping        => 'xs:string',
		  NoShipping                => 'xs:string',
		  AddressOverride           => 'xs:string',
		  LocaleCode                => 'xs:string',
		  PageStyle                 => 'xs:string',
		  'cpp-header-image'        => 'xs:string',
		  'cpp-header-border-color' => 'xs:string',
		  'cpp-header-back-color'   => 'xs:string',
		  'cpp-payflow-color'       => 'xs:string',
		  PaymentAction             => '',
		  BuyerEmail                => 'ebl:EmailAddressType' );

というハッシュの定義があるのでそこに1項目追加するだけです。
以下の様に追記します。

my %types = ( Token                     => 'ebl:ExpressCheckoutTokenType',
		  OrderTotal                => 'cc:BasicAmountType',
		  currencyID                => '',
		  MaxAmount                 => 'cc:BasicAmountType',
		  OrderDescription          => 'xs:string',
		  Custom                    => 'xs:string',
		  InvoiceID                 => 'xs:string',
		  ReturnURL                 => 'xs:string',
		  CancelURL                 => 'xs:string',
		  Address                   => 'ebl:AddressType',
		  ReqConfirmShipping        => 'xs:string',
		  NoShipping                => 'xs:string',
		  AddressOverride           => 'xs:string',
		  LocaleCode                => 'xs:string',
		  PageStyle                 => 'xs:string',
		  'cpp-header-image'        => 'xs:string',
		  'cpp-header-border-color' => 'xs:string',
		  'cpp-header-back-color'   => 'xs:string',
		  'cpp-payflow-color'       => 'xs:string',
		  PaymentAction             => '',
		  BuyerEmail                => 'ebl:EmailAddressType',
		  LandingPage               => '' );

これでLandingPageをBillingにした際にクレジットカード情報入力フォームが最初に表示される様になります。







2009 12月16日

IPN(即時支払い通知)のシステム構築

以前作ったsandboxでのテスト環境を使って、別の事業を構築する為のテストを行ったらエラーに悩まされた。

IPNで通知される状態が

payment_status=Pending
pending_reason=paymentreview

となってしまう。悩んだあげく、受取人のアカウント設定がおかしいのに気付く。
前にいろいろいじったアカウントを受取人に設定したせいかも。
とりあえず変更してみる。

主要通貨を変更

  1. Profile -> Financial InformationのCurrency Balances から
  2. セレクトボックス(Select new currency)から Japanese Yen を選択し、Add Currencyボタンで追加する
  3. 追加された一覧の Japanese Yen のラジオボタンと選択し、Make Primaryボタンを押す。

ウェブ ペイメントの設定

Selling Preferences -> Website Payment Preferences から行う。

各項目は以下の通り。

Auto Return for Website Payments

Auto Return: Off
Return URL: 無し
自動復帰はフォームパラメーターで渡せるのでOff。
事業が1つしか無い場合を除き自動復帰URLをケースによって変えたい場合があるので。

Payment Data Transfer (optional)

Payment Data Transfer: Off
これもフォームで渡せるので。

Encrypted Website Payments

Block Non-encrypted Website Payment: Off
フォームパラメータの暗号化(SSLではない)されていない場合も受け取るようにする。

PayPal Account Optional

PayPal Account Optional: On
これが Off だとPayPalアカウントを持っていないと決済出来ない。
持っていない場合、PayPalへの登録が必須となってしまう。

Contact Telephone Number

Contact Telephone: Off

Express Checkout Settings

Support giropay and bank transfer payments: No

とりあえず設定はしてみたものの、IPNで返されるパラメーターは
payment_status=Pending
pending_reason=paymentreview
のままなので、テストではPendingの場合はエラーとしないで(当然 payment_statusもCompletedにならない)処理するしかないか??