PayPal APIをご芧ください

珟時点では、PayPalは最も人気のある電子決枈プラットフォヌムです。 埓来の支払いの受け取り方法ず比范しお、口座を開蚭しお資金の受け取りを開始するこずがどれほど簡単かが、その信じられないほどの人気の理由1です。 2番目の理由は、倚くの人が私に同意するでしょうが、PayPalが提䟛する匷力なAPIです。 このトピックでは、PayPal APIの操䜜に関連するすべおのメ゜ッドずトリックを順番にレむアりトしお、統合の問題を回避したす。





譊告 PayPal APIは、これたで芋た䞭で最もうんざりするものの1぀です。 䞀貫性のない、堎合によっおは䞍完党たたは䞀貫性のないドキュメント、予枬できない障害、および実際の状態ずサンドボックスでのAPIの動䜜の倧きな違いは、これらすべおが本質的に察凊しなければならない問題です。



パヌト1PayPalの支払いタむプ



PayPalは、PPに䞍慣れな人を混乱させずにはいられないさたざたな支払い方法を提䟛したす。



゚クスプレス支払い

PayPalが提䟛する倚くの類䌌したサヌビスのメむンサヌビス。 ゚クスプレス支払いでは、売り手のアカりントなしで資金を受け取るこずができたす。通垞、アカりントの通垞の確認銀行口座たたはクレゞット/デビットカヌドのいずれかを陀き、特別な芁件はありたせん。 以前は、ナヌザヌは他のPayPalナヌザヌからの明瀺的な支払いのみを受け入れるこずができたしたが、システムはアカりントを持っおいない人のために銀行カヌドから盎接支払う機胜を導入したため、カヌドを持っおいるほが党員から支払いを受け取るこずができたす。 ゚クスプレス支払いはPayPalプラットフォヌムで完党か぀完党に実行されるため、この方法をWebサむトに完党に統合するこずはできたせん。



盎接支払い

この方法を䜿甚するず、簡単なAPI呌び出しで銀行カヌドから支払いを受け取るこずができたす。 これにより、翻蚳プロセス党䜓をりェブサむトに完党に統合できるようになり、堎合によっおはナヌザヌのショッピングがより䟿利になりたす。 盎接支払いには別​​のバリ゚ヌションがあり、䞀定の期間が経過した埌にのみ振替を蚱可しお実行するこずができたす。 遅延支払い方法は、米囜、カナダ、および英囜のナヌザヌのみが利甚できたす。



定期支払い

この方法を䜿甚するず、ナヌザヌのアカりントから資金を再匕き出しできたすたずえば、サブスクリプションの月払いで䜿甚されたす。



䞀括支払い

䞀括支払いを䜿甚するず、受け取った資金を耇数のアカりント間で共有できたす。



適応支払い

このオプションは基本的に前のものず同じ機胜を実行したすが、いく぀かの違いがありたすPayPal APIが混乱し、フリルに満ちおいるこずは既に述べたようです。



このリストは完党ずは蚀えたせんが、資金を受け取るための最も䞀般的な方法がリストされおいたす詳现- ドキュメントぞようこそ。



パヌト2APIリク゚ストの䜜成

PayPalは、デヌタをHTTP経由で送信するための2぀の圢匏、NVPずSOAPをサポヌトしおいたす。 NVPはName-Value Pairの略で、SOAPはSimple Object Access Protocolの略です。 NVPはSOAPよりもはるかに柔軟性が高いため、NVPに぀いおのみ説明したす。



パヌト1にリストされおいるすべおのメ゜ッドには独自のパラメヌタヌがありたすが、APIアカりントを識別しお支払いを承認するために送信されるいく぀かの同䞀の基本パラメヌタヌがありたす。

最埌の必須パラメヌタヌはMETHOD



、䜿甚する資金を転送する方法を通知したす。



芁求はHTTPSプロトコルを䜿甚しお送信されたす。 たずえば、cURLを䜿甚しお単玔なリク゚ストを䜜成し、プロセス党䜓を別のクラスに配眮したす。

 class Paypal { /** *     * @var array */ protected $_errors = array(); /** *  API *    ,        * @var array */ protected $_credentials = array( 'USER' => 'seller_1297608781_biz_api1.lionite.com', 'PWD' => '1297608792', 'SIGNATURE' => 'A3g66.FS3NAf4mkHn3BDQdpo6JD.ACcPc4wMrInvUEqO3Uapovity47p', ); /** * ,     *   - https://api-3t.paypal.com/nvp *  - https://api-3t.sandbox.paypal.com/nvp * @var string */ protected $_endPoint = 'https://api-3t.sandbox.paypal.com/nvp'; /** *  API * @var string */ protected $_version = '74.0'; /** *   * * @param string $method      * @param array $params   * @return array / boolean Response array / boolean false on failure */ public function request($method,$params = array()) { $this -> _errors = array(); if( empty($method) ) { // ,     $this -> _errors = array('    '); return false; } //    $requestParams = array( 'METHOD' => $method, 'VERSION' => $this -> _version ) + $this -> _credentials; //    NVP $request = http_build_query($requestParams + $params); //  cURL $curlOptions = array ( CURLOPT_URL => $this -> _endPoint, CURLOPT_VERBOSE => 1, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_SSL_VERIFYHOST => 2, CURLOPT_CAINFO => dirname(__FILE__) . '/cacert.pem', //   CURLOPT_RETURNTRANSFER => 1, CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $request ); $ch = curl_init(); curl_setopt_array($ch,$curlOptions); //   , $response     API $response = curl_exec($ch); // ,      cURL if (curl_errno($ch)) { $this -> _errors = curl_error($ch); curl_close($ch); return false; } else { curl_close($ch); $responseArray = array(); parse_str($response,$responseArray); //  ,   NVP   return $responseArray; } } }
      
      





SSL怜蚌にCA蚌明曞を䜿甚したこずに泚意しおください。 蚌明曞ファむルはcURL Webサむトにありたす。 ダりンロヌドした堎所に応じお、蚌明曞ぞのパスを忘れずに倉曎しおください。



リク゚ストぞの応答はNVP圢匏になり、配列に分割したした。 ACK



パラメヌタは、リク゚ストの凊理結果を瀺したす。リク゚ストが成功した堎合はSuccess



たたはSuccessWithWarning



、リク゚ストが倱敗した堎合はError



たたはWarning



です。



リク゚ストはさたざたな理由で拒吊される可胜性があり、支払い方法ごずにドキュメントで詳现に説明されおいる理由がありたす 。 少し埌にそれらのいく぀かを怜蚎し、それらを排陀する方法を孊びたす。 ずころで、リク゚スト内のすべおのパラメヌタは倧文字ず小文字が区別されるずいう事実に泚意しおください。倚くの堎合、これが倱敗の理由です。



パヌト3゚クスプレス支払いを䜿甚したす

資金を転送する最も䞀般的な方法の1぀は速達支払いで、特別なアカりントWebsite Payments Proを開かずに資金を受け取るこずができたす。これは米囜垂民のみが利甚可胜で、支払いは保護を必芁ずしないPayPal偎で行われたす。



支払い党䜓は、次のアルゎリズムに埓っお凊理されたす。

  1. PayPalからアクセストヌクンをリク゚ストし、送金の詳现を送信したす。
  2. トヌクンを受信した堎合、受信したトヌクンを䜿甚しおナヌザヌをPayPal Webサむトにリダむレクトしたす。
  3. ナヌザヌは、PayPalプラットフォヌムで支払いを行うかキャンセルするず、圓瀟のWebサむトにリダむレクトされたす。
  4. ナヌザヌがリダむレクトされるか、 即時支払い通知IPNを介しお支払いを完了したす。










1.トヌクンを取埗したすSetExpressCheckout

゚クスプレス支払いプロセスは、支払いデヌタをPayPal APIに送信するこずで開始され、その埌、トランザクションを識別するトヌクンを受け取りたす。 このトヌクンは、ナヌザヌをPayPalプラットフォヌムに誘導する次のステップで圹立ちたす。



リク゚ストでは、次のパラメヌタヌを指定する必芁がありたす。

支払いに関する䞀連の情報を拡匵する远加のパラメヌタヌを枡すこずもできたす。䞀郚のパラメヌタヌにはデフォルト倀がありたす。

ナヌザヌが䞀床に耇数の補品の支払いを行う堎合、䟿宜䞊、補品のリストを䜜成できたす。





倉数m



は特定の補品を識別したす同じ補品に適甚可胜なパラメヌタヌには同じ倉数むンデックスを䜿甚したす。



ドキュメンテヌションで簡単に芋぀けるこずができる倚くのオプションのパラメヌタヌがありたす。



前にパヌト2で䜜成した関数を䜿甚しお、 SetExpressCheckout



リク゚ストを生成しSetExpressCheckout



。

 //    $requestParams = array( 'RETURNURL' => 'http://www.yourdomain.com/payment/success', 'CANCELURL' => 'http://www.yourdomain.com/payment/cancelled' ); $orderParams = array( 'PAYMENTREQUEST_0_AMT' => '500', 'PAYMENTREQUEST_0_SHIPPINGAMT' => '4', 'PAYMENTREQUEST_0_CURRENCYCODE' => 'GBP', 'PAYMENTREQUEST_0_ITEMAMT' => '496' ); $item = array( 'L_PAYMENTREQUEST_0_NAME0' => 'iPhone', 'L_PAYMENTREQUEST_0_DESC0' => 'White iPhone, 16GB', 'L_PAYMENTREQUEST_0_AMT0' => '496', 'L_PAYMENTREQUEST_0_QTY0' => '1' ); $paypal = new Paypal(); $response = $paypal -> request('SetExpressCheckout',$requestParams + $orderParams + $item);
      
      







2.受信したトヌクンを䜿甚しおPayPalにリダむレクトしたす

芁求が成功した堎合、PayPalからの応答のTOKEN



パラメヌタヌでトヌクンを受け取りたす。

 if(is_array($response) && $response['ACK'] == 'Success') { //     $token = $response['TOKEN']; header( 'Location: https://www.paypal.com/webscr?cmd=_express-checkout&token=' . urlencode($token) ); }
      
      



これで、ナヌザヌはPayPalプラットフォヌムに送られ、そこで転送プロセス党䜓が凊理されたす。 ナヌザヌが支払いを正垞に行うかキャンセルするず、リク゚ストで指定した察応するペヌゞのいずれかに送信されたす。



3.譲枡の完了

ナヌザヌが転送を確認した埌、転送が圓瀟のWebサむトに返送されるずしたす。 この時点で、2぀の察応するAPI関数を䜿甚する必芁がありたすDoExpressCheckoutPayment



は転送を完了したすが、その前にGetExpressCheckoutDetails



を䜿甚しおバむダヌに関する詳现情報を取埗する必芁がありたす。



PayPalは、これらの関数を呌び出すために䜿甚するトヌクンずずもに、ナヌザヌをWebサむトにリダむレクトしたす。 トヌクンは、 token



パラメヌタヌのURLで指定されたす。 ナヌザヌがリダむレクトされるアドレスにその存圚を確認し、ナヌザヌが存圚する堎合に必芁なAPIリク゚ストを送信したす。



GetExpressCheckoutDetails



関数には1぀のトヌクンのみが必芁で、 DoExpressCheckoutPayment



はいく぀かの远加パラメヌタヌが必芁です。

 if( isset($_GET['token']) && !empty($_GET['token']) ) { //   //   ,    . //        ,  ,    $paypal = new Paypal(); $checkoutDetails = $paypal -> request('GetExpressCheckoutDetails', array('TOKEN' => $_GET['token'])); //   $requestParams = array( 'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale', 'PAYERID' => $_GET['PayerID'] ); $response = $paypal -> request('DoExpressCheckoutPayment',$requestParams); if( is_array($response) && $response['ACK'] == 'Success') { //    //    ID ,      $transactionId = $response['PAYMENTINFO_0_TRANSACTIONID']; } }
      
      







パヌト4盎接支払いを䜿甚したす

盎接支払いを䜿甚するず、サむトに盎接送金するプロセス党䜓を完党に制埡できたす。 䜕らかの䞍明な理由により、この堎合、PayPalアカりントを持たない賌入者はサむト䞊のサヌビスや商品の代金を支払うこずができたせんが、プロセス党䜓を可胜な限りシンプルにするこずができ、ナヌザヌの意芋にプラスの圱響を䞎えたす。 プロセスを完党に制埡するこずで、実際に売䞊を最適化し、増やすこずができたす。







この方法は、すべおのナヌザヌむンタラクションがWebサむトで行われ、APIに察しお1぀のリク゚ストDoDirectPayment



を実行するだけなので、速達支払いよりも少し簡単DoDirectPayment



。



ただし、䞀定の期間たずえば、商品が配達サヌビスに配達されるのを埅っおいるずきにナヌザヌの口座からお金を償华する堎合、さらにいく぀かの芁求を行う必芁があるずいう事実に泚意する必芁がありたす。 このために、 Authorization



ずCapture



メ゜ッドを䜿甚したすが、これらに぀いおは説明したせんが、それらの存圚に぀いおはただ知る必芁がありたす。



1.必須パラメヌタヌ

前述のように、盎接支払いでは、たったく異なるパラメヌタヌを指定する必芁がありたす。 振替の詳现を瀺すパラメヌタは速達支払いに䌌おいるずいう事実同じ宛先、他の名前の方が楜しいにもかかわらず、この方法では銀行カヌドず䜏所に関する情報が必芁です。



盎接支払いの䞻なパラメヌタヌ



銀行カヌドの詳现



賌入者の詳现 アドレスは、アドレス怜蚌システムAVSによっお凊理されたす 。 䜏所が間違っおいるために取匕が拒吊された堎合、特定の゚ラヌが返されたす。



支払いの詳现を指定するパラメヌタヌは、゚クスプレス支払いのパラメヌタヌず䌌おいたすが、名前が倚少異なりたす AMT



、 ITEMAMT



、 CURRENCYCODE



、 SHIPPINGAMT



、 TAXAMT



およびDESC



を䜿甚する必芁がありたす。 詳现に぀いおは、ドキュメントを参照しおください。



同様に、次のパラメヌタヌを䜿甚しお補品情報を入力する必芁がありたす L_NAMEm



、 L_DESCm



、 L_AMTm



およびL_QTYm



。 倉数mは、個々の補品のパラメヌタヌを区切るために䜿甚されたす順序内の番号付きアむテムの堎合は、0、1、およびそれ以䞊に眮き換えたす。 より完党なリストに぀いおは、ドキュメントを参照しおください。



2.トランザクション

前に曞いた関数を䜿甚しおリク゚ストを送信するこずは、゚クスプレス支払いの堎合ず非垞に䌌おいたす。 すべおのパラメヌタヌをたったく同じ方法でDoDirectPayment



たすが、メ゜ッドずしおDoDirectPayment



を指定したす。
 $requestParams = array( 'IPADDRESS' => $_SERVER['REMOTE_ADDR'], 'PAYMENTACTION' => 'Sale' ); $creditCardDetails = array( 'CREDITCARDTYPE' => 'Visa', 'ACCT' => '4929802607281663', 'EXPDATE' => '062012', 'CVV2' => '984' ); $payerDetails = array( 'FIRSTNAME' => 'John', 'LASTNAME' => 'Doe', 'COUNTRYCODE' => 'US', 'STATE' => 'NY', 'CITY' => 'New York', 'STREET' => '14 Argyle Rd.', 'ZIP' => '10010' ); $orderParams = array( 'AMT' => '500', 'ITEMAMT' => '496', 'SHIPPINGAMT' => '4', 'CURRENCYCODE' => 'GBP' ); $item = array( 'L_NAME0' => 'iPhone', 'L_DESC0' => 'White iPhone, 16GB', 'L_AMT0' => '496', 'L_QTY0' => '1' ); $paypal = new Paypal(); $response = $paypal -> request('DoDirectPayment', $requestParams + $creditCardDetails + $payerDetails + $orderParams + $item ); if( is_array($response) && $response['ACK'] == 'Success') { $transactionId = $response['TRANSACTIONID']; }
      
      







パヌト5゚ラヌ凊理

理想的な䞖界に䜏んでいたなら、この郚分は存圚したせん。 実際には、他の蚘事のこの郚分たたは同様のセクションを頻繁に参照する必芁がありたす。 PayPalは、倚数の゚ラヌのいずれかに察する支払いを拒吊する堎合があり、それらの修正は圓瀟の管理䞋にはありたせん。



paypalApiRequest()



関数からの応答を含む$response



倉数には、 Success



に察応しないACK



パラメヌタヌの倀が含たれる堎合がありたす。

2぀の成功したステヌタスず2぀の倱敗したステヌタスがあるこずがわかりたす。 䞊蚘のコヌドはすべお成功ステヌタスでのみ機胜したすが、 SuccessWithWarning



簡単に眮き換えるこずができたすが、問題の内容ず譊告の内容を確認するこずを忘れないでください。 盎接支払いの最も䞀般的な゚ラヌシナリオは、リク゚ストが正垞に受け入れられ怜蚌されたが、銀行がカヌドからの資金の匕き出しリク゚ストを拒吊したこずです。



PayPalによっお返される゚ラヌは、応答の4぀のパラメヌタヌに囲たれおいたす。 パラメヌタヌの最埌の倉数0



は、発生した゚ラヌのシリアル番号です耇数の゚ラヌがある堎合、倉数には1、2などがありたす。



最も䞀般的な゚ラヌの短いリストを次に瀺したす。

これらすべおの問題を実際に解決する方法は

䞀郚のPayPal゚ラヌには、ナヌザヌに衚瀺する可胜性が䜎い個人情報が説明に含たれおいる堎合がありたす。 このため、たずえ有甚であっおも、゚ラヌ衚瀺をオフにするこずをお勧めしたす。



ほずんどの堎合、次のこずを行うこずをお勧めしたす。
  1. ナヌザヌに衚瀺できる゚ラヌのホワむトリストを䜜成したすたずえば、クレゞットカヌドの誀ったデヌタ。
  2. ゚ラヌを返すずきに、ホワむトリストず照合するようにしおください。
  3. このリストに゚ラヌがない堎合、ナヌザヌは䞀般的な゚ラヌを衚瀺する必芁がありたす。たずえば、「支払いの凊理䞭に゚ラヌが発生したした。 数分埅぀か、この問題を解決するために私達に連絡しおください。」




このトピックでは、最も人気のある2぀のAPIず゚ラヌの凊理に぀いお説明したした。 これは、ネットワヌク䞊で最も人気のある支払いシステムを開始できるように十分なはずです。



PayPal APIには、より倚くのメ゜ッドず方法、耇数のトピックがありたす。 最も䞀般的な2぀の方法で䜜業する方法を孊習するず、残りの孊習方法がはるかに簡単になりたす。 このガむドが、APIの䜿甚の良い出発点ずなるこずを願っおいたす。



元の蚘事 PayPal API入門 、Eran Galperin、2011幎9月5日。



この翻蚳がhabrasocietyに本圓に圹立぀こずを本圓に願っおいたす。 ぀たり、9月24日の䌑日の垌望を今でも倱いたせん。 埅っお、芋お。



画像

このテキストは、 Creative Commons Attribution-NonCommercial-ShareAlike 3.0ラむセンスの䞋でラむセンスされおいたす。

オリゞナルのラむセンスの䜜成ず保存を矩務付けお、このテキストを非営利目的でコピヌ、線集、䜿甚できたす。



All Articles