This function allows merchant to instantly upgrade an existing subscription. By “upgrade” we explicitly mean bring forward the rebilling date immediately, perform a transaction and start the rebilling period from now. The initial trial period for the item will no longer be valid.
This is only available on items that have an initial trial period that has been defined in the initial transaction via Sale request. If there is no initial period, the request will be rejected. Instant upgrade is only available for credit card transactions. Alternate payments are not supported.
HTTP Method | API URL | API Version |
---|---|---|
POST | https://api.payzone.ma/subscription/{subscriptionID}/instantconversion | >= 002 |
No field are needed in the request. The subscription ID is in the URI.
Note: Gateway API transactions are done with a different library than payment-page API. See the code sample comments for more info:
/*
* Transaction name is 'InstantConversion', once you create a new transaction passing this as parameter,
* you need to set the mandatory data using the following method:
* setSubscriptionID()
*/
$client = new GatewayClient();
$transaction = $client->newTransaction('InstantConversion', 'testMerchant', 'testPassword');
$transaction->setSubscriptionID($subscriptionID);
$response = $transaction->send();
if ('000' === $response->errorCode) {
$transactionID = $response->transactionID;
$subscription = $response->subscription;
} else {
echo "Error {$response->errorCode} with message {$response->errorMessage}";
}
PaymentGatewayConnector connector = new PaymentGatewayConnector(API_URL, ORIGINATOR, PASSWORD);
SubscriptionInstantConversionResponse response = null;
SubscriptionInstantConversionRequest request = new SubscriptionInstantConversionRequest();
request.setSubscriptionId(1234567L);
try {
response = connector.doSubscriptionInstantConversion(request);
} catch (Exception e) {
e.printStackTrace();
}
if (response != null) {
if (TransactionResultCode.TRANSACTION_SUCCESSFULLY.equals(response.getErrorCode()) {
System.out.println("Success: " + response.getErrorMessage());
} else {
System.out.println("Failure: " + response.getErrorMessage());
}
}
const gateway = require("payxpert")("123456", "GreatP4ssw0rd").gateway;
// At first we will make "Sale" transaction with subscription
const body = {
customerIP: "1.2.3.4",
amount: amountForTest,
currency: "EUR",
orderID: "HELLO NODEJS",
cardNumber: "4111111111111111",
cardSecurityCode: "000",
cardHolderName: "CARDHOLDER NAME",
cardExpireMonth: "10",
cardExpireYear: "2024",
shopperName: "NodeJS Test",
shopperAddress: "NA",
shopperZipcode: "NA",
shopperCity: "NA",
shopperState: "NA",
shopperCountryCode: "NA",
shopperPhone: "NA",
shopperEmail: "NA",
// Details for subscription
subscriptionType: "normal",
rebillAmount: 1000,
rebillPeriod: "P5D",
rebillMaxIteration: 5,
trialPeriod: "P1D"
};
let responseSale = await gateway.creditCardSale(body);
if (responseSale.code == "000") {
// Success. Now will make instant conversion
let responseInstantConversion = await gateway.instantConversion(responseSale.subscriptionID);
if (responseInstantConversion.code == "000") {
// Success
// ...
}
}
var client = new GatewayClient(OriginatorConfig.ORIGINATOR_ID, OriginatorConfig.ORIGINATOR_PASSWORD);
// At first we will make normal "Sale" transaction
var transaction = client.NewSaleTransaction();
var amount = 2500;
transaction.SetTransactionInformation(amount, "EUR", "50", customerIP);
transaction.SetCardInformation("4111111111111111", "000", "CSHARP SDK", "10", "2024");
transaction.SetShopperInformation("CSHARP SDK", "MICROSOFT CUSTOMER", "666", "REDMOND", "WA", "US", "12445", "x@x.rr");
// Set the subscription information
transaction.SetSubscriptionInformation(SubscriptionType.NORMAL, 1000, "P5D", 5, "P1D");
var response = await transaction.Send();
if (response.IsSuccessfull())
{
Console.WriteLine("Sale operation ok. Transaction ID: " + response.transactionID + ", subscription ID: " + response.subscriptionID);
Console.WriteLine("Performing instant subscription conversion ...");
var instantConversionTransaction = client.NewSubscriptionInstantConversionTransaction(response.subscriptionID);
var instantConversionResponse = await instantConversionTransaction.Send();
if (instantConversionResponse.IsSuccessfull())
{
Console.WriteLine("Conversion is ok: " + instantConversionResponse.errorMessage);
}
else
{
Console.WriteLine("Error while converting subscription: " + instantConversionResponse.errorMessage);
}
}
The body of the response is in JSON format.
The following fields are present in the response :
Name | Type | Description |
---|---|---|
transactionID | String | Transaction reference returned by the system |
errorCode | String | See API Response Codes |
errorMessage | String | See API Response Codes |
subscription | Object | The subscription object |