提交 00d6efad authored 作者: aiqingguo's avatar aiqingguo

承运借款流程-宁波银行

上级 0ff45f7c
package com.clx.performance.vo.pc.nbbank;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqinguo
* @Description: 订单支付
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
public class NbBankOrderPayResultVO {
@ApiModelProperty(value = "金额(分)", example = "")
private Integer amount;
@ApiModelProperty(value = "流水号", example = "20231129145541")
private String merSeqNo;
@ApiModelProperty(value = "第三方流水号", example = "20231129145541065503563czKTBzy")
private String transSeqNo;
@ApiModelProperty(value = "转账编号", example = "")
private String signNo;
}
\ No newline at end of file
package com.clx.performance.vo.pc.nbbank;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqinguo
* @Description: 订单状态
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
public class NbBankOrderPayStatusResultVO {
@ApiModelProperty(value = "金额(分)", example = "")
private Integer amount;
@ApiModelProperty(value = "实收金额(分)", example = "")
private Integer realAmount;
@ApiModelProperty(value = "流水号", example = "20231129145541")
private String merSeqNo;
@ApiModelProperty(value = "第三方流水号", example = "20231129145541065503563czKTBzy")
private String transSeqNo;
@ApiModelProperty(value = "转账编号", example = "")
private String signNo;
@ApiModelProperty(value = "交易状态", example = "")
private Integer transStatus;
}
\ No newline at end of file
package com.clx.performance.controller.temp;
import com.clx.performance.service.thirdparty.nbbank.NbBankService;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayResultVO;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayStatusResultVO;
import com.msl.common.result.Result;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -26,21 +28,21 @@ public class TempBankController {
@ApiOperation(value = "directBankTransferOrder", notes = "<br>By:艾庆国")
@RequestMapping(value = "/directBankTransferOrder", method = RequestMethod.POST)
public Result<String> directBankTransferOrder() throws Exception {
public Result<NbBankOrderPayResultVO> directBankTransferOrder() throws Exception {
return Result.ok(bankService.orderPay(1));
}
@ApiOperation(value = "unionPayDirectOrder", notes = "<br>By:艾庆国")
@RequestMapping(value = "/unionPayDirectOrder", method = RequestMethod.POST)
public Result<String> unionPayDirectOrder() throws Exception {
public Result<NbBankOrderPayResultVO> unionPayDirectOrder() throws Exception {
return Result.ok(bankService.orderPay(2));
}
@ApiOperation(value = "queryOrder", notes = "<br>By:艾庆国")
@RequestMapping(value = "/queryOrderTest", method = RequestMethod.POST)
public Result<Integer> queryOrderTest(String merSeqNo) throws Exception {
public Result<NbBankOrderPayStatusResultVO> queryOrderTest(String merSeqNo) throws Exception {
return Result.ok(bankService.getOrderStatus(merSeqNo));
}
......
......@@ -99,7 +99,10 @@ public class NbBankNotifyServiceImpl implements NbBankNotifyService {
BigDecimal trxAmt = data.getBigDecimal("trxAmt");
BigDecimal realTrxAmt = data.getBigDecimal("realTrxAmt");
String transStatus = data.getString("transStatus");
bankService.orderPayCallback(merSeqNo,transSeqNo,trxAmt,transStatus);
String signNo = data.getString("signNo");
// 回调
bankService.orderPayCallback(merSeqNo, transSeqNo, trxAmt, realTrxAmt, transStatus, signNo);
}catch (Exception e){
throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_NOTIFY_ERROR);
......
package com.clx.performance.service.impl.thirdparty.nbbank;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.service.thirdparty.nbbank.NbBankService;
import com.clx.performance.service.thirdparty.nbbank.NbBankThirdpartyService;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayResultVO;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayStatusResultVO;
import com.msl.common.exception.ServiceSystemException;
import com.nbopen.api.SDKResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -32,20 +32,34 @@ public class NbBankServiceImpl implements NbBankService {
* 第三方流水号
*/
@Override
public String orderPay(Integer payType) {
public NbBankOrderPayResultVO orderPay(Integer payType) {
if (payType == 1){
String merSeqNo = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
JSONObject data = bankThirdpartyService.directBankTransferOrder(merSeqNo);
JSONObject data = bankThirdpartyService.directBankTransferOrder(merSeqNo, "EFT33021200556315", 1);
String transSeqNo = data.getString("transSeqNo");
return transSeqNo;
String signNo = data.getString("signNo");
NbBankOrderPayResultVO result = new NbBankOrderPayResultVO();
result.setAmount(1);
result.setMerSeqNo(merSeqNo);
result.setTransSeqNo(transSeqNo);
result.setSignNo(signNo);
return result;
}
else if (payType == 2){
String merSeqNo = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
JSONObject data = bankThirdpartyService.unionPayDirectOrder(merSeqNo);
JSONObject data = bankThirdpartyService.unionPayDirectOrder(merSeqNo, "EFT33021200556315", 1,
"313332082914","86041110000076809", "黑玫瑰");
String transSeqNo = data.getString("transSeqNo");
return transSeqNo;
NbBankOrderPayResultVO result = new NbBankOrderPayResultVO();
result.setAmount(1);
result.setMerSeqNo(merSeqNo);
result.setTransSeqNo(transSeqNo);
return result;
}
throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_PAY_TYPE_ERROR);
......@@ -56,25 +70,40 @@ public class NbBankServiceImpl implements NbBankService {
* @return
*/
@Override
public Integer getOrderStatus(String merSeqNo) {
SDKResponse sdkResponse = bankThirdpartyService.queryOrder(merSeqNo);
public NbBankOrderPayStatusResultVO getOrderStatus(String merSeqNo) {
JSONObject data = bankThirdpartyService.queryOrder(merSeqNo);
JSONObject response = JSON.parseObject(JSON.toJSONString(sdkResponse));
String transStatus = response.getString("transStatus");
NbBankOrderPayStatusResultVO result = new NbBankOrderPayStatusResultVO();
String transStatus = data.getString("transStatus");
if (StringUtils.equals(transStatus, "00")){result.setTransStatus(1);} //交易成功
else if (StringUtils.equals(transStatus, "01")){result.setTransStatus(2);} //交易失败
else if (StringUtils.equals(transStatus, "02")){result.setTransStatus(3);} //交易已受理
else if (StringUtils.equals(transStatus, "80")){result.setTransStatus(4);} //订单初始状态
else if (StringUtils.equals(transStatus, "90")){result.setTransStatus(5);} //交易不存在
else if (StringUtils.equals(transStatus, "99")){result.setTransStatus(6);} //交易超时,须发起交易结果查询
BigDecimal trxAmt = data.getBigDecimal("trxAmt");
BigDecimal realTrxAmt = data.getBigDecimal("realTrxAmt");
String transSeqNo = data.getString("transSeqNo");
String signNo = data.getString("signNo");
if (StringUtils.equals(transStatus, "00")){return 1;} //交易成功
if (StringUtils.equals(transStatus, "01")){return 2;} //交易失败
if (StringUtils.equals(transStatus, "02")){return 3;} //交易已受理
if (StringUtils.equals(transStatus, "80")){return 4;} //订单初始状态
if (StringUtils.equals(transStatus, "90")){return 5;} //交易不存在
if (StringUtils.equals(transStatus, "99")){return 6;} //交易超时,须发起交易结果查询
result.setAmount(trxAmt==null? null : trxAmt.movePointLeft(2).intValue());
result.setRealAmount(trxAmt==null? null : realTrxAmt.movePointLeft(2).intValue());
result.setMerSeqNo(merSeqNo);
result.setTransSeqNo(transSeqNo);
result.setSignNo(signNo);
return 1;
return result;
}
@Override
public void orderPayCallback(String merSeqNo, String transSeqNo, BigDecimal trxAmt, String transStatus) {
log.info("宁波银行支付回调, merSeqNo:{}, transSeqNo:{}, transSeqNo:{}, transSeqNo:{}", merSeqNo, transSeqNo, trxAmt, transStatus);
public void orderPayCallback(String merSeqNo, String transSeqNo,
BigDecimal trxAmt, BigDecimal realTrxAmt,
String transStatus,
String signNo) {
log.info("宁波银行支付回调, merSeqNo:{}, transSeqNo:{}, trxAmt:{}, realTrxAmt:{}, transSeqNo:{}, signNo:{}",
merSeqNo, transSeqNo, trxAmt, realTrxAmt, transStatus, signNo);
if (StringUtils.equals(transStatus, "00")){ //交易成功
......
......@@ -21,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Objects;
......@@ -79,20 +80,25 @@ public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService {
* "rspTime": "14:28:49:600"
* }
* }
*
* @Param
* merSeqNo: 商户流水
* merId: 商户号
* amount: 订单金额(分)
*/
@Override
public JSONObject directBankTransferOrder(String merSeqNo) {
public JSONObject directBankTransferOrder(String merSeqNo, String merId, Integer amount) {
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("transId", "IP01"); //交易识别码 必填
jsonObject.put("merId", "EFT33021200556315"); //商户号 必填
jsonObject.put("merId", merId); //商户号 必填
jsonObject.put("merSeqNo", merSeqNo); //商户流水 必填
jsonObject.put("merDtTm", LocalDateTimeUtils.formatTime()); //商户时间 必填
jsonObject.put("trxAmt", "1.23"); //订单金额 必填
jsonObject.put("orderDesc", "采购"); //订单详情 必填
jsonObject.put("productName", "小黄鱼"); //商品名称 必填
jsonObject.put("trxAmt", new BigDecimal(amount).movePointLeft(2)); //订单金额 必填
jsonObject.put("orderDesc", "运输"); //订单详情 必填
jsonObject.put("productName", "运费"); //商品名称 必填
jsonObject.put("productId", "001"); //商品编号 必填
jsonObject.put("productNum", "1"); //商品数量 必填
......@@ -102,7 +108,6 @@ public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService {
HashMap<String,String> httpHeader = new HashMap<>();
RequestApiData requestApiData = new RequestApiData();
requestApiData.setAppkey(nbBankConfig.getAppKey());
requestApiData.setData(jsonObject);
......@@ -167,27 +172,36 @@ public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService {
* "rspTime": "13:39:16:035"
* }
* }
*
* @Param
* merSeqNo: 商户流水
* merId: 商户号
* amount: 订单金额(分)
* payAcctOpenBankId: 开户行号
* payAcctNo: 付款账号
* payAcctNm: 付款户名
*/
@Override
public JSONObject unionPayDirectOrder(String merSeqNo) {
public JSONObject unionPayDirectOrder(String merSeqNo, String merId, Integer amount,
String payAcctOpenBankId, String payAcctNo, String payAcctNm) {
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("transId", "IP01"); //交易识别码 必填
jsonObject.put("merId", "EFT33021200556315"); //商户号 必填
jsonObject.put("merId", merId); //商户号 必填
jsonObject.put("merSeqNo", merSeqNo); //商户流水 必填
jsonObject.put("merDtTm", LocalDateTimeUtils.formatTime()); //商户时间 必填
jsonObject.put("trxAmt", "0.01"); //订单金额 必填
jsonObject.put("orderDesc", "采购"); //订单详情 必填
jsonObject.put("productName", "小黄鱼"); //商品名称 必填
jsonObject.put("trxAmt", new BigDecimal(amount).movePointLeft(2)); //订单金额 必填
jsonObject.put("orderDesc", "运输"); //订单详情 必填
jsonObject.put("productName", "运费"); //商品名称 必填
jsonObject.put("productId", "001"); //商品编号 必填
jsonObject.put("productNum", "1"); //商品数量 必填
jsonObject.put("payAcctNo", "86041110000076809"); //付款账号 必填
jsonObject.put("payAcctNm", "黑玫瑰"); //付款户名 必填
jsonObject.put("bankType", "00"); //账户类型 必填
jsonObject.put("payAcctOpenBankId", "313332082914"); //开户行号 必填
jsonObject.put("payAcctOpenBankId", payAcctOpenBankId); //开户行号 必填
jsonObject.put("payAcctNo", payAcctNo); //付款账号 必填
jsonObject.put("payAcctNm", payAcctNm); //付款户名 必填
// jsonObject.put("mobilePhone", "13000000000"); //手机号
HashMap<String,String> httpHeader = new HashMap<>();
......@@ -322,7 +336,7 @@ public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService {
* 99:交易超时,须发起交易结果查询
*/
@Override
public SDKResponse queryOrder(String merSeqNo) {
public JSONObject queryOrder(String merSeqNo) {
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("transId", "IP01"); //交易识别码 必填
......@@ -346,13 +360,21 @@ public class NbBankThirdpartyServiceImpl implements NbBankThirdpartyService {
request.setData(requestApiData);
request.setHead(requestHead);
log.info("SDK请求内容queryOrder: "+ JSON.toJSONString(request));
log.info("宁波银行, 查询交易结果(queryOrder), 参数: {}", JSON.toJSONString(request));
SDKResponse response = NBOpenSDK.send(request);
log.info("SDK响应结果queryOrder: "+JSON.toJSONString(response));
log.info("宁波银行, 查询交易结果(queryOrder), 结果: {}", JSON.toJSONString(response));
recordSave(NbBankRecordEnum.Type.QUERY_ORDER.getCode(), request, response);
return response;
JSONObject responseJson = JSON.parseObject(JSON.toJSONString(response));
JSONObject data = responseJson.getJSONObject("data");
if (!StringUtils.equals(data.getString("errorCode"), "000000")){
log.info("宁波银行, 下单失败(queryOrder), code:{}, msg:{}", data.getString("errorCode"), data.getString("errorMsg"));
throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_API_ERROR);
}
return data;
} catch (Exception e) {
e.printStackTrace();
}
......
package com.clx.performance.service.thirdparty.nbbank;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayResultVO;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayStatusResultVO;
import java.math.BigDecimal;
public interface NbBankService {
String orderPay(Integer payType);
NbBankOrderPayResultVO orderPay(Integer payType);
Integer getOrderStatus(String merSeqNo);
NbBankOrderPayStatusResultVO getOrderStatus(String merSeqNo);
void orderPayCallback(String merSeqNo, String transSeqNo, BigDecimal trxAmt, String transStatus);
void orderPayCallback(String merSeqNo, String transSeqNo,
BigDecimal trxAmt, BigDecimal realTrxAmt,
String transStatus,
String signNo
);
}
......@@ -6,11 +6,12 @@ import com.nbopen.api.SDKResponse;
public interface NbBankThirdpartyService {
JSONObject directBankTransferOrder(String merSeqNo);
JSONObject directBankTransferOrder(String merSeqNo, String merId, Integer amount);
JSONObject unionPayDirectOrder(String merSeqNo);
JSONObject unionPayDirectOrder(String merSeqNo, String merId, Integer amount,
String payAcctOpenBankId, String payAcctNo, String payAcctNm);
SDKResponse queryOrder(String merSeqNo);
JSONObject queryOrder(String merSeqNo);
void recordSave(Integer type, SDKRequest request, SDKResponse response);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论