Create fixed discount
Use setPromotionDiscount to set a fixed promotion discount.
Request parameters
sessionID
Required (string) Output of the Login method.
promotionCode
Required (string) The code corresponding to the promotion that you want to set the discount for.
promotionDiscount
Required (object)
promotionDiscount.Type
Required (string)
Discount type:
PERCENT, use in combination with
ValueFIXED, use in combination with
ValuesandDefaultCurrency
promotionDiscount.Value/Values
Required (int / array of objects)
Value = Int, determines the discount percentage from 0 to 100
Values = Array of Value objects
promotionDiscount.Value/Values.Value
Required (object)
promotionDiscount.Value/Values.Value.Currency
Required (string) Discount currency ISO code (ISO 4217).
promotionDiscount.Value/Values.Value.Amount
Required (int) Discount amount in corresponding currency.
promotionDiscount.DefaultCurrency
Required (string) Default discount currency ISO code (ISO 4217).
Request sample
<?php
declare(strict_types=1);
class Configuration
{
public const MERCHANT_CODE = '';
public const MERCHANT_KEY = '';
public const URL = 'http://api.2checkout.com/soap/6.0';
public const ACTION = 'setPromotionDiscount';
public const PROMOTION_CODE = "AB3WMME0UA";
//array or JSON
public const PAYLOAD = <<<JSON
{
"Type": "FIXED",
"DefaultCurrency": "USD",
"Values": [\
{\
"Currency": "USD",\
"Amount": 10\
},\
{\
"Currency": "EUR",\
"Amount": 10\
}\
]
}
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,
string $promotionCode = Configuration::PROMOTION_CODE
): ?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, $promotionCode, $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 parameters
promotionDiscount
Object
Last updated
Was this helpful?