For the complete documentation index, see llms.txt. This page is also available as Markdown.

Renew partner subscription

Request parameters

Parameter
Type / Description

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?