Renew partner subscription
Last updated: 03-Feb-2026
Rate this article:
Parameters
| Parameters | Type/Description | ||
|---|---|---|---|
| sessionID | Required (String) | ||
| Session identifier, output of the Login method. An exception is thrown for incorrect values. | |||
| Items | Object (Required) | ||
| SubscriptionReference | String (Required) | ||
| The 2Checkout unique subscription code. | |||
| Quantity | String (Required) | ||
| Defines the amount of product units to be renwed. | |||
| PricingOptions | Object (Required) | ||
| Code | The 2Checkout unique pricing code. | ||
| ExtraDiscount | Object (Optional) | ||
| Value | String | ||
| Extra discount you offer to partner orders. | |||
| Type | String | ||
| Possible values: FIXED or PERCENT. | |||
| ExtraMargin | Object (Optional) | ||
| Value | String | ||
| Extra margin you offer to partner orders. | |||
| Type | String | ||
| Possible values: FIXED or PERCENT. | |||
| ExternalReferenceNumber | String (optional) | ||
| Set external reference identifiers for orders. Maximum 100 characters. | |||
| Comment | String (Optional) | ||
| Set comments on orders as needed. |
Request
<?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 = 'renewPartnerSubscriptions';
public const PAYLOAD = <<<JSON
{
"Items": [
{
"SubscriptionReference": "XYZ23GHUJK",
"Quantity": 5,
"PricingOptions": [
{
"Code": "option30p"
},
{
"Code": "option20p"
}
]
}
],
"ExtraDiscount": {
"Value": 10,
"Type": "FIXED"
},
"ExtraMargin": {
"Value": 10,
"Type": "PERCENT"
},
"ExternalReferenceNumber": "EXT-007",
"Comment": "API partner order for renewal"
}
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);
Rate this article: