Browse Source

Implement Cancel Function

WIP Void/Inquiry/Settlement
hbw_build
Wong Joon Hui 2 years ago
parent
commit
187ed7a622
  1. 19
      app/src/main/java/com/cst/im30/MainApplication.java
  2. 193
      app/src/main/java/com/cst/im30/activity/MainActivity.java
  3. 88
      app/src/main/java/com/cst/im30/activity/ResponseActivity.java
  4. 13
      app/src/main/java/com/cst/im30/model/CancelRequest.java
  5. 13
      app/src/main/java/com/cst/im30/model/CancelResponse.java
  6. 6
      app/src/main/java/com/cst/im30/model/EventLogDetailed.java
  7. 25
      app/src/main/java/com/cst/im30/model/InquiryRequest.java
  8. 29
      app/src/main/java/com/cst/im30/model/InquiryResponse.java
  9. 2
      app/src/main/java/com/cst/im30/model/SaleRequest.java
  10. 19
      app/src/main/java/com/cst/im30/model/SetDateTimeRequest.java
  11. 16
      app/src/main/java/com/cst/im30/model/SetDateTimeResponse.java
  12. 19
      app/src/main/java/com/cst/im30/model/SettlementRequest.java
  13. 21
      app/src/main/java/com/cst/im30/model/SettlementResponse.java
  14. 28
      app/src/main/java/com/cst/im30/model/VoidRequest.java
  15. 37
      app/src/main/java/com/cst/im30/model/VoidResponse.java
  16. 4
      app/src/main/java/com/cst/im30/service/PaymentService.java
  17. 6
      app/src/main/java/com/cst/im30/utility/Logger.java
  18. 25
      app/src/main/java/com/cst/im30/utility/PaymentUtils.java

19
app/src/main/java/com/cst/im30/MainApplication.java

@ -11,6 +11,8 @@ import android.os.Looper;
import android.util.Log;
import com.cst.im30.activity.MainActivity;
import com.cst.im30.model.CancelRequest;
import com.cst.im30.model.CancelResponse;
import com.cst.im30.model.EventLogDetailed;
import com.cst.im30.model.PreAuthRequest;
import com.cst.im30.model.PreAuthResponse;
@ -18,6 +20,9 @@ import com.cst.im30.model.SaleCompletionRequest;
import com.cst.im30.model.SaleCompletionResponse;
import com.cst.im30.model.SaleRequest;
import com.cst.im30.model.SaleResponse;
import com.cst.im30.model.VoidRequest;
import com.cst.im30.model.VoidResponse;
import com.cst.im30.utility.Logger;
public class MainApplication extends Application {
@ -25,12 +30,19 @@ public class MainApplication extends Application {
public static boolean working = false;
public static String incomingCode = null;
public static String currentCode = null;
public static EventLogDetailed currentEventLogDetailed = null;
public static SaleRequest currentSaleRequest = null;
public static SaleResponse currentSaleResponse = null;
public static VoidRequest currentVoidRequest = null;
public static VoidResponse currentVoidResponse = null;
public static CancelRequest currentCancelRequest = null;
public static CancelResponse currentCancelResponse = null;
public static PreAuthRequest currentPreAuthRequest = null;
public static PreAuthResponse currentPreAuthResponse = null;
@ -43,14 +55,21 @@ public class MainApplication extends Application {
public static void reset() {
working = false;
incomingCode = null;
currentCode = null;
currentEventLogDetailed = null;
currentSaleRequest = null;
currentSaleResponse = null;
currentVoidRequest = null;
currentVoidResponse = null;
currentCancelRequest = null;
currentCancelResponse = null;
currentPreAuthRequest = null;
currentPreAuthResponse = null;
currentSaleCompletionRequest = null;
currentSaleCompletionResponse = null;
Logger.logI("RESET");
}
@Override

193
app/src/main/java/com/cst/im30/activity/MainActivity.java

@ -26,10 +26,12 @@ import com.cst.im30.MainApplication;
import com.cst.im30.R;
import com.cst.im30.common.CallableInterface;
import com.cst.im30.common.Constants;
import com.cst.im30.model.CancelRequest;
import com.cst.im30.model.EventLogDetailed;
import com.cst.im30.model.PreAuthRequest;
import com.cst.im30.model.SaleCompletionRequest;
import com.cst.im30.model.SaleRequest;
import com.cst.im30.model.VoidRequest;
import com.cst.im30.service.IDVerificationService;
import com.cst.im30.service.PaymentService;
import com.cst.im30.utility.Logger;
@ -105,8 +107,6 @@ public class MainActivity extends AppCompatActivity implements CallableInterface
initEchoClient();
connectEchoClient();
//checkPaymentResult();
}
@Override
@ -116,7 +116,6 @@ public class MainActivity extends AppCompatActivity implements CallableInterface
Intent incomingIntent = getIntent();
String action = incomingIntent.getAction();
if (Constants.INTENT_REFRESH.equalsIgnoreCase(action)) {
String code = incomingIntent.getStringExtra("code");
String status = incomingIntent.getStringExtra("status");
@ -203,8 +202,6 @@ public class MainActivity extends AppCompatActivity implements CallableInterface
}
private void initViews() {
startWork();
runOnUiThread(() -> {
sliderLayout.setVisibility(View.INVISIBLE);
testTitle.setVisibility(View.INVISIBLE);
@ -223,7 +220,6 @@ public class MainActivity extends AppCompatActivity implements CallableInterface
load.setVisibility(View.GONE);
});
stopWork();
}
private void paymentProcess(EventLogDetailed eventLogDetailed) {
@ -236,6 +232,16 @@ public class MainActivity extends AppCompatActivity implements CallableInterface
if (Constants.PAY_FUNCTION_SALE.equalsIgnoreCase(payFunction)) {
handlePayFunctionSale(eventLogDetailed);
} else if (Constants.PAY_FUNCTION_VOID.equalsIgnoreCase(payFunction)) {
handlePayFunctionVoid(eventLogDetailed);
} else if (Constants.PAY_FUNCTION_INQUIRY.equalsIgnoreCase(payFunction)) {
//handlePayFunctionPreAuth(eventLogDetailed);
} else if (Constants.PAY_FUNCTION_CANCEL.equalsIgnoreCase(payFunction)) {
handlePayFunctionCancel(eventLogDetailed);
} else if (Constants.PAY_FUNCTION_SETTLEMENT.equalsIgnoreCase(payFunction)) {
//handlePayFunctionPreAuth(eventLogDetailed);
} else if (Constants.PAY_FUNCTION_SET_DATE_TIME.equalsIgnoreCase(payFunction)) {
//handlePayFunctionPreAuth(eventLogDetailed);
} else if (Constants.PAY_FUNCTION_PRE_AUTH.equalsIgnoreCase(payFunction)) {
handlePayFunctionPreAuth(eventLogDetailed);
} else if (Constants.PAY_FUNCTION_SALE_COMPLETION.equalsIgnoreCase(payFunction)) {
@ -244,7 +250,7 @@ public class MainActivity extends AppCompatActivity implements CallableInterface
String msg = "Unsupported Pay Function: " + payFunction;
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
resetView();
Logger.logWTF(msg);
Logger.logW(msg);
}
}
@ -254,17 +260,32 @@ public class MainActivity extends AppCompatActivity implements CallableInterface
initSalePayment(request);
} else {
Toast.makeText(MainActivity.this, "Invalid Sale Request", Toast.LENGTH_SHORT).show();
Logger.logWTF("Invalid Sale Request: " + request.toString());
Logger.logW("Invalid Sale Request: " + request.toString());
}
}
private void handlePayFunctionVoid(EventLogDetailed eventLogDetailed) {
VoidRequest request = PaymentUtils.createVoidRequest(eventLogDetailed);
if (PaymentUtils.validateVoidRequest(request)) {
initVoid(request);
} else {
Toast.makeText(MainActivity.this, "Invalid Void Request", Toast.LENGTH_SHORT).show();
Logger.logW("Invalid Void Request: " + request.toString());
}
}
private void handlePayFunctionCancel(EventLogDetailed eventLogDetailed) {
CancelRequest request = new CancelRequest();
initCancel(request);
}
private void handlePayFunctionPreAuth(EventLogDetailed eventLogDetailed) {
PreAuthRequest request = PaymentUtils.createPreAuthRequest(eventLogDetailed);
if (PaymentUtils.validatePreAuthRequest(request)) {
initPreAuth(request);
} else {
Toast.makeText(MainActivity.this, "Invalid Pre Auth Request", Toast.LENGTH_SHORT).show();
Logger.logWTF("Invalid Pre Auth Request: " + request.toString());
Logger.logW("Invalid Pre Auth Request: " + request.toString());
}
}
@ -274,76 +295,10 @@ public class MainActivity extends AppCompatActivity implements CallableInterface
initSaleCompletion(request);
} else {
Toast.makeText(MainActivity.this, "Invalid Sale Completion Request", Toast.LENGTH_SHORT).show();
Logger.logWTF("Invalid Sale Completion Request: " + request.toString());
Logger.logW("Invalid Sale Completion Request: " + request.toString());
}
}
private void checkPaymentResult() {
//Get status from Status Screen
Intent intent = getIntent();
Bundle retryInfoGet = intent.getExtras();
if (retryInfoGet != null) {
String referenceSet = (String) retryInfoGet.get("referenceCurrent");
String statusSet = (String) retryInfoGet.get("statusCurrent");
//set status null
if (statusSet != null) {
status = statusSet;
} else {
status = "start";
}
String amountSet = (String) retryInfoGet.get("amountCurrent");
//if payment success
if (status.toLowerCase().trim().equals("success")) {
} else if (status.toLowerCase().trim().equals("pending")) {
initViews();
//if payment fail
/*Button buttonRetryPayment = (Button) findViewById(R.id.button_retry_payment);
buttonRetryPayment.getBackground().setColorFilter(Color.CYAN, PorterDuff.Mode.MULTIPLY);
buttonRetryPayment.setEnabled(true);
//Get data from StatusActivty - refNum & amount only
//String referenceNumber = StatusActivity.getRefNum();
//get and set again
*//*textViewViewRespTranslateRefNum = findViewById(R.id.textview_response_translate_refNum);
textViewViewRespTranslateStatus = findViewById(R.id.textview_response_translate_status);
textViewViewRespTranslateAmount = findViewById(R.id.textview_response_translate_amount);*//*
//String statusTemp = StatusActivity.getStatus();
//runOnUiThread(() -> textViewViewRespTranslateStatus.setText(statusSet));
//String amount = StatusActivity.getAmount();
//runOnUiThread(() -> textViewViewRespTranslateAmount.setText("RM " + amountSet));
//for checking
if (buttonRetryPayment.isEnabled()) {*/
//show payment info
//if user click retry ->disable coz show retry on status activity
//buttonRetryPayment.setOnClickListener(v -> retryPayment());
//}
} else {
//if return fail
//runOnUiThread(() -> textViewViewRespTranslateRefNum.setText("Reference Number..."));
//runOnUiThread(() -> textViewViewRespTranslateStatus.setText("Status..."));
//runOnUiThread(() -> textViewViewRespTranslateAmount.setText("Amount..."));
}
}
//refreshUI();
//if null
/*runOnUiThread(() -> textViewViewRespTranslateRefNum.setText("Reference Number..."));
runOnUiThread(() -> textViewViewRespTranslateStatus.setText("Status..."));
runOnUiThread(() -> textViewViewRespTranslateAmount.setText("Amount..."));*/
}
private void receiveMessagePayment(Object... args) {
Logger.logD("Received Payment Message");
@ -351,23 +306,15 @@ public class MainActivity extends AppCompatActivity implements CallableInterface
String data;
try {
data = jsonObject.getJSONObject("data").getString("code");
MainApplication.currentCode = data;
MainApplication.incomingCode = data;
} catch (JSONException e) {
e.printStackTrace();
}
if (MainApplication.working) {
Logger.logE("Received Payment Message but IM30 is currently working!");
PaymentService service = new PaymentService(this);
service.verifyReject(MainApplication.currentCode);
return;
}
if (MainApplication.currentCode != null && !MainApplication.currentCode.isEmpty()) {
if (MainApplication.incomingCode != null && !MainApplication.incomingCode.isEmpty()) {
initViews();
PaymentService service = new PaymentService(this);
service.getEventLog(MainApplication.currentCode);
startWork();
service.getEventLog(MainApplication.incomingCode);
}
}
@ -379,23 +326,25 @@ public class MainActivity extends AppCompatActivity implements CallableInterface
String data;
try {
data = jsonObject.getJSONObject("data").getString("code");
MainApplication.currentCode = data;
MainApplication.incomingCode = data;
} catch (JSONException e) {
e.printStackTrace();
}
// todo adapt for cancel on kiosk / polling
if (MainApplication.working) {
Logger.logE("Received IC Verification Message but IM30 is currently working!");
IDVerificationService service = new IDVerificationService(this);
service.verifyReject(MainApplication.currentCode);
service.verifyReject(MainApplication.incomingCode);
return;
} else {
startWork();
}
if (MainApplication.currentCode != null && !MainApplication.currentCode.isEmpty()) {
if (MainApplication.incomingCode != null && !MainApplication.incomingCode.isEmpty()) {
initViews();
IDVerificationService service = new IDVerificationService(this);
service.getEventLog(MainApplication.currentCode);
startWork();
service.getEventLog(MainApplication.incomingCode);
}
}
@ -405,6 +354,7 @@ public class MainActivity extends AppCompatActivity implements CallableInterface
// NRIC
if (source.equalsIgnoreCase(IDVerificationService.SUCCESS_GET_EVENT_LOG)) {
MainApplication.currentCode = MainApplication.incomingCode;
MainApplication.currentEventLogDetailed = (EventLogDetailed) object;
Intent i = new Intent(MainActivity.this, ICCActivity.class);
icVerificationLauncher.launch(i);
@ -420,9 +370,24 @@ public class MainActivity extends AppCompatActivity implements CallableInterface
// Payment
else if (source.equalsIgnoreCase(PaymentService.SUCCESS_GET_EVENT_LOG)) {
MainApplication.currentEventLogDetailed = (EventLogDetailed) object;
paymentProcess(MainApplication.currentEventLogDetailed);
startWork();
EventLogDetailed incomingEventLogDetailed = (EventLogDetailed) object;
boolean cancelPayFunction = incomingEventLogDetailed.getPayFunction().equalsIgnoreCase(Constants.PAY_FUNCTION_CANCEL);
if (cancelPayFunction) {
// Cancel whether working or not at the moment
MainApplication.currentEventLogDetailed = incomingEventLogDetailed;
paymentProcess(MainApplication.currentEventLogDetailed);
} else {
if (MainApplication.working) {
Logger.logE("Received Payment Message but IM30 is currently working!");
PaymentService service = new PaymentService(this);
service.verifyReject(MainApplication.incomingCode);
} else {
startWork();
MainApplication.currentEventLogDetailed = incomingEventLogDetailed;
paymentProcess(MainApplication.currentEventLogDetailed);
}
}
} else if (source.equalsIgnoreCase(PaymentService.FAIL_GET_EVENT_LOG)) {
resetView(); //todo try again? ^
}
@ -442,7 +407,6 @@ public class MainActivity extends AppCompatActivity implements CallableInterface
}
}
// --- NRIC ------------------------------------------------------------------------------------
private boolean verifyIC(String name, String cardNo) {
@ -515,6 +479,37 @@ public class MainActivity extends AppCompatActivity implements CallableInterface
app2app(extra);
}
private void initVoid(VoidRequest request) {
Logger.logD("Void Payment: " + request.toString());
Bundle extra = new Bundle();
extra.putString("pay_function", request.getPayFunction());
extra.putString("pay_amount", String.valueOf(request.getPayAmount()));
extra.putString("pay_print_receipt_id", request.getPayPrintReceiptId());
extra.putString("pay_trace_no", request.getPayTraceNo());
extra.putString("pay_invoice_no", request.getPayInvoiceNo());
String payPosTxnId = request.getPayPosTxnId();
if (payPosTxnId != null && !payPosTxnId.isEmpty()) {
extra.putString("pay_pos_txn_id", payPosTxnId);
}
MainApplication.currentVoidRequest = request;
app2app(extra);
}
private void initCancel(CancelRequest request) {
Logger.logD(request.toString());
Bundle extra = new Bundle();
extra.putString("pay_function", request.getPayFunction());
MainApplication.currentCancelRequest = request;
app2app(extra);
}
private void initPreAuth(PreAuthRequest request) {
Logger.logD(request.toString());
@ -564,8 +559,6 @@ public class MainActivity extends AppCompatActivity implements CallableInterface
Logger.logD("App2App Call to: " + Constants.APP_2_APP);
startActivity(intent);
startWork();
}
// --- MISC ------------------------------------------------------------------------------------
@ -633,10 +626,6 @@ public class MainActivity extends AppCompatActivity implements CallableInterface
MainApplication.working = true;
}
public void stopWork() {
MainApplication.working = false;
}
@Override
public void onBackPressed() {
Logger.logI("Back Button Disabled!");

88
app/src/main/java/com/cst/im30/activity/ResponseActivity.java

@ -14,11 +14,13 @@ import com.cst.im30.common.CallableInterface;
import com.cst.im30.common.Constants;
import com.cst.im30.common.Parcel;
import com.cst.im30.entity.Transaction;
import com.cst.im30.model.CancelResponse;
import com.cst.im30.model.PreAuthResponse;
import com.cst.im30.model.SaleCompletionRequest;
import com.cst.im30.model.SaleCompletionResponse;
import com.cst.im30.model.SaleRequest;
import com.cst.im30.model.SaleResponse;
import com.cst.im30.model.VoidResponse;
import com.cst.im30.service.PaymentService;
import com.cst.im30.service.UploadTransactionPreAuthPaymentService;
import com.cst.im30.service.UploadTransactionSaleCompletionPaymentService;
@ -48,7 +50,7 @@ public class ResponseActivity extends AppCompatActivity implements CallableInter
Bundle extra = intent.getExtras();
if (extra == null) {
Logger.logWTF("Intent.getExtras() is null!");
Logger.logW("Intent.getExtras() is null!");
return;
}
@ -59,14 +61,23 @@ public class ResponseActivity extends AppCompatActivity implements CallableInter
if (Constants.PAY_FUNCTION_SALE.equalsIgnoreCase(payFunction)) {
handlePayFunctionSale(extra);
}
else if (Constants.PAY_FUNCTION_VOID.equalsIgnoreCase(payFunction)) {
handlePayFunctionVoid(extra);
}
else if (Constants.PAY_FUNCTION_CANCEL.equalsIgnoreCase(payFunction)) {
handlePayFunctionCancel(extra);
}
else if (Constants.PAY_FUNCTION_PRE_AUTH.equalsIgnoreCase(payFunction)) {
handlePayFunctionPreAuth(extra);
}
else if (Constants.PAY_FUNCTION_SALE_COMPLETION.equalsIgnoreCase(payFunction)) {
handlePayFunctionSaleCompletion(extra);
}
else if (payFunction == null || payFunction.isEmpty()) {
finishActivity(false);
}
else {
Logger.logWTF("Unsupported Pay Function: " + payFunction);
Logger.logW("Unsupported Pay Function: " + payFunction);
}
}
@ -114,6 +125,61 @@ public class ResponseActivity extends AppCompatActivity implements CallableInter
service.call(MainApplication.currentEventLogDetailed, MainApplication.currentSaleRequest, MainApplication.currentSaleResponse);
}
private void handlePayFunctionVoid(Bundle extra) {
VoidResponse response = new VoidResponse();
response.setPayAmount(extra.getString("pay_amount"));
response.setPayFunction(extra.getString("pay_function"));
response.setPayType(extra.getString("pay_type"));
response.setPayPrintReceiptId(extra.getString("pay_print_receipt_id"));
response.setPayRespTxnDate(extra.getString("pay_resp_txn_date"));
response.setPayRespTxnTime(extra.getString("pay_resp_txn_time"));
response.setPayRespInvoiceNo(extra.getString("pay_resp_invoice_no"));
response.setPayRespTraceNo(extra.getString("pay_resp_trace_no"));
response.setPayRespBatchNo(extra.getString("pay_resp_batch_no"));
response.setPayRespScheme(extra.getString("pay_resp_scheme"));
response.setPayRespTid(extra.getString("pay_resp_tid"));
response.setPayRespMid(extra.getString("pay_resp_mid"));
response.setPayRespCardAuthCode(extra.getString("pay_resp_card_auth_code"));
response.setPayRespCardRefNum(extra.getString("pay_resp_card_ref_num"));
response.setPayRespQrTxnId(extra.getString("pay_resp_qr_txn_id"));
response.setPayRespQrWalletId(extra.getString("pay_resp_qr_wallet_id"));
response.setPayRespCardNo(extra.getString("pay_resp_card_no"));
response.setPayRespIssuerId(extra.getString("pay_resp_issuer_id"));
response.setPayRespCustomerId(extra.getString("pay_resp_customer_id"));
response.setPayRespCardAppCryptogram(extra.getString("pay_resp_card_app_cryptogram"));
response.setPayRespCode(extra.getString("pay_resp_code"));
response.setPayRespErrorDesc(extra.getString("pay_resp_error_desc"));
response.setPayRespMerchInfo(extra.getString("pay_resp_merch_info"));
response.setPayRespTvr(extra.getString("pay_resp_tvr"));
response.setPayRespCvmDesc(extra.getString("pay_resp_cvm_desc"));
response.setPayRespAppLabel(extra.getString("pay_resp_app_label"));
Logger.logD(response.toString());
MainApplication.currentVoidResponse = response;
code = resolveCode(response.getPayRespCode());
status = resolveStatus(response.getPayRespErrorDesc());
//todo upload void payment?
/*UploadTransactionSalePaymentService service = new UploadTransactionSalePaymentService(ResponseActivity.this);
service.call(MainApplication.currentEventLogDetailed, MainApplication.currentVoidRequest, MainApplication.currentSaleResponse);*/
}
private void handlePayFunctionCancel(Bundle extra) {
CancelResponse response = new CancelResponse();
response.setPayFunction(extra.getString("pay_function"));
response.setPayRespCode(extra.getString("pay_resp_code"));
Logger.logD(response.toString());
MainApplication.currentCancelResponse = response;
finishActivity(false);
}
private void handlePayFunctionPreAuth(Bundle extra) {
PreAuthResponse response = new PreAuthResponse();
@ -237,19 +303,25 @@ public class ResponseActivity extends AppCompatActivity implements CallableInter
}
else if (PaymentService.SUCCESS_UPDATE_EVENT_LOG.equalsIgnoreCase(source)) {
finishActivity();
finishActivity(true);
} else if (PaymentService.FAIL_UPDATE_EVENT_LOG.equalsIgnoreCase(source)) {
finishActivity();
finishActivity(true);
}
}
private void finishActivity() {
private void finishActivity(boolean showResult) {
MainApplication.reset();
Intent intent = new Intent(ResponseActivity.this, MainActivity.class);
intent.setAction(Constants.INTENT_REFRESH);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("code", code);
intent.putExtra("status", status);
if (showResult) {
intent.setAction(Constants.INTENT_REFRESH);
intent.putExtra("code", code);
intent.putExtra("status", status);
}
startActivity(intent);
Logger.logV("Going back to MainActivity");

13
app/src/main/java/com/cst/im30/model/CancelRequest.java

@ -0,0 +1,13 @@
package com.cst.im30.model;
import java.io.Serializable;
import lombok.Data;
@Data
public class CancelRequest implements Serializable {
/** Mandatory 2 - 07 - Cancel **/
private String payFunction = "07";
}

13
app/src/main/java/com/cst/im30/model/CancelResponse.java

@ -0,0 +1,13 @@
package com.cst.im30.model;
import java.io.Serializable;
import lombok.Data;
@Data
public class CancelResponse implements Serializable {
private String payFunction;
private String payRespCode;
}

6
app/src/main/java/com/cst/im30/model/EventLogDetailed.java

@ -21,4 +21,10 @@ public class EventLogDetailed implements Serializable {
// Sale Completion
private String payAuthCode, payRefNum, token;
// Void
private String payTraceNo, payInvoiceNo, payPosTxnId;
// Set Date Time
private String payPosTxnDate, payPosTxnTime;
}

25
app/src/main/java/com/cst/im30/model/InquiryRequest.java

@ -0,0 +1,25 @@
package com.cst.im30.model;
import java.io.Serializable;
import lombok.Data;
@Data
public class InquiryRequest implements Serializable {
/** Mandatory 2 - 03 - Inquiry **/
private String payFunction = "03";
/** Optional 12 - Original amount in cents (RM5.00 is "500") **/
private String payAmount;
/** Optional 1 - Y or N for Print Receipt or Not **/
private String payPrintReceiptId = "N";
/** Conditional 6 - Original Trace Number **/
private String payTraceNo;
/** Conditional 6 - Original Invoice Number **/
private String payInvoiceNo;
}

29
app/src/main/java/com/cst/im30/model/InquiryResponse.java

@ -0,0 +1,29 @@
package com.cst.im30.model;
import java.io.Serializable;
import lombok.Data;
@Data
public class InquiryResponse implements Serializable {
private String payAmount;
private String payFunction;
private String payPrintReceiptId;
private String payRespTxnDate;
private String payRespTxnTime;
private String payRespInvoiceNo;
private String payRespTraceNo;
private String payRespBatchNo;
private String payRespScheme;
private String payRespTid;
private String payRespMid;
private String payRespQrTxnId;
private String payRespQrWalletId;
private String payRespCustomerId;
private String payRespCode;
private String payRespErrorDesc;
private String payRespMerchInfo;
private String payRespIssuerId;
}

2
app/src/main/java/com/cst/im30/model/SaleRequest.java

@ -10,7 +10,7 @@ public class SaleRequest implements Serializable {
/** Mandatory 2 - 01 - Sale **/
private String payFunction = "01";
/** Mandatory 12 - Amount in cents (RM5.00 is "500" **/
/** Mandatory 12 - Amount in cents (RM5.00 is "500") **/
private String payAmount; //
/** Mandatory 2 - 01 Card / 02 QR / 03 DuitNow QR **/

19
app/src/main/java/com/cst/im30/model/SetDateTimeRequest.java

@ -0,0 +1,19 @@
package com.cst.im30.model;
import java.io.Serializable;
import lombok.Data;
@Data
public class SetDateTimeRequest implements Serializable {
/** Mandatory 2 - 12 - Set Date Time **/
private String payFunction = "12";
/** Mandatory 8 - YYYYMMDD **/
private String payPosTxnDate;
/** Mandatory 6 - HHMMSS **/
private String payPosTxnTime;
}

16
app/src/main/java/com/cst/im30/model/SetDateTimeResponse.java

@ -0,0 +1,16 @@
package com.cst.im30.model;
import java.io.Serializable;
import lombok.Data;
@Data
public class SetDateTimeResponse implements Serializable {
private String payFunction;
private String payRespTxnDate;
private String payRespTxnTime;
private String payRespCode;
private String payRespErrorDesc;
}

19
app/src/main/java/com/cst/im30/model/SettlementRequest.java

@ -0,0 +1,19 @@
package com.cst.im30.model;
import java.io.Serializable;
import lombok.Data;
@Data
public class SettlementRequest implements Serializable {
/** Mandatory 2 - 11 - Settlement **/
private String payFunction = "11";
/** Optional 1 - Y or N for Print Receipt or Not **/
private String payPrintReceiptId = "N";
/** Optional 50 **/
private String payPosTxnId;
}

21
app/src/main/java/com/cst/im30/model/SettlementResponse.java

@ -0,0 +1,21 @@
package com.cst.im30.model;
import java.io.Serializable;
import lombok.Data;
@Data
public class SettlementResponse implements Serializable {
private String payFunction;
private String payPrintReceiptId;
private String payRespTxnDate;
private String payRespTxnTime;
private String payRespBatchNo;
private String payRespTid;
private String payRespMid;
private String payRespCode;
private String payRespErrorDesc;
private String payRespMerchInfo;
}

28
app/src/main/java/com/cst/im30/model/VoidRequest.java

@ -0,0 +1,28 @@
package com.cst.im30.model;
import java.io.Serializable;
import lombok.Data;
@Data
public class VoidRequest implements Serializable {
/** Mandatory 2 - 02 - Void **/
private String payFunction = "02";
/** Optional 12 - Original amount in cents (RM5.00 is "500") **/
private String payAmount; //
/** Optional 1 - Y or N for Print Receipt or Not **/
private String payPrintReceiptId = "N";
/** Conditional 6 - Original Trace Number **/
private String payTraceNo;
/** Conditional 6 - Original Invoice Number **/
private String payInvoiceNo;
/** Conditional 50 **/
private String payPosTxnId;
}

37
app/src/main/java/com/cst/im30/model/VoidResponse.java

@ -0,0 +1,37 @@
package com.cst.im30.model;
import java.io.Serializable;
import lombok.Data;
@Data
public class VoidResponse implements Serializable {
private String payAmount;
private String payFunction;
private String payType;
private String payPrintReceiptId;
private String payRespTxnDate;
private String payRespTxnTime;
private String payRespInvoiceNo;
private String payRespTraceNo;
private String payRespBatchNo;
private String payRespScheme;
private String payRespTid;
private String payRespMid;
private String payRespCardAuthCode;
private String payRespCardRefNum;
private String payRespQrTxnId;
private String payRespQrWalletId;
private String payRespCardNo;
private String payRespIssuerId;
private String payRespCustomerId;
private String payRespCardAppCryptogram;
private String payRespCode;
private String payRespErrorDesc;
private String payRespMerchInfo;
private String payRespTvr;
private String payRespCvmDesc;
private String payRespAppLabel;
}

4
app/src/main/java/com/cst/im30/service/PaymentService.java

@ -81,15 +81,15 @@ public class PaymentService {
callback.callBack(SUCCESS_GET_EVENT_LOG, eventLogDetailed);
}
} catch (Exception e) {
Logger.logE(e.getMessage());
e.printStackTrace();
Logger.logE(e.getMessage());
}
}
private void onFailureGetEventLog(Throwable t) {
if (t instanceof Exception) {
Logger.logE(t.getMessage());
((Exception) t).printStackTrace();
t.printStackTrace();
}
callback.callBack(FAIL_GET_EVENT_LOG, t.getMessage());
}

6
app/src/main/java/com/cst/im30/utility/Logger.java

@ -31,6 +31,12 @@ public class Logger {
Log.e(TAG, title + " - " + message);
}
public static void logW(String message) {
StackTraceElement l = new Exception().getStackTrace()[1];
String title = getClassSimpleName(l.getClassName()) + "/" + l.getMethodName() + "():"+l.getLineNumber();
Log.w(TAG, title + " - " + message);
}
public static void logWTF(String message) {
StackTraceElement l = new Exception().getStackTrace()[1];
String title = getClassSimpleName(l.getClassName()) + "/" + l.getMethodName() + "():"+l.getLineNumber();

25
app/src/main/java/com/cst/im30/utility/PaymentUtils.java

@ -4,6 +4,7 @@ import com.cst.im30.model.EventLogDetailed;
import com.cst.im30.model.PreAuthRequest;
import com.cst.im30.model.SaleCompletionRequest;
import com.cst.im30.model.SaleRequest;
import com.cst.im30.model.VoidRequest;
import java.text.DecimalFormat;
@ -23,6 +24,22 @@ public class PaymentUtils {
return request;
}
public static VoidRequest createVoidRequest(EventLogDetailed eventLogDetailed) {
VoidRequest request = new VoidRequest();
double doubleValue = Double.parseDouble(eventLogDetailed.getPayableAmount());
double centValueDouble = doubleValue * 100;
DecimalFormat df = new DecimalFormat("#");
request.setPayAmount(String.valueOf(df.format(centValueDouble)));
request.setPayPosTxnId(eventLogDetailed.getReferenceNumber() + eventLogDetailed.getId());
request.setPayTraceNo(eventLogDetailed.getPayTraceNo());
request.setPayInvoiceNo(eventLogDetailed.getPayInvoiceNo());
return request;
}
public static PreAuthRequest createPreAuthRequest(EventLogDetailed eventLogDetailed) {
PreAuthRequest request = new PreAuthRequest();
@ -61,6 +78,14 @@ public class PaymentUtils {
return valid;
}
public static boolean validateVoidRequest(VoidRequest request) {
boolean valid = true;
//todo
return valid;
}
public static boolean validatePreAuthRequest(PreAuthRequest request) {
boolean valid = true;

Loading…
Cancel
Save