【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"
}
無事にPHPからのリクエストを出すことができました。
PaypalAPIにリクエストを送信するフォーマットは上記のプログラムを使えば、応用できますので、PayoutsAPIなどいろんなAPIを使ってみてください。
お疲れ様でした。
参考
【Paypal公式】Integrate API
【Paypal公式】Get API credentials
【Paypal公式】PayPal Developer
【Paypal公式】My Apps & Credentials
Laravel Paypal Payout. How to make it complete ? It returns json response
PHP cURLの色々な使い方(curlの-hオプションをPHPで再現する方法)
PHP:curlオプションの指定方法(-uオプションをPHPで再現する方法)