見出し画像

【Paypal API】PHPでAccess Token(アクセストークン)を取得してみる

下準備

PaypalAPIを利用するためには、いくつかの条件がありますので、そちらを先にクリアしてください。

⇒APIを統合する:https://developer.paypal.com/docs/payouts/standard/integrate-api/

↑の公式ドキュメントによると、これら3つの審査に通過する必要があります。

※私の場合、すでにクリア済みでしたので、詳細の手順は省略させていただきます。


クライアントIDとシークレットキーを生成する

ペイパルのAPIを利用するためには、クライアントIDとシークレットキーが必要になります。
そのため、それらを発行していきましょう。
※下記画像は、公式ドキュメントを日本語化して抜粋したものです。

本稿でもこのドキュメントにある手順で進めていきます。


まず、こちらにアクセスします。

https://www.paypal.com/us/smarthelp/article/how-do-i-get-an-access-token-ts2128

「Get API Credensials」を押します。


「My Apps & Credensials」>「Live(*1)」>「Create App」の順に選択します。

*1)Liveとは、本番環境という意味です。お試しで使い場合は、「Sandbox」を選択しましょう。私はLiveにしました。


次に、アプリ名を設定します。

日本語でもいいと思いますが、こういったAPI関連は英語が基本ですので、予期しない不具合を防ぐ意味でも、英数字で記入しましょう。

その後「Create App」ボタンを押します。


すると下記のような画面に遷移します。この画面で「Client ID」と「Secret」を得ることができます。

※Secretが表示されていない場合は「Secret:Show」リンクを押して表示させましょう。

これで、PaypalAPIアクセスに必要なキーを生成することができました。
ひとまず、お疲れ様でした。


PHPでアクセストークン取得APIに、リクエストを出してみる

下記ソースでリクエストに成功しました。

パターン①

<?php

$POST_DATA = array(
    'grant_type' => 'client_credentials'
);

$headers = array(
    "HTTP/1.0",
    "Accept: application/json;q=0.9,*/*;q=0.8",
    "Accept-Language:en_US",
    "User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:26.0) Gecko/20100101 Firefox/26.0"
    );

$curl=curl_init("https://api.paypal.com/v1/oauth2/token");
curl_setopt($curl,CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($POST_DATA));
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, FALSE); 
curl_setopt($curl,CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl,CURLOPT_COOKIEJAR,      'cookie');
curl_setopt($curl,CURLOPT_COOKIEFILE,     'tmp');
curl_setopt($curl,CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($curl, CURLOPT_USERPWD, 'CLIENT_ID');//ここを書き換えてください。
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

$output= curl_exec($curl);

echo $output;

結果

{"scope":"https://api.paypal.com/v1/payments/.* https://uri.paypal.com/services/vault/payment-tokens/read openid Braintree:Vault https://uri.paypal.com/services/vault/payment-tokens/readwrite https://api.paypal.com/v1/vault/credit-card/.* https://uri.paypal.com/services/subscriptions https://api.paypal.com/v1/vault/credit-card","access_token":"XXXXXXXXXX--KIQ","token_type":"Bearer","app_id":"APP-XXXXXXXXXX","expires_in":32400,"nonce":"2022-03-30T13:16:35ZBrhmwUAh7RhQ--CAT9XZe3xqDfD-8kN0pUMYnB2uuyA"}

JSONの中にある「"access_token":"XXXXXXXXXX--KIQ"」が私のアクセストークンになります。


パターン②

<?php
//Sandbox
$PAYPAL_CLIENT_ID='AU5KGXP0mYo3T1sm03FU2cBLld_dzmoZted31D5f6YLJ2VEUkZ4s8RBjz-icfOA5gEwVJo102Uvn2q1L';
$PAYPAL_SECRET='EPGFDRyDWEf1fmYmfsEDw6OGsWKel9apfYeIaqM7mZCzQUlKIUZfeqEJFN-zcPEO5dtWFuMcNfkb2oY3';
$url = 'sandbox.';
//Live
$PAYPAL_CLIENT_ID='XXXXXXXXXXXXXXX';
$PAYPAL_SECRET='ZZZZZZZZZZZZZZ';
$url = '';


$curl = curl_init();
    curl_setopt_array($curl, array(
    CURLOPT_URL => "https://api." .$url  . "paypal.com/v1/oauth2/token",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_USERPWD => $PAYPAL_CLIENT_ID.":".$PAYPAL_SECRET,
    CURLOPT_POSTFIELDS => "grant_type=client_credentials",
    CURLOPT_HTTPHEADER => array(
    "Accept: application/json",
    "Accept-Language: en_US"
    ),
    ));

    $result= curl_exec($curl);
    $array=json_decode($result, true); 

var_dump($array);


結果

array(6) {
  ["scope"]=>
  string(840) "https://uri.paypal.com/services/invoicing https://uri.paypal.com/services/vault/payment-tokens/read https://uri.paypal.com/services/disputes/read-buyer https://uri.paypal.com/services/payments/realtimepayment https://uri.paypal.com/services/disputes/update-seller https://uri.paypal.com/services/payments/payment/authcapture openid https://uri.paypal.com/services/disputes/read-seller Braintree:Vault https://uri.paypal.com/services/payments/refund https://api.paypal.com/v1/vault/credit-card https://api.paypal.com/v1/payments/.* https://uri.paypal.com/payments/payouts https://uri.paypal.com/services/vault/payment-tokens/readwrite https://api.paypal.com/v1/vault/credit-card/.* https://uri.paypal.com/services/shipping/trackers/readwrite https://uri.paypal.com/services/subscriptions https://uri.paypal.com/services/applications/webhooks"
  ["access_token"]=>
  string(97) "AAAAAAAAAAA"
  ["token_type"]=>
  string(6) "Bearer"
  ["app_id"]=>
  string(21) "APP-0000000000000"
  ["expires_in"]=>
  int(32400)
  ["nonce"]=>
  string(63) "2022-03-30T13:16:16ZXMfZCTa5ebE9ZWhVjpXBJIusmFFYC6FsfqaHNI9v_KE"
}


注意事項
SandboxとLiveとでは、エンドポイントが異なりますので、注意してください。
Sandbox:https://api.sandbox.paypal.com
Livehttps://api.paypal.com

Paypal: Client Authentication Failed


無事にPHPからのリクエストを出すことができました。

PaypalAPIにリクエストを送信するフォーマットは上記のプログラムを使えば、応用できますので、PayoutsAPIなどいろんなAPIを使ってみてください。

お疲れ様でした。


参考


この記事が気に入ったらサポートをしてみませんか?