diff --git a/docs/classes/BitPaySDK-Client.html b/docs/classes/BitPaySDK-Client.html index 79a5d4de..547e77c2 100644 --- a/docs/classes/BitPaySDK-Client.html +++ b/docs/classes/BitPaySDK-Client.html @@ -811,7 +811,7 @@

@@ -906,7 +906,7 @@

@@ -1001,7 +1001,7 @@

@@ -1085,7 +1085,7 @@

@@ -1166,7 +1166,7 @@

@@ -1246,7 +1246,7 @@

@@ -1326,7 +1326,7 @@

@@ -1428,7 +1428,7 @@

@@ -1530,7 +1530,7 @@

@@ -1611,7 +1611,7 @@

@@ -1758,7 +1758,7 @@

@@ -1766,7 +1766,7 @@

public - static createWithData(string $environment, string $privateKey, Tokens $tokens[, string|null $privateKeySecret = null ][, string|null $proxy = null ]) : Client + static createWithData(string $environment, string $privateKey, Tokens $tokens[, string|null $privateKeySecret = null ][, string|null $proxy = null ][, string|null $platformInfo = null ]) : Client
@@ -1819,6 +1819,15 @@

Parameters
http://********.com:3128

+ +
+ $platformInfo + : string|null + = null
+
+

Value for the X-BitPay-Platform header.

+
+
@@ -1869,7 +1878,7 @@

@@ -1877,7 +1886,7 @@

public - static createWithFile(string $configFilePath) : Client + static createWithFile(string $configFilePath[, string|null $platformInfo = null ]) : Client
@@ -1893,6 +1902,15 @@

Parameters

The path to the configuration file.

+ +
+ $platformInfo + : string|null + = null
+
+

Value for the X-BitPay-Platform header.

+
+
@@ -1935,7 +1953,7 @@

@@ -2023,7 +2041,7 @@

@@ -2125,7 +2143,7 @@

@@ -2227,7 +2245,7 @@

@@ -2309,7 +2327,7 @@

@@ -2407,7 +2425,7 @@

@@ -2496,7 +2514,7 @@

@@ -2599,7 +2617,7 @@

@@ -2703,7 +2721,7 @@

@@ -2833,7 +2851,7 @@

@@ -2939,7 +2957,7 @@

@@ -3015,7 +3033,7 @@

@@ -3100,7 +3118,7 @@

@@ -3185,7 +3203,7 @@

@@ -3288,7 +3306,7 @@

@@ -3418,7 +3436,7 @@

@@ -3488,7 +3506,7 @@

@@ -3576,7 +3594,7 @@

@@ -3664,7 +3682,7 @@

@@ -3740,7 +3758,7 @@

@@ -3824,7 +3842,7 @@

Client.php : - 1005 + 1008 @@ -3917,7 +3935,7 @@

@@ -4049,7 +4067,7 @@

@@ -4121,7 +4139,7 @@

@@ -4183,7 +4201,7 @@

@@ -4270,7 +4288,7 @@

@@ -4358,7 +4376,7 @@

@@ -4442,7 +4460,7 @@

Client.php : - 811 + 814 @@ -4530,7 +4548,7 @@

@@ -4610,7 +4628,7 @@

@@ -4694,7 +4712,7 @@

@@ -4782,7 +4800,7 @@

@@ -4875,7 +4893,7 @@

@@ -4995,7 +5013,7 @@

@@ -5088,7 +5106,7 @@

@@ -5177,7 +5195,7 @@

@@ -5266,7 +5284,7 @@

@@ -5309,7 +5327,7 @@

@@ -5352,7 +5370,7 @@

@@ -5395,7 +5413,7 @@

@@ -5438,7 +5456,7 @@

@@ -5481,7 +5499,7 @@

@@ -5524,7 +5542,7 @@

@@ -5567,7 +5585,7 @@

@@ -5610,7 +5628,7 @@

@@ -5653,7 +5671,7 @@

@@ -5716,7 +5734,7 @@

@@ -5755,7 +5773,7 @@

diff --git a/docs/classes/BitPaySDK-PosClient.html b/docs/classes/BitPaySDK-PosClient.html index afc0dba3..bb4ec7d2 100644 --- a/docs/classes/BitPaySDK-PosClient.html +++ b/docs/classes/BitPaySDK-PosClient.html @@ -215,6 +215,13 @@

 : string +
+ $platformInfo + +  : string +
+
Value for the X-BitPay-Platform-Info header
+
$restCli @@ -735,6 +742,43 @@

+ +
+

+ $platformInfo + + + + +

+ + +

Value for the X-BitPay-Platform-Info header

+ + + + protected + string + $platformInfo + + + + + + + +
@@ -825,7 +869,7 @@

@@ -902,7 +946,7 @@

@@ -910,7 +954,7 @@

public - __construct(mixed $token[, string|null $environment = null ]) : mixed + __construct(string $token[, string|null $environment = null ][, string|null $platformInfo = null ]) : mixed
@@ -920,10 +964,10 @@

Parameters
$token - : mixed + : string
-

string The token generated on the BitPay account.

+

The token generated on the BitPay account.

@@ -932,7 +976,16 @@
Parameters
: string|null = null

-

string The target environment [Default: Production].

+

The target environment [Default: Production].

+
+ +
+
+ $platformInfo + : string|null + = null
+
+

Value for the X-BitPay-Platform-Info header.

@@ -973,7 +1026,7 @@

@@ -1068,7 +1121,7 @@

@@ -1163,7 +1216,7 @@

@@ -1247,7 +1300,7 @@

@@ -1328,7 +1381,7 @@

@@ -1408,7 +1461,7 @@

@@ -1488,7 +1541,7 @@

@@ -1590,7 +1643,7 @@

@@ -1692,7 +1745,7 @@

@@ -1773,7 +1826,7 @@

@@ -1920,7 +1973,7 @@

@@ -1928,7 +1981,7 @@

public - static createWithData(string $environment, string $privateKey, Tokens $tokens[, string|null $privateKeySecret = null ][, string|null $proxy = null ]) : Client + static createWithData(string $environment, string $privateKey, Tokens $tokens[, string|null $privateKeySecret = null ][, string|null $proxy = null ][, string|null $platformInfo = null ]) : Client
@@ -1981,6 +2034,15 @@

Parameters
http://********.com:3128

+ +
+ $platformInfo + : string|null + = null
+
+

Value for the X-BitPay-Platform header.

+
+
@@ -2031,7 +2093,7 @@

@@ -2039,7 +2101,7 @@

public - static createWithFile(string $configFilePath) : Client + static createWithFile(string $configFilePath[, string|null $platformInfo = null ]) : Client
@@ -2055,6 +2117,15 @@

Parameters

The path to the configuration file.

+ +
+ $platformInfo + : string|null + = null
+
+

Value for the X-BitPay-Platform header.

+
+
@@ -2097,7 +2168,7 @@

@@ -2185,7 +2256,7 @@

@@ -2287,7 +2358,7 @@

@@ -2389,7 +2460,7 @@

@@ -2471,7 +2542,7 @@

@@ -2537,7 +2608,7 @@

@@ -2635,7 +2706,7 @@

@@ -2724,7 +2795,7 @@

@@ -2827,7 +2898,7 @@

@@ -2931,7 +3002,7 @@

@@ -3061,7 +3132,7 @@

@@ -3167,7 +3238,7 @@

@@ -3243,7 +3314,7 @@

@@ -3328,7 +3399,7 @@

@@ -3413,7 +3484,7 @@

@@ -3516,7 +3587,7 @@

@@ -3646,7 +3717,7 @@

@@ -3716,7 +3787,7 @@

@@ -3804,7 +3875,7 @@

@@ -3892,7 +3963,7 @@

@@ -3968,7 +4039,7 @@

@@ -4052,7 +4123,7 @@

Client.php : - 1005 + 1008 @@ -4145,7 +4216,7 @@

@@ -4277,7 +4348,7 @@

@@ -4349,7 +4420,7 @@

@@ -4411,7 +4482,7 @@

@@ -4498,7 +4569,7 @@

@@ -4586,7 +4657,7 @@

@@ -4670,7 +4741,7 @@

Client.php : - 811 + 814 @@ -4758,7 +4829,7 @@

@@ -4838,7 +4909,7 @@

@@ -4922,7 +4993,7 @@

@@ -5010,7 +5081,7 @@

@@ -5103,7 +5174,7 @@

@@ -5223,7 +5294,7 @@

@@ -5316,7 +5387,7 @@

@@ -5405,7 +5476,7 @@

@@ -5494,7 +5565,7 @@

@@ -5537,7 +5608,7 @@

@@ -5580,7 +5651,7 @@

@@ -5623,7 +5694,7 @@

@@ -5666,7 +5737,7 @@

@@ -5709,7 +5780,7 @@

@@ -5752,7 +5823,7 @@

@@ -5795,7 +5866,7 @@

@@ -5838,7 +5909,7 @@

@@ -5881,7 +5952,7 @@

@@ -5944,7 +6015,7 @@

@@ -5983,7 +6054,7 @@

@@ -6033,7 +6104,7 @@

@@ -6211,6 +6282,7 @@

Return values
  • diff --git a/docs/js/searchIndex.js b/docs/js/searchIndex.js index f6b36c43..15e2b931 100644 --- a/docs/js/searchIndex.js +++ b/docs/js/searchIndex.js @@ -9250,6 +9250,11 @@ Search.appendIndex( "name": "env", "summary": "", "url": "classes/BitPaySDK-PosClient.html#property_env" + }, { + "fqsen": "\\BitPaySDK\\PosClient\u003A\u003A\u0024platformInfo", + "name": "platformInfo", + "summary": "Value\u0020for\u0020the\u0020X\u002DBitPay\u002DPlatform\u002DInfo\u0020header", + "url": "classes/BitPaySDK-PosClient.html#property_platformInfo" }, { "fqsen": "\\BitPaySDK\\PosClient\u003A\u003A\u0024token", "name": "token", @@ -9390,6 +9395,11 @@ Search.appendIndex( "name": "identity", "summary": "", "url": "classes/BitPaySDK-Util-RESTcli-RESTcli.html#property_identity" + }, { + "fqsen": "\\BitPaySDK\\Util\\RESTcli\\RESTcli\u003A\u003A\u0024platformInfo", + "name": "platformInfo", + "summary": "Value\u0020for\u0020the\u0020X\u002DBitPay\u002DPlatform\u002DInfo\u0020header.", + "url": "classes/BitPaySDK-Util-RESTcli-RESTcli.html#property_platformInfo" }, { "fqsen": "\\BitPaySDK\\Util\\RESTcli\\RESTcli\u003A\u003A\u0024proxy", "name": "proxy", diff --git a/src/BitPaySDK/Client.php b/src/BitPaySDK/Client.php index 6d0587d5..4589cb7f 100644 --- a/src/BitPaySDK/Client.php +++ b/src/BitPaySDK/Client.php @@ -71,6 +71,7 @@ public function __construct(RESTcli $restCli, Tokens $tokenCache) * @param string|null $privateKeySecret Private Key encryption password. * @param string|null $proxy The url of your proxy to forward requests through. Example: * http://********.com:3128 + * @param string|null $platformInfo Value for the X-BitPay-Platform header. * @return Client * @throws BitPayApiException * @throws BitPayGenericException @@ -80,12 +81,13 @@ public static function createWithData( string $privateKey, Tokens $tokens, ?string $privateKeySecret = null, - ?string $proxy = null + ?string $proxy = null, + ?string $platformInfo = null, ): Client { try { $key = self::initKeys($privateKey, $privateKeySecret); - $restCli = new RESTcli($environment, $key, $proxy); + $restCli = new RESTcli($environment, $key, $proxy, $platformInfo); $tokenCache = $tokens; return new Client($restCli, $tokenCache); @@ -99,11 +101,12 @@ public static function createWithData( /** * Constructor for use if the keys and SIN are managed by this library. * - * @param string $configFilePath The path to the configuration file. + * @param string $configFilePath The path to the configuration file. + * @param string|null $platformInfo Value for the X-BitPay-Platform header. * @return Client * @throws BitPayGenericException */ - public static function createWithFile(string $configFilePath): Client + public static function createWithFile(string $configFilePath, ?string $platformInfo = null): Client { try { $configData = self::getConfigData($configFilePath); @@ -113,7 +116,7 @@ public static function createWithFile(string $configFilePath): Client $key = self::initKeys($config['PrivateKeyPath'], $config['PrivateKeySecret']); $proxy = $config['Proxy'] ?? null; - $restCli = new RESTcli($env, $key, $proxy); + $restCli = new RESTcli($env, $key, $proxy, $platformInfo); $tokenCache = new Tokens($config['ApiTokens']['merchant'], $config['ApiTokens']['payout']); return new Client($restCli, $tokenCache); diff --git a/src/BitPaySDK/PosClient.php b/src/BitPaySDK/PosClient.php index d9faa302..33c44476 100644 --- a/src/BitPaySDK/PosClient.php +++ b/src/BitPaySDK/PosClient.php @@ -27,22 +27,30 @@ class PosClient extends Client { protected string $env; + + /** + * Value for the X-BitPay-Platform-Info header + * @var string + */ + protected string $platformInfo; protected Tokens $token; protected RESTcli $RESTcli; /** * Constructor for the BitPay SDK to use with the POS facade. * - * @param $token string The token generated on the BitPay account. - * @param string|null $environment string The target environment [Default: Production]. + * @param string $token The token generated on the BitPay account. + * @param string|null $environment The target environment [Default: Production]. + * @param string|null $platformInfo Value for the X-BitPay-Platform-Info header. * * @throws BitPayGenericException */ - public function __construct(string $token, string $environment = null) + public function __construct(string $token, string $environment = null, ?string $platformInfo = null) { try { $this->token = new Tokens(null, null, $token); $this->env = strtolower($environment) === "test" ? Env::TEST : Env::PROD; + $this->platformInfo = $platformInfo !== null ? trim($platformInfo) : ''; $this->init(); parent::__construct($this->RESTcli, new Tokens(null, null, $token)); } catch (Exception $e) { @@ -60,7 +68,7 @@ public function __construct(string $token, string $environment = null) private function init(): void { try { - $this->RESTcli = new RESTcli($this->env, new PrivateKey()); + $this->RESTcli = new RESTcli($this->env, new PrivateKey(), null, $this->platformInfo); } catch (Exception $e) { BitPayExceptionProvider::throwGenericExceptionWithMessage( 'failed to build configuration : ' . $e->getMessage() @@ -71,7 +79,7 @@ private function init(): void /** * Fetch the supported currencies. * - * @return array A list of BitPay Invoice objects. + * @return array A list of BitPay Invoice objects. * @throws BitPayGenericException * @throws BitPayApiException */ diff --git a/src/BitPaySDK/Util/RESTcli/RESTcli.php b/src/BitPaySDK/Util/RESTcli/RESTcli.php index f953ba45..2b1d9f57 100644 --- a/src/BitPaySDK/Util/RESTcli/RESTcli.php +++ b/src/BitPaySDK/Util/RESTcli/RESTcli.php @@ -31,24 +31,34 @@ class RESTcli * @var GuzzleHttpClient */ protected GuzzleHttpClient $client; + /** * @var string */ protected string $baseUrl; + /** * @var PrivateKey */ protected PrivateKey $ecKey; + /** * @var string */ protected string $identity; + /** + * Value for the X-BitPay-Platform-Info header. + * @var string + */ + protected string $platformInfo; + /** * @var string */ protected string $proxy; + /** * RESTcli constructor. * @param string $environment @@ -56,11 +66,12 @@ class RESTcli * @param string|null $proxy * @throws BitPayApiException */ - public function __construct(string $environment, PrivateKey $ecKey, ?string $proxy = null) + public function __construct(string $environment, PrivateKey $ecKey, ?string $proxy = null, ?string $platformInfo) { $this->ecKey = $ecKey; $this->baseUrl = $environment == Env::TEST ? Env::TEST_URL : Env::PROD_URL; $this->proxy = $proxy !== null ? trim($proxy) : ''; + $this->platformInfo = $platformInfo !== null ? trim($platformInfo) : ''; $this->init(); } @@ -89,6 +100,10 @@ public function init(): void $config['proxy'] = $this->proxy; } + if ($this->platformInfo !== '') { + $config['defaults']['headers']['x-bitpay-platform-info'] = $this->platformInfo; + } + $this->client = new GuzzleHttpClient($config); } catch (Exception $e) { BitPayExceptionProvider::throwApiExceptionWithMessage($e->getMessage()); @@ -128,6 +143,10 @@ public function post($uri, array $formData = [], bool $signatureRequired = true) $headers['x-identity'] = $this->identity; } + if ($this->platformInfo !== '') { + $headers['x-bitpay-platform-info'] = $this->platformInfo; + } + $method = "POST"; LoggerProvider::getLogger()->logRequest($method, $fullURL, $jsonRequestData); @@ -190,6 +209,10 @@ public function get($uri, array $parameters = null, bool $signatureRequired = tr $headers['x-identity'] = $this->identity; } + if ($this->platformInfo !== '') { + $headers['x-bitpay-platform-info'] = $this->platformInfo; + } + $method = 'GET'; LoggerProvider::getLogger()->logRequest($method, $fullURL, null); @@ -247,6 +270,10 @@ public function delete($uri, array $parameters = null): string BitPayExceptionProvider::throwGenericExceptionWithMessage('Wrong ecKey. ' . $e->getMessage()); } + if ($this->platformInfo !== '') { + $headers['x-bitpay-platform-info'] = $this->platformInfo; + } + $method = 'DELETE'; $jsonRequestData = json_encode($parameters, JSON_THROW_ON_ERROR); @@ -305,6 +332,10 @@ public function update($uri, array $formData = []): string BitPayExceptionProvider::throwGenericExceptionWithMessage('Wrong ecKey. ' . $e->getMessage()); } + if ($this->platformInfo !== '') { + $headers['x-bitpay-platform-info'] = $this->platformInfo; + } + $method = 'PUT'; LoggerProvider::getLogger()->logRequest($method, $fullURL, $jsonRequestData); diff --git a/test/unit/BitPaySDK/ClientTest.php b/test/unit/BitPaySDK/ClientTest.php index f7f2777b..ab2ffaa4 100644 --- a/test/unit/BitPaySDK/ClientTest.php +++ b/test/unit/BitPaySDK/ClientTest.php @@ -110,6 +110,24 @@ public function testWithData() self::assertInstanceOf(Client::class, $result); } + /** + * @throws BitPayApiException + */ + public function testWithDataAndXBitPayPlatformInfoHeader() + { + $tokens = $this->createMock(Tokens::class); + $result = $this->getTestedClassInstance()::createWithData( + Env::TEST, + __DIR__ . '/bitpay_private_test.key', + $tokens, + 'YourMasterPassword', + null, + 'MyPlatform_v1.0.0' + ); + + self::assertInstanceOf(Client::class, $result); + } + public function testWithDataException() { $instance = $this->getTestedClassInstance(); @@ -135,6 +153,20 @@ public function testWithFileJsonConfig(): Client return $result; } + /** + * @throws BitPayApiException + */ + public function testWithFileJsonConfigAndXBitPayPlatformInfoHeader(): Client + { + $instance = $this->getTestedClassInstance(); + $result = $instance::createWithFile( + __DIR__ . '/BitPay.config-unit.json', + 'MyPlatform_v1.0.0' + ); + self::assertInstanceOf(Client::class, $result); + return $result; + } + /** * @throws BitPayGenericException */ @@ -145,6 +177,19 @@ public function testWithFileYmlConfig() self::assertInstanceOf(Client::class, $result); } + /** + * @throws BitPayGenericException + */ + public function testWithFileYmlConfigAndXBitPayPlatformInfoHeader() + { + $instance = $this->getTestedClassInstance(); + $result = $instance::createWithFile( + __DIR__ . '/BitPay.config-unit.yml', + 'MyPlatform_v1.0.0' + ); + self::assertInstanceOf(Client::class, $result); + } + public function testWithFileException() { $instance = $this->getTestedClassInstance();