<?php
namespace Srmklive\PayPal\Traits;
trait PayPalAPI
{
use PayPalAPI\Trackers;
use PayPalAPI\CatalogProducts;
use PayPalAPI\Disputes;
use PayPalAPI\DisputesActions;
use PayPalAPI\Identity;
use PayPalAPI\Invoices;
use PayPalAPI\InvoicesSearch;
use PayPalAPI\InvoicesTemplates;
use PayPalAPI\Orders;
use PayPalAPI\PartnerReferrals;
use PayPalAPI\PaymentExperienceWebProfiles;
use PayPalAPI\PaymentMethodsTokens;
use PayPalAPI\PaymentAuthorizations;
use PayPalAPI\PaymentCaptures;
use PayPalAPI\PaymentRefunds;
use PayPalAPI\Payouts;
use PayPalAPI\ReferencedPayouts;
use PayPalAPI\BillingPlans;
use PayPalAPI\Subscriptions;
use PayPalAPI\Reporting;
use PayPalAPI\WebHooks;
use PayPalAPI\WebHooksVerification;
use PayPalAPI\WebHooksEvents;
/**
* Login through PayPal API to get access token.
*
* @throws \Throwable
*
* @return array|\Psr\Http\Message\StreamInterface|string
*
* @see https://developer.paypal.com/docs/api/get-an-access-token-curl/
* @see https://developer.paypal.com/docs/api/get-an-access-token-postman/
*/
public function getAccessToken()
{
$this->apiEndPoint = 'v1/oauth2/token';
$this->options['auth'] = [$this->config['client_id'], $this->config['client_secret']];
$this->options[$this->httpBodyParam] = [
'grant_type' => 'client_credentials',
];
$response = $this->doPayPalRequest();
unset($this->options['auth']);
unset($this->options[$this->httpBodyParam]);
if (isset($response['access_token'])) {
$this->setAccessToken($response);
}
return $response;
}
/**
* Set PayPal Rest API access token.
*
* @param array $response
*
* @return void
*/
public function setAccessToken(array $response)
{
$this->access_token = $response['access_token'];
$this->setPayPalAppId($response);
$this->setRequestHeader('Authorization', "{$response['token_type']} {$this->access_token}");
}
/**
* Set PayPal App ID.
*
* @param array $response
*
* @return void
*/
private function setPayPalAppId(array $response)
{
$app_id = empty($response['app_id']) ? $this->config['app_id'] : $response['app_id'];
$this->config['app_id'] = $app_id;
}
/**
* Set records per page for list resources API calls.
*
* @param int $size
*
* @return \Srmklive\PayPal\Services\PayPal
*/
public function setPageSize(int $size): \Srmklive\PayPal\Services\PayPal
{
$this->page_size = $size;
return $this;
}
/**
* Set the current page for list resources API calls.
*
* @param int $size
*
* @return \Srmklive\PayPal\Services\PayPal
*/
public function setCurrentPage(int $page): \Srmklive\PayPal\Services\PayPal
{
$this->current_page = $page;
return $this;
}
/**
* Toggle whether totals for list resources are returned after every API call.
*
* @param bool $totals
*
* @return \Srmklive\PayPal\Services\PayPal
*/
public function showTotals(bool $totals): \Srmklive\PayPal\Services\PayPal
{
$this->show_totals = var_export($totals, true);
return $this;
}
}
Get access token to initiates payment transaction.
generate-token
| Parameter | Type | Comments |
|---|---|---|
| client_id | string | Enter merchant API client/primary key |
| secret_id | string | Enter merchant API secret key |
| env | string | Enter merchant API environment |
| merchant_id | string | Enter merchant API merchant id |
Request Example (guzzle)
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', $base_url. 'v1/generate-token', [
'headers' => [
'accept' => 'application/json',
'content-type' => 'application/json',
],
'form_params' => [
'client_id' => '$client_id',
'secret_id' => 'secret_id',
'env' => 'env',
'merchant_id' => 'merchant_id',
],
]);
echo $response->getBody();
**Response: SUCCESS (200 OK)**
{
"message": {
"success": [
"Successfully token is generated"
]
},
"data": {
"token":"eyJpdiI6InpkczhjTjhQdVhUL2lKQ0pSUUx6aUE9PSIsInZhbHVlIjoiVGVBTVBDTXltbjNZcEIvdEJveGpTSno3TU5NRUtnVkhCZ1pHTFNCUnZGQ2UxMnYxN202cEE1YVRDTEFsc0ZERExoTjdtL0dTL2xoU3QzeUJJOExiMUx5T0w1L0llUXhTUkU1cWVLWEdEbEplb0dKNXcwbTNRM0VxdkUwYzZuNFdtNkhMQ0pRZysyNWkvdzBxSlBoSVBSOGFTekNnR2RXNHVtcG9lMGZOTmNCcm1hR3c5Sk9KTnB4Y3ltZDl6cm90MThrR21Ca3B1azc3bXRiQ0J6SW96UVo1elNkU1ZqeE05bTcwWGp1MEUxWlJFdnNWTmpSbnVpeW92b2U4dXZkUGgyb1VmK0luaGdyaFlsVTZlcVpVRnZlTG1DeFF6Ykk2T2h6Z3JzbnIyNHpNdHowSE5JdDR0Y0pZT20zUm1XYW8iLCJtYWMiOiJlY2M4NGE1OGUzYzkzYzk0YzljNmVmNjE0YWI0ZDIwOGI3NDQ2YWEyY2ZhNzc0NzE4ZmY1ZmYyMz
IyZmQzNDY1IiwidGFnIjoiIn0=",
},
"type": "success"
}
**Response: ERROR (400 FAILED)**
{
"message": {
"error": [
"Invalid credentials."
]
},
"data": null,
"type": "error"
}