Upgrade 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.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.
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/soap/6.0';
public const ACTION = 'upgradePartnerSubscriptions';
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"
},
"ExternalReferenceNumber": "EXT-007",
"Comment": "API partner order for upgrade"
}
JSON;
}
class Client
{
public function call(
string $url = Configuration::URL,
$payload = Configuration::PAYLOAD,
string $action = Configuration::ACTION
): ?object {
if (is_array($payload)) {
$payload = json_encode($payload);
}
if (!empty($payload)) {
// SoapClient works with objects(StdClass)
$payload = json_decode($payload);
}
$soapClient = $this->getClient($url);
$sessionId = $this->getSession($soapClient);
$args = array_filter([$sessionId, $payload]);
return $soapClient->$action(...$args);
}
public function getClient(string $url): SoapClient
{
return new SoapClient(
$url.'?wsdl',
[
'location' => $url,
'cache_wsdl' => WSDL_CACHE_NONE,
]
);
}
public function getSession(SoapClient $client)
{
$date = gmdate('Y-m-d H:i:s');
$merchantCode = Configuration::MERCHANT_CODE;
$key = Configuration::MERCHANT_KEY;
$string = strlen($merchantCode).$merchantCode.strlen($date).$date;
$algo = 'sha256';
$hash = hash_hmac($algo, $string, $key);
$client->__setCookie('XDEBUG_SESSION', 'PHPSTORM');
return $client->login($merchantCode, $date, $hash, $algo);
}
}
try {
$client = new Client();
var_dump($client->call());
} catch (Exception $ex) {
var_dump($ex);
}Last updated
Was this helpful?