Pay At Counter

Pay at Counter allow customer to generate a payment slips and make payment at the physical counter.

Mobile SDK allow customer to generate payment slips by using your mobile app.

 

Below are steps to integrate Pay At Counter Payment.

Step 1 : Generate Payment Token

Step 2 : Construct Payment Request

Step 3 : Construct Transaction Request

Step 4 : Execute Payment Request

 

Full Sample Code

 

📘

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": ["COUNTER"]
}

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

String paymentToken = "roZG9I1hk/GYjNt+BYPYbxQtKElbZDs9M5cXuEbE+Z0QTr/yUcl1oG7t0AGoOJlBhzeyBtf5mQi1UqGbjC66E85S4m63CfV/awwNbbLbkxsvfgzn0KSv7JzH3gcs/OIL";
NSString *paymentToken = @"roZG9I1hk/GYjNt+BYPYbxQtKElbZDs9M5cXuEbE+Z0QTr/yUcl1oG7t0AGoOJlBhzeyBtf5mQi1UqGbjC66E85S4m63CfV/awwNbbLbkxsvfgzn0KSv7JzH3gcs/OIL";
let paymentToken: String = "roZG9I1hk/GYjNt+BYPYbxQtKElbZDs9M5cXuEbE+Z0QTr/yUcl1oG7t0AGoOJlBhzeyBtf5mQi1UqGbjC66E85S4m63CfV/awwNbbLbkxsvfgzn0KSv7JzH3gcs/OIL"

 

Step 2 : Construct Payment Request

Below code show how to construct payment request.

📘

Payment Request Parameter

Please refer: Pay At Counter Payment Request API Parameter

🚧

Payment Channel & Agent

Pay at Counter payment method support a few options.
Please refer Payment Channel Matrix to know the Channel & Agent for each individual option.

PaymentCode paymentCode = new PaymentCode("123", "BIGC", "OVERTHECOUNTER");
 
PaymentRequest paymentRequest = new PayAtCounterBuilder(paymentCode)
                                .setName("DavidBilly")
                                .setEmail("[email protected]")
                                .setMobileNo("08888888")
                                .build();
PaymentCode *paymentCode = [[PaymentCode alloc] initWithChannelCode: @"123" agentCode: @"BIGC" agentChannelCode: @"OVERTHECOUNTER"];
          
PaymentRequest *paymentRequest = [[[[[[PayAtCounterBuilder alloc] initWithPaymentCode: paymentCode]
                                       name: @"DavidBilly"]
                                       email: @"[email protected]"]
                                       mobileNo: @"08888888"]
                                       build];
let paymentCode: PaymentCode = PaymentCode(channelCode: "123", "BIGC", "OVERTHECOUNTER")
 
let paymentRequest: PaymentRequest = PayAtCounterBuilder(paymentCode: paymentCode)
                                     .name("DavidBilly")
                                     .email("[email protected]")
                                     .mobileNo("08888888")
                                     .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.TransactionPaymentSlip)) {
 
               String paymentSlipUrl = response.getData(); //Open payment slip on WebView
           } 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.TransactionPaymentSlip]) {
                     
         NSString *paymentSlipUrl = response.data; //Open payment slip on WebView
     } 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.TransactionPaymentSlip {
             
          guard let paymentSlipUrl: String = response.data else { return } //Open payment slip on WebView
     } 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

 

Full Sample Code

Full Sample Code Show below.

//Step 1 : Generate payment token
String paymentToken = "roZG9I1hk/GYjNt+BYPYbxQtKElbZDs9M5cXuEbE+Z0QTr/yUcl1oG7t0AGoOJlBhzeyBtf5mQi1UqGbjC66E85S4m63CfV/awwNbbLbkxsvfgzn0KSv7JzH3gcs/OIL";
 
//Step 2: Construct Pay At Counter request.
PaymentCode paymentCode = new PaymentCode("123", "BIGC", "OVERTHECOUNTER");
 
PaymentRequest paymentRequest = new PayAtCounterBuilder(paymentCode)
                                .setName("DavidBilly")
                                .setEmail("[email protected]")
                                .setMobileNo("08888888")
                                .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.TransactionPaymentSlip)) {
 
               String paymentSlipUrl = response.getData(); //Open payment slip on WebView
           } else {
 
               //Get error response and display error.
           }
     }
 
     @Override
     public void onFailure(Throwable error) {
 
          //Get error response and display error.
     }
});
//Step 1 : Generate payment token
NSString *paymentToken = @"roZG9I1hk/GYjNt+BYPYbxQtKElbZDs9M5cXuEbE+Z0QTr/yUcl1oG7t0AGoOJlBhzeyBtf5mQi1UqGbjC66E85S4m63CfV/awwNbbLbkxsvfgzn0KSv7JzH3gcs/OIL";
 
//Step 2: Construct Pay At Counter request.
PaymentCode *paymentCode = [[PaymentCode alloc] initWithChannelCode: @"123" agentCode: @"BIGC" agentChannelCode: @"OVERTHECOUNTER"];
          
PaymentRequest *paymentRequest = [[[[[[PayAtCounterBuilder alloc] initWithPaymentCode: paymentCode]
                                       name: @"DavidBilly"]
                                       email: @"[email protected]"]
                                       mobileNo: @"08888888"]
                                       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.TransactionPaymentSlip]) {
                     
         NSString *paymentSlipUrl = response.data; //Open payment slip on WebView
     } else {
                
         //Get error response and display error.
     }
} failure: ^(NSError * _Nonnull error) {
            
     //Get error response and display error.
}];
//Step 1 : Generate payment token
let paymentToken: String = "roZG9I1hk/GYjNt+BYPYbxQtKElbZDs9M5cXuEbE+Z0QTr/yUcl1oG7t0AGoOJlBhzeyBtf5mQi1UqGbjC66E85S4m63CfV/awwNbbLbkxsvfgzn0KSv7JzH3gcs/OIL"
    
//Step 2: Construct Pay At Counter request.
let paymentCode: PaymentCode = PaymentCode(channelCode: "123", "BIGC", "OVERTHECOUNTER")
 
let paymentRequest: PaymentRequest = PayAtCounterBuilder(paymentCode: paymentCode)
                                     .name("DavidBilly")
                                     .email("[email protected]")
                                     .mobileNo("08888888")
                                     .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.TransactionPaymentSlip {
             
          guard let paymentSlipUrl: String = response.data else { return } //Open payment slip on WebView
     } else {
                 
          //Get error response and display error.
     }
}) { (error: NSError) in
             
     //Get error response and display error.
}