package com.tourguide.common.huifu.biz;
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.huifu.bspay.sdk.opps.core.net.BasePayRequest;
|
import com.tourguide.common.huifu.properties.HuiFuProperties;
|
import org.springframework.stereotype.Component;
|
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
/**
|
* DouGong account split helper.
|
*/
|
@Component
|
public class FenZhangUtil {
|
private final HuiFuProperties huiFuProperties;
|
|
public FenZhangUtil(HuiFuProperties huiFuProperties) {
|
this.huiFuProperties = huiFuProperties;
|
}
|
|
public Map<String, Object> fenzhang(String reqSeqId, String reqDate, String ordAmt, String receiverHuifuId) throws Exception {
|
DouGongRequestSupport.initBasePay(huiFuProperties);
|
BigDecimal amount = new BigDecimal(ordAmt).setScale(2, RoundingMode.HALF_UP);
|
|
Map<String, Object> paramsInfo = new HashMap<>();
|
paramsInfo.put("req_seq_id", reqSeqId);
|
paramsInfo.put("req_date", reqDate);
|
paramsInfo.put("out_huifu_id", huiFuProperties.getHuifuId());
|
paramsInfo.put("ord_amt", amount.toString());
|
paramsInfo.put("acct_split_bunch", acctSplitBunch(amount, receiverHuifuId));
|
paramsInfo.put("risk_check_data", riskCheckData());
|
paramsInfo.put("trans_fee_take_flag", "OUT");
|
return BasePayRequest.requestBasePay("v2/trade/acctpayment/pay", paramsInfo, null, false);
|
}
|
|
public Map<String, Object> queryFenzhang(String reqSeqId, String reqDate) throws Exception {
|
DouGongRequestSupport.initBasePay(huiFuProperties);
|
|
Map<String, Object> paramsInfo = new HashMap<>();
|
paramsInfo.put("huifu_id", huiFuProperties.getHuifuId());
|
paramsInfo.put("org_req_date", reqDate);
|
paramsInfo.put("org_req_seq_id", reqSeqId);
|
return BasePayRequest.requestBasePay("v2/trade/acctpayment/pay/query", paramsInfo, null, false);
|
}
|
|
public Map<String, Object> payFromUser(String reqSeqId, String reqDate, String ordAmt, String outHuifuId) throws Exception {
|
DouGongRequestSupport.initBasePay(huiFuProperties);
|
BigDecimal amount = new BigDecimal(ordAmt).setScale(2, RoundingMode.HALF_UP);
|
|
Map<String, Object> paramsInfo = new HashMap<>();
|
paramsInfo.put("req_seq_id", reqSeqId);
|
paramsInfo.put("req_date", reqDate);
|
paramsInfo.put("out_huifu_id", outHuifuId);
|
paramsInfo.put("ord_amt", amount.toString());
|
paramsInfo.put("acct_split_bunch", acctSplitBunch(amount, huiFuProperties.getHuifuId()));
|
paramsInfo.put("risk_check_data", riskCheckData());
|
paramsInfo.put("trans_fee_take_flag", "OUT");
|
return BasePayRequest.requestBasePay("v2/trade/acctpayment/pay", paramsInfo, null, false);
|
}
|
|
private String acctSplitBunch(BigDecimal amount, String huifuId) {
|
JSONObject acctInfo = new JSONObject();
|
acctInfo.put("div_amt", amount.toString());
|
acctInfo.put("huifu_id", huifuId);
|
|
JSONArray acctInfos = new JSONArray();
|
acctInfos.add(acctInfo);
|
|
JSONObject root = new JSONObject();
|
root.put("acct_infos", acctInfos);
|
return root.toJSONString();
|
}
|
|
private String riskCheckData() {
|
JSONObject data = new JSONObject();
|
data.put("sub_product", "1");
|
data.put("transfer_type", "05");
|
return data.toJSONString();
|
}
|
}
|