Retrieve partner subscription upgrade price
Request parameters
sessionID
String (Required) Session identifier, output of the Login method. An exception is thrown if the values are incorrect.
Items
Object (Required) Details below.
Items.SubscriptionReference
String (Required) The 2Checkout unique subscription code.
Items.UpgradeProductCode
String (Required) Unique product identifier code of the product you wish the subscription to be upgraded to.
Items.Quantity
String (Required) Defines the amount of product units to be upgraded to.
Items.PricingOptions
Object (Required) Details below.
Items.PricingOptions.Code
String (Required) The 2Checkout unique pricing code.
ExtraDiscount
Object (Optional) Details below.
ExtraDiscount.Value
String (Optional) Extra discount you offer to partner orders.
ExtraDiscount.Type
String (Optional) Possible values: FIXED or PERCENT.
ExtraMargin
Object (Optional) Details below.
ExtraMargin.Value
String (Optional) Extra margin you offer to partner orders.
ExtraMargin.Type
String (Optional) Possible values: FIXED or PERCENT.
Request sample
<?php
declare(strict_types=1);
class Configuration
{
public const MERCHANT_CODE = 'MERCHANT';
public const MERCHANT_KEY = 'SECRET_KEY';
public const URL = 'http://api.avangate.local/rpc/6.0';
public const ACTION = 'getPartnerSubscriptionsUpgradePrice';
public const PAYLOAD = <<<JSON
{
"Items": [
{
"SubscriptionReference": "XYZ23GHUJK",
"UpgradeProductCode": "Avangate",
"Quantity": 5,
"PricingOptions": [
{
"Code": "option30p"
},
{
"Code": "option20p"
}
]
}
],
"ExtraDiscount": {
"Value": 10,
"Type": "FIXED"
},
"ExtraMargin": {
"Value": 10,
"Type": "PERCENT"
}
}
JSON;
}
class Client
{
private const LOGIN_METHOD = 'login';
private $calls = 1;
private $sessionId;
private function generateAuth(): array
{
$merchantCode = Configuration::MERCHANT_CODE;
$key = Configuration::MERCHANT_KEY;
$date = gmdate('Y-m-d H:i:s');
$string = strlen($merchantCode) . $merchantCode . strlen($date) . $date;
$algo = 'sha256';
$hash = hash_hmac($algo, $string, $key);
return compact('merchantCode', 'date', 'hash', 'algo');
}
public function login(string $url)
{
$payload = $this->generateAuth();
$response = $this->call($url, array_values($payload), self::LOGIN_METHOD);
$this->sessionId = $response['result'];
}
public function call(
string $url = Configuration::URL,
$payload = Configuration::PAYLOAD,
string $action = Configuration::ACTION
): ?array {
if (empty($this->sessionId) && $action !== self::LOGIN_METHOD) {
$this->login($url);
}
if (is_string($payload)) {
$payload = json_decode($payload, true);
}
if (!empty($this->sessionId)) {
$payload = [$this->sessionId, $payload];
}
$payload = array_filter($payload);
$request = json_encode([
'jsonrpc' => '2.0',
'method' => $action,
'params' => $payload,
'id' => $this->calls++,
]);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSLVERSION, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(
$curl,
CURLOPT_HTTPHEADER,
['Content-Type: application/json', 'Accept: application/json', 'Cookie: XDEBUG_SESSION=PHPSTORM']
);
curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
$response = curl_exec($curl);
if (empty($response)) {
die('Server unavailable');
}
echo $response . '</br>';
return json_decode($response, true);;
}
}
$client = new Client();
$result = $client->call();
var_dump($result);Last updated
Was this helpful?