IPP (Installment payment plan)

IPP payment option helps merchant to promote sales in their website especially for big ticket size items. Typically consumer electronics, travel packages and insurance is used for installment payments.

Here are steps to make a successful installment payment:

Β 

πŸ“˜

API Method

PGW SDK API Interface

🚧

References

SDK Payment Classes
SDK Payment Enums

Β 
Step 1 :Generate Payment Token

Β 
1.1 Generate payment token ID.

πŸ“˜

Payment Token API

Please refer: Payment Token API

{
    "merchantID": "JT04",
    "invoiceNo": "1595219400",
    "description": "2 days 1 night hotel room",
    "amount": 10.0,
    "currencyCode": "THB",
    "nonceStr": "a8092512-b144-41b0-8284-568bb5e9264c",
    "paymentChannel": ["GCARD"],
    "request3DS": "Y",
    "installmentPeriodFilter": [6],
    "interestType": "M",
    "productCode": "ProductA",
    "promotionCode": "PromoA"
}

Β 
1.2 Get payment token ID from response and pass it to merchant mobile application.

String paymentToken = "roZG9I1hk/GYjNt+BYPYbxQtKElbZDs9M5cXuEbE+Z1dJgGQ62S6CGwy2SP852ud2QXNFI20wDcZbWHCQtCqERaqGYyENDFpnchZrpiXkGVSc1eYtOwOFunPcyGTSLfP";
NSString *paymentToken = @"roZG9I1hk/GYjNt+BYPYbxQtKElbZDs9M5cXuEbE+Z1dJgGQ62S6CGwy2SP852ud2QXNFI20wDcZbWHCQtCqERaqGYyENDFpnchZrpiXkGVSc1eYtOwOFunPcyGTSLfP";
let paymentToken:String = "roZG9I1hk/GYjNt+BYPYbxQtKElbZDs9M5cXuEbE+Z1dJgGQ62S6CGwy2SP852ud2QXNFI20wDcZbWHCQtCqERaqGYyENDFpnchZrpiXkGVSc1eYtOwOFunPcyGTSLfP"

Β 
Step 2: Construct Installment Payment Plan Request.

Below code show how to construct installment payment plan request.

πŸ“˜

Payment Request Parameter

Please refer: Payment Request API Parameter

🚧

Payment Channel

Installment Payment Plan support a few of options. Please refer below payment channel matrix for individual card tokenization option.
β€’ For Global Card

PaymentCode paymentCode = new PaymentCode("IPP");
 
PaymentRequest paymentRequest = new CardPaymentBuilder(paymentCode, "4111111111111111")
                                .setExpiryMonth(12)
                                .setExpiryYear(2020)
                                .setSecurityCode("123")
                                .setInstallmentInterestType(InstallmentInterestTypeCode.Merchant)
                                .setInstallmentPeriod(6)
                                .build();
PaymentCode *paymentCode = [[PaymentCode alloc] initWithChannelCode: @"IPP"];
  
PaymentRequest *paymentRequest = [[[[[[[[CardPaymentBuilder alloc] initWithPaymentCode: paymentCode cardNo: @"4111111111111111"]
                                         expiryMonth: 12]
                                         expiryYear: 2020]
                                         securityCode: @"123"]
                                         installmentInterestType: InstallmentInterestTypeCode.Merchant]
                                         installmentPeriod: 6]
                                         build];
let paymentCode: PaymentCode = PaymentCode(channelCode: "IPP")
         
let paymentRequest: PaymentRequest = CardPaymentBuilder(paymentCode: paymentCode, "4111111111111111")
                                     .expiryMonth(12)
                                     .expiryYear(2020)
                                     .securityCode("123")
                                     .installmentInterestType(InstallmentInterestTypeCode.Merchant)
                                     .installmentPeriod(6)
                                     .build()

Β 
Step 3: Construct Transaction Request.

Below code show how to construct transaction request.

πŸ“˜

Transaction Request API Parameter

Please refer: Do Payment Request API Parameter

TransactionResultRequest transactionResultRequest = new TransactionResultRequestBuilder(paymentToken)
                                                    .with(paymentRequest)
                                                    .build();
TransactionResultRequest *transactionResultRequest = [[[[TransactionResultRequestBuilder alloc] initWithPaymentToken: paymentToken]
                                                         withPaymentRequest: paymentRequest]
                                                         build];
let transactionResultRequest: TransactionResultRequest = TransactionResultRequestBuilder(paymentToken: paymentToken)
                                                         .with(paymentRequest)
                                                         .build()

Β 
Step 4: Execute payment request.

Below code show how to execute payment request and receive API response code.

πŸ“˜

Transaction Response API Parameter

Please refer: Do Payment Response API Parameter

🚧

References

Response Code
Please refer : Payment Flow Response Code for payment process flow by response code.

PGWSDK.getInstance().proceedTransaction(transactionResultRequest, new APIResponseCallback<TransactionResultResponse>() {
   
     @Override
     public void onResponse(TransactionResultResponse response) {
   
          if(response.getResponseCode().equals(APIResponseCode.TransactionAuthenticateRedirect) || response.getResponseCode().equals(APIResponseCode.TransactionAuthenticateFullRedirect)) {
   
                String redirectUrl = response.getData(); //Open WebView
          } else if(response.getResponseCode().equals(APIResponseCode.TransactionCompleted)) {
   
               //Inquiry payment result by using invoice no.
          } else {
   
               //Get error response and display error.
          }
     }
   
     @Override
     public void onFailure(Throwable error) {
   
          //Get error response and display error.
     }
});
[[PGWSDK shared] proceedTransactionWithTransactionResultRequest: transactionResultRequest response: ^(TransactionResultResponse * _Nonnull response) {
             
     if([response.responseCode isEqualToString: APIResponseCode.TransactionAuthenticateRedirect] || [response.responseCode isEqualToString: APIResponseCode.TransactionAuthenticateFullRedirect]) {
                 
          NSString *redirectUrl = response.data; //Open WebView
     } else if([response.responseCode isEqualToString: APIResponseCode.TransactionCompleted]) {
                 
          //Inquiry payment result by using invoice no.
     } else {
                 
          //Get error response and display error.
     }
} failure: ^(NSError * _Nonnull error) {
             
     //Get error response and display error.
}];
PGWSDK.shared.proceedTransaction(transactionResultRequest: transactionResultRequest, { (response: TransactionResultResponse) in
     
     if response.responseCode == APIResponseCode.TransactionAuthenticateRedirect || response.responseCode == APIResponseCode.TransactionAuthenticateFullRedirect {
                  
           guard let redirectUrl: String = response.data else { return } //Open WebView
     } else if response.responseCode == APIResponseCode.TransactionCompleted {
                  
           //Inquiry payment result by using invoice no.
     } else {
                  
           //Get error response and display error.
     }
}) { (error: NSError) in
              
     //Get error response and display error.
}

πŸ‘

Callback For Handle PGW Payment Authentication

Please refer : Handle PGW Payment Authentication

Β 
Step 5: Initiate Payment Inquiry.

Retrieve payment detail and card token, required initiate Payment Inquiry API from merchant server end.

πŸ“˜

Payment Inquiry API

Please refer : Payment Inquiry API

Β 

Full Sample Code

Full Sample Code Show below.

//Step 1: Generate payment token id.
String paymentToken = "roZG9I1hk/GYjNt+BYPYbxQtKElbZDs9M5cXuEbE+Z0QTr/yUcl1oG7t0AGoOJlBhzeyBtf5mQi1UqGbjC66E85S4m63CfV/awwNbbLbkxsvfgzn0KSv7JzH3gcs/OIL";
   
//Step 2: Construct installment payment plan request.
PaymentCode paymentCode = new PaymentCode("IPP");
 
PaymentRequest paymentRequest = new CardPaymentBuilder(paymentCode, "4111111111111111")
                                .setExpiryMonth(12)
                                .setExpiryYear(2020)
                                .setSecurityCode("123")
                                .setInstallmentInterestType(InstallmentInterestTypeCode.Merchant)
                                .setInstallmentPeriod(6)
                                .build();
   
//Step 3: Construct transaction request.
TransactionResultRequest transactionResultRequest = new TransactionResultRequestBuilder(paymentToken)
                                                    .with(paymentRequest)
                                                    .build();
   
//Step 4: Execute payment request.
PGWSDK.getInstance().proceedTransaction(transactionResultRequest, new APIResponseCallback<TransactionResultResponse>() {
   
     @Override
     public void onResponse(TransactionResultResponse response) {
   
          if(response.getResponseCode().equals(APIResponseCode.TransactionAuthenticateRedirect) || response.getResponseCode().equals(APIResponseCode.TransactionAuthenticateFullRedirect)) {
   
                String redirectUrl = response.getData(); //Open WebView
          } else if(response.getResponseCode().equals(APIResponseCode.TransactionCompleted)) {
   
               //Inquiry payment result by using invoice no.
          } else {
   
               //Get error response and display error.
          }
     }
   
     @Override
     public void onFailure(Throwable error) {
   
          //Get error response and display error.
     }
});
//Step 1: Generate payment token id.
NSString *paymentToken = @"roZG9I1hk/GYjNt+BYPYbxQtKElbZDs9M5cXuEbE+Z0QTr/yUcl1oG7t0AGoOJlBhzeyBtf5mQi1UqGbjC66E85S4m63CfV/awwNbbLbkxsvfgzn0KSv7JzH3gcs/OIL";
  
//Step 2: Construct installment payment plan request.
PaymentCode *paymentCode = [[PaymentCode alloc] initWithChannelCode: @"IPP"];
  
PaymentRequest *paymentRequest = [[[[[[[[CardPaymentBuilder alloc] initWithPaymentCode: paymentCode cardNo: @"4111111111111111"]
                                         expiryMonth: 12]
                                         expiryYear: 2020]
                                         securityCode: @"123"]
                                         installmentInterestType: InstallmentInterestTypeCode.Merchant]
                                         installmentPeriod: 6]
                                         build];
  
//Step 3: Construct transaction request.  
TransactionResultRequest *transactionResultRequest = [[[[TransactionResultRequestBuilder alloc] initWithPaymentToken: paymentToken]
                                                         withPaymentRequest: paymentRequest]
                                                         build];
      
//Step 4: Execute payment request.
[[PGWSDK shared] proceedTransactionWithTransactionResultRequest: transactionResultRequest response: ^(TransactionResultResponse * _Nonnull response) {
             
     if([response.responseCode isEqualToString: APIResponseCode.TransactionAuthenticateRedirect] || [response.responseCode isEqualToString: APIResponseCode.TransactionAuthenticateFullRedirect]) {
                 
          NSString *redirectUrl = response.data; //Open WebView
     } else if([response.responseCode isEqualToString: APIResponseCode.TransactionCompleted]) {
                 
          //Inquiry payment result by using invoice no.
     } else {
                 
          //Get error response and display error.
     }
} failure: ^(NSError * _Nonnull error) {
             
     //Get error response and display error.
}];
//Step 1: Generate payment token id.
let paymentToken: String = "roZG9I1hk/GYjNt+BYPYbxQtKElbZDs9M5cXuEbE+Z0QTr/yUcl1oG7t0AGoOJlBhzeyBtf5mQi1UqGbjC66E85S4m63CfV/awwNbbLbkxsvfgzn0KSv7JzH3gcs/OIL"
     
//Step 2: Construct installment payment plan request.
let paymentCode: PaymentCode = PaymentCode(channelCode: "IPP")
         
let paymentRequest: PaymentRequest = CardPaymentBuilder(paymentCode: paymentCode, "4111111111111111")
                                     .expiryMonth(12)
                                     .expiryYear(2020)
                                     .securityCode("123")
                                     .installmentInterestType(InstallmentInterestTypeCode.Merchant)
                                     .installmentPeriod(6)
                                     .build()
 
//Step 3: Construct transaction request.
let transactionResultRequest: TransactionResultRequest = TransactionResultRequestBuilder(paymentToken: paymentToken)
                                                         .with(paymentRequest)
                                                         .build()
          
//Step 4: Execute payment request.
PGWSDK.shared.proceedTransaction(transactionResultRequest: transactionResultRequest, { (response: TransactionResultResponse) in
     
     if response.responseCode == APIResponseCode.TransactionAuthenticateRedirect || response.responseCode == APIResponseCode.TransactionAuthenticateFullRedirect {
                  
           guard let redirectUrl: String = response.data else { return } //Open WebView
     } else if response.responseCode == APIResponseCode.TransactionCompleted {
                  
           //Inquiry payment result by using invoice no.
     } else {
                  
           //Get error response and display error.
     }
}) { (error: NSError) in
              
     //Get error response and display error.
}