1: <?php
2: namespace Worldline\Connect\Sdk\Communication;
3:
4: use stdClass;
5: use Worldline\Connect\Sdk\CommunicatorConfiguration;
6: use Worldline\Connect\Sdk\Domain\ShoppingCartExtension;
7:
8: /**
9: * Class MetadataProvider
10: *
11: * @package Worldline\Connect\Sdk\Communication
12: */
13: class MetadataProvider
14: {
15: const SDK_VERSION = '9.0.0';
16:
17: /**
18: * @var string
19: */
20: private string $integrator;
21:
22: /**
23: * @var ShoppingCartExtension|null
24: */
25: private ?ShoppingCartExtension $shoppingCartExtension;
26:
27: /**
28: * @param CommunicatorConfiguration $communicatorConfiguration
29: */
30: public function __construct(CommunicatorConfiguration $communicatorConfiguration)
31: {
32: $this->integrator = $communicatorConfiguration->getIntegrator();
33: $this->shoppingCartExtension = $communicatorConfiguration->getShoppingCartExtension();
34: }
35:
36: /**
37: * @return string
38: */
39: public function getServerMetaInfoValue(): string
40: {
41: // use a stdClass instead of specific class to keep out null properties
42: $serverMetaInfo = new stdClass();
43: $serverMetaInfo->platformIdentifier = sprintf('%s; php version %s', php_uname(), phpversion());
44: $serverMetaInfo->sdkIdentifier = 'PHPServerSDK/v' . static::SDK_VERSION;
45: $serverMetaInfo->sdkCreator = 'Worldline';
46: $serverMetaInfo->integrator = $this->integrator;
47: if (!is_null($this->shoppingCartExtension)) {
48: $serverMetaInfo->shoppingCartExtension = $this->shoppingCartExtension->toObject();
49: }
50: // the sdkIdentifier contains a /. Without the JSON_UNESCAPED_SLASHES, this is turned to \/ in JSON.
51: return base64_encode(json_encode($serverMetaInfo, JSON_UNESCAPED_SLASHES));
52: }
53: }
54: