now query call check after failed and recall refund again
This commit is contained in:
parent
240172214d
commit
affbe79d94
@ -446,4 +446,46 @@ public class KPayViewModel extends ViewModel {
|
|||||||
return repository.qrCloseOrder(request);
|
return repository.qrCloseOrder(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public KPayQRRequest.QRQueryRefundRequest getQueryRefundRequest(String merchOrderId, String mid) {
|
||||||
|
String currentTime = String.valueOf(System.currentTimeMillis());
|
||||||
|
String nonceStr = generateNonceStr();
|
||||||
|
|
||||||
|
Map<String, Object> bizContentMap = new HashMap<>();
|
||||||
|
bizContentMap.put("appid", appId);
|
||||||
|
bizContentMap.put("merch_code", mid);
|
||||||
|
bizContentMap.put("merch_order_id", merchOrderId);
|
||||||
|
|
||||||
|
Map<String, Object> requestMap = new HashMap<>();
|
||||||
|
requestMap.put("timestamp", currentTime);
|
||||||
|
requestMap.put("nonce_str", nonceStr);
|
||||||
|
requestMap.put("method", "kbz.payment.queryrefund");
|
||||||
|
requestMap.put("sign_type", "SHA256");
|
||||||
|
requestMap.put("version", "1.0");
|
||||||
|
requestMap.put("biz_content", bizContentMap);
|
||||||
|
|
||||||
|
String sign = Sign.INSTANCE.generateSign(requestMap, appKey);
|
||||||
|
|
||||||
|
KPayQRRequest.QRQueryRefundRequest.Request.BizContent bizContent =
|
||||||
|
new KPayQRRequest.QRQueryRefundRequest.Request.BizContent(appId, mid, merchOrderId);
|
||||||
|
|
||||||
|
KPayQRRequest.QRQueryRefundRequest.Request requestBody =
|
||||||
|
new KPayQRRequest.QRQueryRefundRequest.Request(
|
||||||
|
currentTime,
|
||||||
|
nonceStr,
|
||||||
|
"kbz.payment.queryrefund",
|
||||||
|
"SHA256",
|
||||||
|
sign,
|
||||||
|
"1.0",
|
||||||
|
bizContent
|
||||||
|
);
|
||||||
|
|
||||||
|
return new KPayQRRequest.QRQueryRefundRequest(requestBody);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Observable<KPayRefund.RefundResponse> checkRefundStatus(KPayQRRequest.QRQueryRefundRequest request) {
|
||||||
|
return repository.checkRefundStatus(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -13,6 +13,7 @@ import androidx.annotation.Nullable;
|
|||||||
|
|
||||||
import com.utsmm.kbz.util.tms.TMSUtil;
|
import com.utsmm.kbz.util.tms.TMSUtil;
|
||||||
import com.utsmyanmar.baselib.fragment.DataBindingFragment;
|
import com.utsmyanmar.baselib.fragment.DataBindingFragment;
|
||||||
|
import com.utsmyanmar.baselib.network.model.KPayQRRequest;
|
||||||
import com.utsmyanmar.baselib.network.model.KPayRefund;
|
import com.utsmyanmar.baselib.network.model.KPayRefund;
|
||||||
//import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptQRRequest;
|
//import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptQRRequest;
|
||||||
import com.utsmyanmar.baselib.util.DataBindingConfig;
|
import com.utsmyanmar.baselib.util.DataBindingConfig;
|
||||||
@ -56,6 +57,8 @@ public class QRRefundFragment extends DataBindingFragment {
|
|||||||
private boolean isPartialRefund = false;
|
private boolean isPartialRefund = false;
|
||||||
|
|
||||||
CompositeDisposable refundDisposable = new CompositeDisposable();
|
CompositeDisposable refundDisposable = new CompositeDisposable();
|
||||||
|
|
||||||
|
CompositeDisposable refundStatusDisposable = new CompositeDisposable();
|
||||||
CompositeDisposable retrieveUpdateDisposable = new CompositeDisposable();
|
CompositeDisposable retrieveUpdateDisposable = new CompositeDisposable();
|
||||||
|
|
||||||
private static final String TAG = QRRefundFragment.class.getSimpleName();
|
private static final String TAG = QRRefundFragment.class.getSimpleName();
|
||||||
@ -99,6 +102,7 @@ public class QRRefundFragment extends DataBindingFragment {
|
|||||||
public void onDestroyView() {
|
public void onDestroyView() {
|
||||||
super.onDestroyView();
|
super.onDestroyView();
|
||||||
refundDisposable.dispose();
|
refundDisposable.dispose();
|
||||||
|
refundStatusDisposable.dispose();
|
||||||
retrieveUpdateDisposable.dispose();
|
retrieveUpdateDisposable.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,7 +175,7 @@ public class QRRefundFragment extends DataBindingFragment {
|
|||||||
.subscribe(
|
.subscribe(
|
||||||
response -> {
|
response -> {
|
||||||
dismissLoadingDialog();
|
dismissLoadingDialog();
|
||||||
handleRefundResponse(response, referenceNo);
|
handleRefundResponse(response, referenceNo, originalAmount);
|
||||||
},
|
},
|
||||||
throwable -> {
|
throwable -> {
|
||||||
dismissLoadingDialog();
|
dismissLoadingDialog();
|
||||||
@ -186,7 +190,39 @@ public class QRRefundFragment extends DataBindingFragment {
|
|||||||
refundDisposable.add(refundDi);
|
refundDisposable.add(refundDi);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleRefundResponse(KPayRefund.RefundResponse response, String referenceNo) {
|
private void callQueryRefund(String referenceNo, String orgAmount) {
|
||||||
|
String mid = payDetail.getMerchantNo();
|
||||||
|
|
||||||
|
KPayQRRequest.QRQueryRefundRequest request = KPayViewModel.getQueryRefundRequest(referenceNo, mid);
|
||||||
|
showLoadingDialog("Checking refund...");
|
||||||
|
|
||||||
|
refundStatusDisposable.add(KPayViewModel.checkRefundStatus(request)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(response -> {
|
||||||
|
dismissLoadingDialog();
|
||||||
|
|
||||||
|
if (response == null || response.getResponse() == null) {
|
||||||
|
LogUtil.d(TAG, "Query refund: null response");
|
||||||
|
sharedViewModel.payDetail.setValue(payDetail);
|
||||||
|
navigateToNext();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LogUtil.d(TAG, "Query refund result: " + response.getResponse().getResult());
|
||||||
|
LogUtil.d(TAG, "Query refund status: " + response.getResponse().getRefundStatus());
|
||||||
|
|
||||||
|
handleRefundResponse(response, referenceNo, orgAmount);
|
||||||
|
|
||||||
|
}, throwable -> {
|
||||||
|
throwable.printStackTrace();
|
||||||
|
dismissLoadingDialog();
|
||||||
|
sharedViewModel.payDetail.setValue(payDetail);
|
||||||
|
navigateToNext();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleRefundResponse(KPayRefund.RefundResponse response, String referenceNo, String orgAmount) {
|
||||||
if (response != null && response.getResponse() != null && "REFUND_SUCCESS".equalsIgnoreCase(response.getResponse().getRefundStatus())) {
|
if (response != null && response.getResponse() != null && "REFUND_SUCCESS".equalsIgnoreCase(response.getResponse().getRefundStatus())) {
|
||||||
LogUtil.d(TAG, "Refund successful!");
|
LogUtil.d(TAG, "Refund successful!");
|
||||||
|
|
||||||
@ -203,6 +239,10 @@ public class QRRefundFragment extends DataBindingFragment {
|
|||||||
|
|
||||||
retrievedUpdatePayDetail(referenceNo);
|
retrievedUpdatePayDetail(referenceNo);
|
||||||
|
|
||||||
|
} else if (response != null && response.getResponse() != null
|
||||||
|
&& "DUPLICATED_REFUND_REQ_NO".equalsIgnoreCase(response.getResponse().getCode())){
|
||||||
|
LogUtil.d(TAG, "Duplicated refund request, querying actual result...");
|
||||||
|
callQueryRefund(referenceNo , orgAmount);
|
||||||
}else {
|
}else {
|
||||||
LogUtil.d(TAG, "Refund failed!");
|
LogUtil.d(TAG, "Refund failed!");
|
||||||
payDetail.setQrTransStatus(-1);
|
payDetail.setQrTransStatus(-1);
|
||||||
|
|||||||
@ -173,7 +173,10 @@ public class QRRefundProcessFragment extends DataBindingFragment {
|
|||||||
|
|
||||||
retrievedUpdatePayDetail(referenceNo);
|
retrievedUpdatePayDetail(referenceNo);
|
||||||
|
|
||||||
} else {
|
} else if (response != null && response.getResponse() != null && "DUPLICATED_REFUND_REQ_NO".equalsIgnoreCase(response.getResponse().getRefundStatus())) {
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
LogUtil.d(TAG, "Refund failed!");
|
LogUtil.d(TAG, "Refund failed!");
|
||||||
payDetail.setQrTransStatus(-1);
|
payDetail.setQrTransStatus(-1);
|
||||||
payDetail.setReferNo(referenceNo);
|
payDetail.setReferNo(referenceNo);
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package com.utsmyanmar.baselib.network;
|
|||||||
import com.utsmyanmar.baselib.network.model.KPayQRQueryRequest;
|
import com.utsmyanmar.baselib.network.model.KPayQRQueryRequest;
|
||||||
import com.utsmyanmar.baselib.network.model.KPayQRRequest;
|
import com.utsmyanmar.baselib.network.model.KPayQRRequest;
|
||||||
import com.utsmyanmar.baselib.network.model.KPayQRResponse;
|
import com.utsmyanmar.baselib.network.model.KPayQRResponse;
|
||||||
|
import com.utsmyanmar.baselib.network.model.KPayRefund;
|
||||||
|
|
||||||
import io.reactivex.rxjava3.core.Observable;
|
import io.reactivex.rxjava3.core.Observable;
|
||||||
import retrofit2.http.Body;
|
import retrofit2.http.Body;
|
||||||
@ -27,4 +28,6 @@ public interface KPayApiService {
|
|||||||
@POST("closeorder")
|
@POST("closeorder")
|
||||||
Observable<KPayQRRequest.CloseOrderResponse> closeOrder(@Body KPayQRRequest.CloseOrderRequest closeOrderRequest);
|
Observable<KPayQRRequest.CloseOrderResponse> closeOrder(@Body KPayQRRequest.CloseOrderRequest closeOrderRequest);
|
||||||
|
|
||||||
|
@POST("queryrefund")
|
||||||
|
Observable<KPayRefund.RefundResponse> checkRefundStatus(@Body KPayQRRequest.QRQueryRefundRequest request);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -575,4 +575,82 @@ public class KPayQRRequest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class QRQueryRefundRequest {
|
||||||
|
|
||||||
|
@SerializedName("Request")
|
||||||
|
private Request request;
|
||||||
|
|
||||||
|
public QRQueryRefundRequest() {}
|
||||||
|
|
||||||
|
public QRQueryRefundRequest(Request request) {
|
||||||
|
this.request = request;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Request getRequest() { return request; }
|
||||||
|
public void setRequest(Request request) { this.request = request; }
|
||||||
|
|
||||||
|
public static class Request {
|
||||||
|
@SerializedName("timestamp")
|
||||||
|
private String timestamp;
|
||||||
|
|
||||||
|
@SerializedName("nonce_str")
|
||||||
|
private String nonceStr;
|
||||||
|
|
||||||
|
@SerializedName("method")
|
||||||
|
private String method;
|
||||||
|
|
||||||
|
@SerializedName("sign_type")
|
||||||
|
private String signType;
|
||||||
|
|
||||||
|
@SerializedName("sign")
|
||||||
|
private String sign;
|
||||||
|
|
||||||
|
@SerializedName("version")
|
||||||
|
private String version;
|
||||||
|
|
||||||
|
@SerializedName("biz_content")
|
||||||
|
private BizContent bizContent;
|
||||||
|
|
||||||
|
public Request(String timestamp, String nonceStr, String method,
|
||||||
|
String signType, String sign, String version, BizContent bizContent) {
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
this.nonceStr = nonceStr;
|
||||||
|
this.method = method;
|
||||||
|
this.signType = signType;
|
||||||
|
this.sign = sign;
|
||||||
|
this.version = version;
|
||||||
|
this.bizContent = bizContent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTimestamp() { return timestamp; }
|
||||||
|
public String getNonceStr() { return nonceStr; }
|
||||||
|
public String getMethod() { return method; }
|
||||||
|
public String getSignType() { return signType; }
|
||||||
|
public String getSign() { return sign; }
|
||||||
|
public String getVersion() { return version; }
|
||||||
|
public BizContent getBizContent() { return bizContent; }
|
||||||
|
|
||||||
|
public static class BizContent {
|
||||||
|
@SerializedName("appid")
|
||||||
|
private String appId;
|
||||||
|
|
||||||
|
@SerializedName("merch_code")
|
||||||
|
private String merchCode;
|
||||||
|
|
||||||
|
@SerializedName("merch_order_id")
|
||||||
|
private String merchOrderId;
|
||||||
|
|
||||||
|
public BizContent(String appId, String merchCode, String merchOrderId) {
|
||||||
|
this.appId = appId;
|
||||||
|
this.merchCode = merchCode;
|
||||||
|
this.merchOrderId = merchOrderId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAppId() { return appId; }
|
||||||
|
public String getMerchCode() { return merchCode; }
|
||||||
|
public String getMerchOrderId() { return merchOrderId; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -328,4 +328,8 @@ public class Repository {
|
|||||||
public LiveData<List<PayDetail>> getAllQRHistory(){ return payDetailDao.getAllQRHistory();}
|
public LiveData<List<PayDetail>> getAllQRHistory(){ return payDetailDao.getAllQRHistory();}
|
||||||
|
|
||||||
public LiveData<List<PayDetail>> getRefundableQRHistory(){ return payDetailDao.getRefundableQRHistory(); }
|
public LiveData<List<PayDetail>> getRefundableQRHistory(){ return payDetailDao.getRefundableQRHistory(); }
|
||||||
|
|
||||||
|
public Observable<KPayRefund.RefundResponse> checkRefundStatus(KPayQRRequest.QRQueryRefundRequest request) {
|
||||||
|
return kPayApiService.checkRefundStatus(request);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user