Retrieve subscription deal information
Overview
Use the GetDealInfo method to retrieve information about the existing deal on a given subscription as well as what the subscription will look like with the new proposed deal being applied to it.
Request parameters
Parameter name |
Type |
Required/Optional |
Description |
---|---|---|---|
Currency |
String |
Required |
The desired output currency. |
Language |
String | Required |
The desired output language. |
Items |
Array |
Required |
Each item corresponds to a subscription. |
Items.DealDate |
Datetime |
Required |
The date when the deal is set to come into effect. Format: YYYY-MM-DD HH:MM:SS. |
Items.SubscriptionReference |
String |
Required |
The subscription code. |
Items.ProductCode |
String |
Required |
The product code. |
Items.Quantity |
String |
Required |
The product quantity. |
Items.DealPriceScenario |
String |
Required |
The upgrade scenario to be applied. Must be one of: using_last_order_price, using_last_product_price, price_total, product_price_difference. |
Items.DealSubscriptionScenario |
String |
Required |
The scenarion for price calculation. Must be on of: start_new_deal_contract_now, start_new_deal_contract_after_current_cycle. |
Items.PriceOptions |
Array |
Optional |
The array of price options. |
Items.PriceOptions.Code |
String |
Required |
The price option group code if the group is of interval type or the price option code otherwise. |
Items.PriceOptions.Options |
Array |
Optional |
The array of options that belong to this option group. |
Items.PriceOptions.Options.Value |
String |
Required |
If the group is of type “scale”, this is a value from the allowed interval, otherwise, this is the option code as defined in Merchant Control Panel under “Unique Code”. |
Items.Price |
Object |
Required |
The product price. |
Items.Price.Amount |
Float |
Required |
The actual numeric amount. |
Items.Price.Type |
String |
Required |
Describes if the price type is catalog or custom. Can be only CUSTOM. |
Items.Price.AmountType |
String |
Required |
Describes if the price is NET or GROSS. Can be one of NET, GROSS. |
Items.SubscriptionCustomSettings.CycleLength |
Int |
Required |
The length of a single billing cycle. |
Items.SubscriptionCustomSettings.CycleUnit |
String |
Required |
The unit of a single billing cycle. Can be one of MONTH, DAY. To perform a getDeal call towards a One Time Fee subscription, this value must be -1. |
Items.SubscriptionCustomSettings.CycleAmount |
Float |
Required |
The price of a single billing cycle. |
Items.SubscriptionCustomSettings.CycleAmountType |
String |
Required |
Describes the price type. Can be one of NET, GROSS. |
Items.SubscriptionCustomSettings.ContractLength |
Int |
Required |
The number of billing cycles contained in a single contract. To perform a getDeal call towards a One Time Fee or a Lifetime subscription, this value must be NULL. |
BillingDetails |
Object |
Required |
The billing details. |
BillingDetails.FirstName |
String |
Required |
The first name. |
BillingDetails.LastName |
String |
Required |
The last name. |
BillingDetails.CountryCode |
String |
Required |
The country code. Must be one of the seller's associated country codes. |
BillingDetails.State |
String |
Optional |
Required only if the business model requires it. |
BillingDetails.City |
String |
Required |
The city name. |
BillingDetails.Address1 |
String |
Required |
The address. |
BillingDetails.Zip |
String |
Required |
The zip code. |
BillingDetails.Email |
String |
Required |
The email address. |
BillingDetails.Phone |
String |
Required |
The phone number. |
BillingDetails.Company |
String |
Required |
The company's legal name. |
BillingDetails.FiscalCode |
String |
Required |
The fiscal code. |
DeliveryDetails |
Object |
Required |
The delivery details. |
DeliveryDetails.FirstName |
String |
Required |
The first name. |
DeliveryDetails.LastName |
String |
Required |
The last name. |
DeliveryDetails.CountryCode |
String |
Required |
The country code. Must be one of the seller's associated country codes. |
DeliveryDetails.State |
String |
Optional |
Required only if the business model requires it. |
DeliveryDetails.City |
String |
Required |
The city name. |
DeliveryDetails.Address1 |
String |
Required |
The address. |
DeliveryDetails.Zip |
String |
Required |
The zip code. |
DeliveryDetails.Email |
String |
Required |
The email address. |
DeliveryDetails.Phone |
String |
Required |
The phone number. |
DeliveryDetails.Company |
String |
Required |
The company's legal name. |
Request sample
<?php
declare(strict_types=1);
class Configuration
{
public const MERCHANT_CODE = '1234554321';
public const MERCHANT_KEY = 'D+~=z5R+R4])4D5&p56%';
public const URL = 'http://api.avangate.local/rpc/6.0';
public const ACTION = 'getDealInfo';
//array or JSON
public const PAYLOAD = <<<JSON
{
"Currency": "usd",
"Country": "us",
"Language": "ro",
"CustomerIp": "91.220.121.21",
"Source": "salesforce_cpq",
"Items": [
{
"DealDate": "2021-09-20 23:59:59",
"SubscriptionReference": "L10RV2QPFZ",
"ProductCode": "3EGZDNNRQY",
"Quantity": 10,
"DealPriceScenario": "using_last_order_price",
"DealSubscriptionScenario": "prolong1",
"Price": {
"Amount": 200,
"Type": "CUSTOM",
"AmountType": "NET"
},
"SubscriptionCustomSettings": {
"CycleLength": 1,
"CycleUnit": "MONTHS",
"CycleAmount": 10,
"CycleAmountType": "NET",
"ContractLength": 12
}
}
],
"BillingDetails": {
"FirstName": "Oscar",
"LastName": "McMillan",
"CountryCode": "ro",
"State": "Ilios",
"City": "RE",
"Address1": "4519 Kovar Road",
"Zip": "645",
"Email": "o.mcmillan@integrawealth.net",
"Phone": "6172938133",
"Company": "Integra Wealth",
"FiscalCode": "98414321421"
},
"DeliveryDetails": {
"FirstName": "Maria",
"LastName": "Frederick",
"CountryCode": "ro",
"State": "New York",
"City": "Buffalo",
"Address1": "2033 Nuzum Court",
"Zip": "14216",
"Email": "m.frederick@integrawealth.net",
"Phone": "7165708136",
"Company": "Integra Wealth"
}
}
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;
$hash = hash_hmac('md5', $string, $key);
return compact('merchantCode', 'date', 'hash');
}
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, array('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);
Response
Parameter name |
Type |
Description |
---|---|---|
Currency |
String |
The currency code of all the returned price values. |
DealDueNowPriceNet |
Float |
The NET amount that needs to be paid. |
DealDueNowPriceGross |
Float |
The GROSS amount that needs to be paid. |
DealTaxAmount |
Float |
The tax amount (DealDueNowPriceGross - DealDueNowPriceNet). |
Items |
Array |
The array of response items, one for each subscription. |
Items.SubscriptionReference |
String |
The subscription code. |
Items.DealPriceScenario |
String |
The provided DealPriceScenario. |
Items.DealSubscriptionScenario |
String |
The provided DealSubscriptionScenario. |
Items.DealDate |
Datetime |
The provided DealDate. Format: YYYY-MM-DD HH:MM:SS. |
Items.DealDueNowPriceNet |
Float |
The NET amount to be paid now. |
Items.DealDueNowPriceGross |
Float |
The GROSS amount to be paid now. |
Items.DealTaxAmount |
Float |
The tax amount. |
Items.DealTaxPercent |
Int |
The percent that the tax amount is covering from the GROSS price. |
Items.CurrentInfo |
Object |
The current subscription information. |
Items.CurrentInfo.ProductCode |
String |
The product code. |
Items.CurrentInfo.ProductName |
String |
The product name. |
Items.CurrentInfo.ProductDescription |
String |
The product description. |
Items.CurrentInfo.BillingPriceNet |
Float |
The NET price of a billing cycle. |
Items.CurrentInfo.BillingPriceGross |
Float |
The GROSS price of a billing cycle. |
Items.CurrentInfo.NoOfBillingCycles |
Int |
The number of billing cycles. |
Items.CurrentInfo.CurrentBillingCycle |
Int |
The current billing cycle number. |
Items.CurrentInfo.PayedBillingCycles |
Int |
The number of paid billing cycles. |
Items.CurrentInfo.RemainingBillingCycles |
Int |
The number of remaining billing cycles. |
Items.CurrentInfo.CurrentBillingCycleEndDate |
Datetime |
The end date of the current billing cycle. Format: YYYY-MM-DD HH:MM:SS. |
Items.CurrentInfo.TaxAmount |
Float |
The tax amount. |
Items.CurrentInfo.TaxPercent |
Float |
The percent that the tax amount is covering from the GROSS price. |
Items.CurrentInfo.BillingCyclesFrequency |
String |
The frequency of a billing cycle for the current subscription as it is now. |
Items.CurrentInfo.BillingCycleFrequencyUnit |
String |
The unit of a billing cycle for the current subscription as it is now. Can be one of MONTHS, DAYS. |
Items.CurrentInfo.ContractLength |
Int |
The contract length for the current subscription as it is now. |
Items.CurrentInfo.ContractLengthUnit |
Int |
The unit of the contract length for the current subscription as it is now. Can be one of MONTH, DAY. |
Items.CurrentInfo.ProductOptions |
Array |
The array of existing product options. |
Items.CurrentInfo.ProductOptions.Code |
String |
The option group code as defined in the Merchant Control Panel under “Unique Code”. |
Items.CurrentInfo.ProductOptions.Value |
String |
The price option value if the group is of type interval or the price option code as defined in the Merchant Control Panel under “Unique Code” otherwise. |
Items.NewDealInfo |
Object |
The new deal information. |
Items.NewDealInfo.ProductCode |
String |
The product code. |
Items.NewDealInfo.ProductName |
String |
The product name. |
Items.NewDealInfo.ProductDescription |
String |
The product description. |
Items.NewDealInfo.BillingPriceNet |
Float |
The NET price of a billing cycle. |
Items.NewDealInfo.BillingPriceGross |
Float |
The GROSS price of a billing cycle. |
Items.NewDealInfo.NoOfBillingCycles |
Int |
The number of billing cycles. |
Items.NewDealInfo.CurrentBillingCycle |
Int |
The current billing cycle number. |
Items.NewDealInfo.PayedBillingCycles |
Int |
The number of paid billing cycles. |
Items.NewDealInfo.RemainingBillingCycles |
Int |
The number of remaining billing cycles. |
Items.NewDealInfo.CurrentBillingCycleEndDate |
Datetime |
The end date of the current billing cycle. Format: YYYY-MM-DD HH:MM:SS. |
Items.NewDealInfo.TaxAmount |
Float |
The tax amount. |
Items.NewDealInfo.TaxPercent |
Float |
The percent that the tax amount is covering from the GROSS price. |
Items.NewDealInfoBillingCyclesFrequency |
Int |
The frequency of a billing cycle for this subscription following an eventual deal change with the provided Items.SubscriptionCustomSettings. In case of a One Time Fee subscription, this value will be -1. |
Items.NewDealInfo.BillingCycleFrequencyUnit |
String |
The unit of a billing cycle for this subscription following an eventual deal change with the provided Items.SubscriptionCustomSettings. Can be one of MONTH, DAY. |
Items.NewDealInfo.ContractLength |
Int |
The contract length for this subscription following an eventual deal change with the provided Items.SubscriptionCustomSettings. In case of a One Time Fee or Lifetime subscription, this value will be NULL. |
Items.NewDealInfo.ContractLengthUnit |
String |
The unit of the contract length for this subscription following an eventual deal change with the provided Items.SubscriptionCustomSettings. Ca be one of MONTH, DAY. |
Items.NewDealInfo.ProductOptions |
Array |
The array of existing product options. |
Items.NewDealInfo.ProductOptions.Code |
String |
The option group code as it's defined in the Merchant Control Panel under “Unique Code”. |
Items.NewDealInfo.ProductOptions.Value |
String |
The price option value if the group is of type interval or the price option code as defined in the Merchant Control Panel under “Unique Code” otherwise. |
Items.TotalsDealInfo |
Object |
General statistics regarding the subscription. |
Items.TotalsDealInfo.DealsNumber |
Int |
The total number of deals made so far. |
Items.TotalsDealInfo.ContractsNumber |
Int |
The total number of contracts made so far. |
Items.TotalsDealInfo.PaidBillingCycles |
Int |
The number of paid billing cycles. |
Items.TotalsDealInfo.ElapsedBillingCycles |
Int |
The number of elapsed billing cycles. |
Error handling
Situation |
Error Code |
Error Message |
---|---|---|
Mandatory parameter(s) not provided |
MALFORMED_PARAMETER |
Currency not provided, Items.SubscriptionReference not provided, Items.Price.Type not provided, ... |
DealDate not provided in required format |
MALFORMED_PARAMETER |
Invalid format provided for Items.DealDate. Format must be Y-m-d H:i:s. Provided: 2021-0920 23:59:59. |
DealDate is in the past |
MALFORMED_PARAMETER |
Deal date 2020-09-20 23:59:59 is in the past. |
Subscription not found or not associated with seller |
VALIDATION_SUBSCRIPTION_MISSING |
Subscription 6D4F1S81EEB not found. |
Subscription not active |
VALIDATION_SUBSCRIPTION_INACTIVE |
Subscription 6D4F181EEB not active. |
Product not found or not associated with seller |
VALIDATION_PRODUCT_MISSING |
Product with code 6A4C23036C not found. |
Product not active |
VALIDATION_PRODUCT_INACTIVE |
Product with code 6A4C23036C not active. |
The subscription is not B2B due to no custom renewal settings being found on subscription |
VALIDATION_SUBSCRIPTION_NOT_B2B |
No custom renewal settings found for subscription 6D4F1S81EEB. This subscription may not be a B2B subscription. |
Provided price option groups are not valid price options for provided product |
VALIDATION_PRICE_OPTION_MISSING |
Some of the provided price options not found! |
Provided subscription upgrade scenario not among supported values |
VALIDATION_DEAL_SUBSCRIPTION_SCENARIO |
Invalid upgrade subscription scenario provided: 'WRONG_SCENARIO'. Must be one of start_new_deal_contract_now, start_new_deal_contract_after_current_cycle. |
Provided subscription price scenario not among supported values |
VALIDATION_DEAL_PRICE_SCENARIO |
Invalid price scenario provided: 'WRONG_SCENARIO'. Must be one of: using_last_order_price, using_last_product_price, price_total, product_price_difference. |
Provided subscription price scenario not among supported values |
VALIDATION_FISCAL_CODE |
<fiscal code validation error> |
Invalid billing email provided |
VALIDATION_BILLING_DETAILS |
Invalid billing email provided. |
Provided billing country not among seller supported countries. |
VALIDATION_BILLING_DETAILS |
Provided billing country not among seller supported countries. |
Business model tax calculation type requires that BillingDetails.State be provided. |
VALIDATION_BILLING_DETAILS |
Business model tax calculation type requires that BillingDetails.State be provided. |
Invalid delivery email provided |
VALIDATION_DELIVERY_DETAILS |
Invalid delivery email provided. |
Provided delivery country not among seller supported countries. |
VALIDATION_DELIVERY_DETAILS |
Provided delivery country not among seller supported countries. |
Business model tax calculation type requires that DeliveryDetails.State be provided. |
VALIDATION_DELIVERY_DETAILS |
Business model tax calculation type requires that DeliveryDetails.State be provided. |
Country '{$deliveryCountryCode}' provided in two different business model distributions. |
VALIDATION_BUSINESS_MODEL |
Country provided in two different business model distributions. |
Invalid price type detected for the next renewal price |
INTERNAL_ERROR |
Internal error |
Unexpected error |
INTERNAL_ERROR |
Internal error |