Renew partner subscription
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.Quantity
String (Required) Defines the amount of product units to be renewed.
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.
ExternalReferenceNumber
String (Optional) Set external reference identifiers for orders. Maximum 100 characters.
Comment
String (Optional) Set comments on orders as needed.
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 = '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);Last updated
Was this helpful?