diff --git a/cereshop-app/pom.xml b/cereshop-app/pom.xml index a16cf8f..a58890a 100644 --- a/cereshop-app/pom.xml +++ b/cereshop-app/pom.xml @@ -80,6 +80,12 @@ + + commons-httpclient + commons-httpclient + 3.1 + + diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/controller/extend/HnaPayController.java b/cereshop-app/src/main/java/com/shop/cereshop/app/controller/extend/HnaPayController.java new file mode 100644 index 0000000..8e1222a --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/controller/extend/HnaPayController.java @@ -0,0 +1,80 @@ +package com.shop.cereshop.app.controller.extend; + +import com.alibaba.fastjson.JSONObject; +import com.shop.cereshop.app.pay.hnapay.service.HnaPayService; +import com.shop.cereshop.app.pay.xs.domain.XsCallBackRequestVo; +import com.shop.cereshop.app.pay.xs.service.XsPayService; +import com.shop.cereshop.app.service.order.CereShopOrderService; +import com.shop.cereshop.commons.utils.EmptyUtils; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * 描述:新生支付新账通回调处理 + * + * @author stevenhu + * @version 2025/02/14 9:24 + */ +@RestController +@RequestMapping("extend/hnaPay") +@Slf4j(topic = "hnaPayController") +@Api(value = "新账通模块", tags = "新账通模块") +public class HnaPayController { + + @Autowired + private HnaPayService hnaPayService; + + @Autowired + private CereShopOrderService cereShopOrderService; + + + /** + * 支付通知回调 + * @param msg + * @return + * @throws Exception + */ + @PostMapping("pay/notify") + public String payNotify(@RequestParam(name = "msg") String msg) throws Exception { + try { + XsCallBackRequestVo xsCallBackRequestVo = hnaPayService.parseCallBackRequestVo(msg); + String status = xsCallBackRequestVo.getContent().getString("status"); + //0进行中 1成功 2失败 + if (status.equals("1")){ + //截取订单编号 + JSONObject content = xsCallBackRequestVo.getContent(); + String merOrderId = content.getString("merOrderId"); + String[] split = merOrderId.split("-"); + String dealId = ""; + if(!EmptyUtils.isEmpty(split)){ + String orderFormId=split[0]; + if(!EmptyUtils.isEmpty(orderFormId)){ + //支付有礼 + cereShopOrderService.payGift(orderFormId); + dealId = content.getString("dealId"); + //处理支付成功后的其他逻辑 + cereShopOrderService.handleWxLog(orderFormId, dealId, merOrderId); + } + } + } + }catch (Exception e) { + e.printStackTrace(); + } + return "200"; + } + + /** + * 退款通知回调 + * @throws Exception + */ + @PostMapping("refund/notify") + public String refundNotify(@RequestParam(name = "msg") String msg) throws Exception { + log.info("----refundNotify:" + msg); + return "success"; + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/dao/business/CerePlatformBusinessDAO.java b/cereshop-app/src/main/java/com/shop/cereshop/app/dao/business/CerePlatformBusinessDAO.java index c65f7db..140b4c4 100644 --- a/cereshop-app/src/main/java/com/shop/cereshop/app/dao/business/CerePlatformBusinessDAO.java +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/dao/business/CerePlatformBusinessDAO.java @@ -37,4 +37,6 @@ public interface CerePlatformBusinessDAO extends BaseMapperTitle: BaseTransForm

+ *

Description:

+ *

Company:

+ */ +@Data +public abstract class BaseTransForm implements Serializable{ + + private static final long serialVersionUID = 1L; + + public static final String VERSION = "version"; + public static final String TRAN_CODE = "tranCode"; + public static final String MER_ID = "merId"; + public static final String MER_ORDER_ID = "merOrderId"; + public static final String CHARSET = "charset"; + public static final String SIGN_TYPE = "signType"; + public static final String SIGN_VALUE = "signValue"; + public static final String MER_ATTACH = "merAttach"; + public static final String SUBMIT_TIME = "submitTime"; + public static final String MSG_CIPHER_TEXT = "msgCiphertext"; + public static final String RESULT_CODE = "resultCode"; + public static final String ERROR_CODE = "errorCode"; + public static final String ERROR_MSG = "errorMsg"; + public static final String CERT_INFO = "certInfo"; + + // 暂定公共的报文字段 + protected String tranCode; + protected String version; + protected String merId; + protected String merOrderId; + protected String signType; + protected String signValue; + protected String msgCiphertext; + protected String charset; + protected String merAttach; + protected String submitTime; + protected String certInfo; + + //提交地址 + protected String submitUrl; + + + /** + * 获取公共返回参数
+ * Map中的key必须与返回XML文件中的field的name值一致
+ * 子类可选择性重写 + * @return + */ + @SuppressWarnings("static-access") + public Map getCommonRespParams() { + Map commonParams = new HashMap(); + commonParams.put(this.VERSION, this.version); + commonParams.put(this.TRAN_CODE, this.tranCode); + commonParams.put(this.MER_ORDER_ID, this.merOrderId); + commonParams.put(this.MER_ID, this.merId); + commonParams.put(this.MER_ATTACH, this.merAttach); + commonParams.put(this.CHARSET, this.charset); + commonParams.put(this.SIGN_TYPE, this.signType); + return commonParams; + } + + /** + * 获取共用请求的签名字段 + * @author wgy + * @date 2018年8月10日 上午10:26:54 + * @description 一句话描述功能 + * @return Map + */ + @SuppressWarnings("static-access") + public Map getCommonReqSignParams(boolean isUpload){ + Map commonParams = new HashMap(); + commonParams.put(this.TRAN_CODE, this.tranCode); + commonParams.put(this.VERSION, this.version); + commonParams.put(this.MER_ID, this.merId); + commonParams.put(this.MER_ORDER_ID, this.merOrderId); + commonParams.put(this.SUBMIT_TIME, this.submitTime); + commonParams.put(this.MSG_CIPHER_TEXT, this.msgCiphertext); + commonParams.put(this.SIGN_TYPE, this.signType); + if (isUpload) { + commonParams.put(this.CERT_INFO, this.certInfo); + } + return commonParams; + } + + /** + * 获取加密json串明文 + * @author wgy + * @date 2018年8月27日 下午6:08:46 + * @description 一句话描述功能 + * @return String + */ + public abstract String getEncryptJsonStr(); + + /** + * 获取验签字段 + * @return + */ + public abstract String getVerifyJsonStr(); + + /** + * 获取提交字段 + * @return + */ + public abstract String getSubmitJsonStr(); + + + + public void initCommonParams(String tranCode) { + this.version="1.0"; + this.tranCode=tranCode; + this.merId= HnaPayConfig.MER_ID; + this.merOrderId=tranCode+"_"+ HnaPayDateUtils.format(new Date()); + this.submitTime= HnaPayDateUtils.format(new Date()); + this.signType="1"; + this.merAttach=""; + this.charset="UTF-8"; + } + + public String getCommonSignStr() { + StringBuffer sb = new StringBuffer(); + sb.append(this.VERSION); + sb.append("=["); + sb.append(getVersion()); + sb.append("]"); + + sb.append(this.TRAN_CODE); + sb.append("=["); + sb.append(getTranCode()); + sb.append("]"); + + sb.append(this.MER_ID); + sb.append("=["); + sb.append(getMerId()); + sb.append("]"); + + sb.append(this.MER_ORDER_ID); + sb.append("=["); + sb.append(getMerOrderId()); + sb.append("]"); + + sb.append(this.SUBMIT_TIME); + sb.append("=["); + sb.append(getSubmitTime()); + sb.append("]"); + + sb.append(this.MSG_CIPHER_TEXT); + sb.append("=["); + sb.append(getMsgCiphertext()); + sb.append("]"); + + sb.append(this.SIGN_TYPE); + sb.append("=["); + sb.append(getSignType()); + sb.append("]"); + + return sb.toString(); + } + + public String getValueByReflet(Object model, String paraName){ + // 返回值 + String value = ""; + try { + // 获取属性值 + Field[] fields = model.getClass().getDeclaredFields(); + + for (Field field : fields) { + field.setAccessible(true); + + if (field.getName().equals(paraName)) { + value = (String) field.get(model); + + break; + } + } + }catch (Exception e){ + + } + return value; + } + + public String getJsonStr(Object model,String[] strArr) { + JSONObject json = new JSONObject(true); + for(String file:strArr){ + json.put(file, getValueByReflet(model,file)); + } + return json.toJSONString(); + } + +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/F001TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/F001TransForm.java new file mode 100644 index 0000000..2142610 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/F001TransForm.java @@ -0,0 +1,38 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class F001TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"orgMerOrderId","divideId","divideDtlId"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode" ,"errorCode", "ncountOrderId"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "charset"}; + + private String orgMerOrderId;//原商户订单号 + private String divideId;//分账主订单号 + private String divideDtlId;//分账明细订单号 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q001TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q001TransForm.java new file mode 100644 index 0000000..a88f5f7 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q001TransForm.java @@ -0,0 +1,36 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class Q001TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"userId"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode","userId", "outUserId","userStat","auditStat","balAmount","bindCardAgrNoList"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String userId;//用户编号 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q002TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q002TransForm.java new file mode 100644 index 0000000..535d389 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q002TransForm.java @@ -0,0 +1,37 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class Q002TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"tranMerOrderId","queryType"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode", "tranMerOrderId", "ncountOrderId","orderStatus","tranAmount"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String tranMerOrderId;//商户订单号 + private String queryType;//交易大类 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q003TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q003TransForm.java new file mode 100644 index 0000000..2d00933 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q003TransForm.java @@ -0,0 +1,37 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * Created by gaoyantao on 16/4/10. + * Q003 - 开户结果查询 + */ +@Data +public class Q003TransForm extends BaseTransForm { + + /** + * + */ + private static final long serialVersionUID = 1L; + private String origMerOrderId; + public static final String[] encryptArr = new String[]{"origMerOrderId"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode", "userId","bindCardAgrNoList"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q004TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q004TransForm.java new file mode 100644 index 0000000..a7f0ff8 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q004TransForm.java @@ -0,0 +1,40 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class Q004TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"userId","acctType","startDate","endDate","pageNum"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode","userId","acctType","count"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String userId;//用户编号 + private String acctType;//账户类型 + private String startDate;//开始时间 + private String endDate;//结束时间 + private String pageNum;//请求页数 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q006TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q006TransForm.java new file mode 100644 index 0000000..a5a71fe --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q006TransForm.java @@ -0,0 +1,37 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class Q006TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"userId","enpAcct"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode","userId","enpAcctNo"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String userId;//用户编号 + private String enpAcct;//银行企业号 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q007TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q007TransForm.java new file mode 100644 index 0000000..c4a1f50 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q007TransForm.java @@ -0,0 +1,41 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class Q007TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"userId","enpAcct","startDate","endDate","pageSize","pageNum"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode","enpAcctNo","count"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String userId;//用户编号 + private String enpAcct;//银行企业号 + private String startDate;//交易开始日期 + private String endDate;//交易结束日期 + private String pageSize;//查询笔数 + private String pageNum;//请求页数 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q008TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q008TransForm.java new file mode 100644 index 0000000..c251f23 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q008TransForm.java @@ -0,0 +1,36 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class Q008TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"oriChannelSerialNo"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode","transStatus","oriRespCode","oriRespMsg"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String oriChannelSerialNo;//原交易流水号 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q009TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q009TransForm.java new file mode 100644 index 0000000..66619b3 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/Q009TransForm.java @@ -0,0 +1,38 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class Q009TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"enpAcct","identityType","identityCode"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode","enpAcct","enpAcctStatus","totalAmt"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String enpAcct;//企业号 + private String identityType;//企业证件类型 + private String identityCode;//企业证件号 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R001TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R001TransForm.java new file mode 100644 index 0000000..5ad5410 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R001TransForm.java @@ -0,0 +1,47 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class R001TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"merUserId","userName","mobile","certType","certNo","certValidate","cardNo","bankCode","province","city","branch"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode", "userId","bindCardAgrNo"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String merUserId;//商户用户唯一标识 + private String userName;//用户名称 + private String mobile;//手机号 + private String certType;//证件类型 + private String certNo;//证件号 + private String certValidate;//证件有效期 + private String cardNo;//银行卡号 + private String bankCode;//银行简码 + private String province;//开户行所属省份 + private String city;//开户行所属城市 + private String branch;//开户支行 + private String notifyServerUrl;//审核异步通知地址 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R002TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R002TransForm.java new file mode 100644 index 0000000..e6b7352 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R002TransForm.java @@ -0,0 +1,43 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class R002TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"userId","bindCardAgrNo","mobile","cardNo","bankCode","province","city","branch"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode", "userId","bindCardAgrNo"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String userId;//用户编号 + private String bindCardAgrNo;//原绑卡协议号 + private String mobile;//手机号 + private String cardNo;//银行卡号 + private String bankCode;//银行简码 + private String province;//开户行所属省份 + private String city;//开户行所属城市 + private String branch;//开户支行 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R003TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R003TransForm.java new file mode 100644 index 0000000..9078e7a --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R003TransForm.java @@ -0,0 +1,37 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class R003TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"userId","certFileType"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode", "userId","certFileType"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset","certInfo"}; + + private String userId;//用户编号 + private String certFileType;//证件资料类型 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R004TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R004TransForm.java new file mode 100644 index 0000000..f567351 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R004TransForm.java @@ -0,0 +1,37 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class R004TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"userId","certFileType"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode", "userId","certFileType"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String userId;//用户编号 + private String certFileType;//证件资料类型 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R007TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R007TransForm.java new file mode 100644 index 0000000..32f8d38 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R007TransForm.java @@ -0,0 +1,44 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class R007TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"cardNo","holderName","cardAvailableDate","cvv2","mobileNo","identityType","identityCode","userId","merUserIp"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode","ncountOrderId"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String cardNo;//支付银行卡卡号 + private String holderName;//持卡人姓名 + private String cardAvailableDate;//信用卡有效期 + private String cvv2;//信用卡CVV2 + private String mobileNo;//银行签约手机号 + private String identityType;//证件类型 + private String identityCode;//证件号码 + private String userId;//用户ID + private String merUserIp;//商户用户IP + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R008TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R008TransForm.java new file mode 100644 index 0000000..8f4b0ee --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R008TransForm.java @@ -0,0 +1,38 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class R008TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"ncountOrderId","smsCode","merUserIp"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode","bindCardAgrNo", "bankCode", "cardType", "shortCardNo"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String ncountOrderId;//签约订单号 + private String smsCode;//签约短信验证码 + private String merUserIp;//商户用户IP + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R009TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R009TransForm.java new file mode 100644 index 0000000..cbada1f --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R009TransForm.java @@ -0,0 +1,37 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class R009TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"oriBindCardAgrNo","userId"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String oriBindCardAgrNo;//原绑卡协议号 + private String userId;//用户ID + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R010TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R010TransForm.java new file mode 100644 index 0000000..0da33ec --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R010TransForm.java @@ -0,0 +1,39 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class R010TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"merUserId","mobile","userName","certNo"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode","userId"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String merUserId;//商户用户唯一标识 + private String mobile;//用户手机号 + private String userName;//真实姓名 + private String certNo;//身份证号 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R011TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R011TransForm.java new file mode 100644 index 0000000..fc0272d --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R011TransForm.java @@ -0,0 +1,40 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class R011TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"userId","certNo","userName","mobile","certValidate"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode" ,"errorCode"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String userId;//企业用户Id + private String certNo;//营业执照号 + private String userName;//用户名称 + private String mobile;//手机号 + private String certValidate;//证件有效期 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R012TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R012TransForm.java new file mode 100644 index 0000000..7d3689e --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R012TransForm.java @@ -0,0 +1,37 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class R012TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"userId","choiceAgreement"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode","userId","identityType","identityCode","enpAcct","openBankNo","openId"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String userId;//商户用户唯一标识 + private String choiceAgreement;//勾选线上协议(01:勾选,00:未勾选) + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R013TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R013TransForm.java new file mode 100644 index 0000000..85b1135 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R013TransForm.java @@ -0,0 +1,39 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class R013TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"bizType","userId","enpAcct","transAmt"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode","channelSerialNo","userId","enpAcct"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String bizType;//业务类型 00 小额打款鉴权,01 小额验证 + private String userId;//新账通用户号 + private String enpAcct;//银行企业号 + private String transAmt;//交易金额,业务类型是01时必填 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R014TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R014TransForm.java new file mode 100644 index 0000000..30a9a38 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R014TransForm.java @@ -0,0 +1,36 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class R014TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"enpAcct"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode","enpAcct","signResult"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String enpAcct;//银行企业号 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R015TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R015TransForm.java new file mode 100644 index 0000000..7e6710f --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/R015TransForm.java @@ -0,0 +1,43 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class R015TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"cardNo","userId","mobileNo","frontUrl","notifyUrl","merUserIp","pageStyle"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "merAttach", "charset", "signType", "resultCode" ,"errorCode", "errorMsg", "bindCardAgrNo", "bankCode", + "cardType", "shortCardNo"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String cardNo;//支付银行卡卡号 + private String userId;//用户编号 + private String mobileNo;//银行签约手机号 + private String frontUrl;//商户回调地址 + private String notifyUrl;//异步通知地址 + private String merUserIp;//商户用户IP + private String pageStyle;//页面样式 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T002TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T002TransForm.java new file mode 100644 index 0000000..d61f5a4 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T002TransForm.java @@ -0,0 +1,41 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class T002TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"tranAmount","userId","bindCardAgrNo","notifyUrl","paymentTerminalInfo","deviceInfo"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode","ncountOrderId"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String tranAmount;//支付金额 + private String userId;//提现用户编号 + private String bindCardAgrNo;//绑卡协议号 + private String notifyUrl;//异步通知地址 + private String paymentTerminalInfo;//付款方终端信息 + private String deviceInfo;//设备信息 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T003TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T003TransForm.java new file mode 100644 index 0000000..ecbe34d --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T003TransForm.java @@ -0,0 +1,39 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class T003TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"payUserId","receiveUserId","tranAmount","businessType"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode" ,"errorCode"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String payUserId;//付款方用户编号 + private String receiveUserId;//收款方ID + private String tranAmount;//转账金额 + private String businessType;//业务类型 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T004TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T004TransForm.java new file mode 100644 index 0000000..17e08f6 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T004TransForm.java @@ -0,0 +1,43 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class T004TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"tranAmount","bankCode","currencyType","remark","receiveUserId","merUserIp","notifyUrl","businessType"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode" ,"errorCode","tranAmount","hnapayOrderId","bankAcct"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String tranAmount;//充值金额 + private String bankCode;//银行编码 + private String currencyType;//币种 + private String remark;//备注 + private String receiveUserId;//充值商户新账通商户ID + private String merUserIp;//用户浏览器IP + private String notifyUrl;//异步通知地址 + private String businessType;//业务类型 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T005TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T005TransForm.java new file mode 100644 index 0000000..56d932f --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T005TransForm.java @@ -0,0 +1,45 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class T005TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"serialId","orgMerOrderId","orgSubmitTime","orderAmount","refundSource","destType","refundType","refundAmount","notifyUrl","remark"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode" ,"errorCode","orgMerOrderId","orderAmount","refundAmount"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String serialId;//请求序列号 + private String orgMerOrderId;//商户原始订单号 + private String orgSubmitTime;//原订单支付下单请求时间 + private String orderAmount;//原订单金额 + private String refundSource;//退款资金来源 + private String destType;//退款目的地类型 + private String refundType;//退款类型 + private String refundAmount;//商户退款金额 + private String notifyUrl;//异步通知地址 + private String remark;//备注 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T006TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T006TransForm.java new file mode 100644 index 0000000..16d7b77 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T006TransForm.java @@ -0,0 +1,58 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class T006TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"tranAmount","orgCode","currencyType","remark","notifyServerUrl","merUserIp","expireTime","riskExpand","goodsInfo","orderSubject","orderDesc","payLimit","appId","openId","aliAppId","buyerLogonId","buyerId","merchantId","receiveUserId","businessType","feeType","divideAcctDtl","feeAmountUser"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode" ,"errorCode", "ncountOrderId","payInfo"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String tranAmount;//交易金额 + private String orgCode;//目标资金机构代码 + private String currencyType;//币种 + private String remark;//备注 + private String notifyServerUrl;//异步通知地址 + private String merUserIp;//用户浏览器IP + private String expireTime;//订单过期时间 + private String riskExpand;//分控扩展信息 + private String goodsInfo;//商品信息 + private String orderSubject;//订单标题 + private String orderDesc;//订单描述 + private String payLimit;//限制信用卡支付 + private String appId;//商家微信公众号ID + private String openId;//微信用户关注商家公众号的openid + private String aliAppId;//商家支付宝生活号ID + private String buyerLogonId;//买家支付宝账号 + private String buyerId;//买家支付宝用户ID + private String merchantId;//客户机构号 + private String receiveUserId;//收款方 ID + private String businessType;//业务类型 + private String feeType;//手续费内扣外扣 + private String divideAcctDtl;//分账明细 + private String feeAmountUser;//手续费承担方id + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T007TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T007TransForm.java new file mode 100644 index 0000000..7dce15d --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T007TransForm.java @@ -0,0 +1,55 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class T007TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"tranAmount","payType","cardNo","holderName","cardAvailableDate","cvv2","mobileNo","identityType","identityCode","bindCardAgrNo","notifyUrl","orderExpireTime","userId","receiveUserId","merUserIp","riskExpand","goodsInfo","subMerchantId","divideFlag","divideDetail"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode" ,"errorCode", "ncountOrderId","submitTime"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String tranAmount;//支付金额 + private String payType;//支付方式 + private String cardNo;//支付银行卡卡号 + private String holderName;//持卡人姓名 + private String cardAvailableDate;//信用卡有效期 + private String cvv2;//信用卡CVV2 + private String mobileNo;//银行签约手机号 + private String identityType;//证件类型 + private String identityCode;//证件号码 + private String bindCardAgrNo;//商户异步通知地址 + private String notifyUrl;//备注 + private String orderExpireTime;//订单过期时长 + private String userId;//用户编号 + private String receiveUserId;//收款方ID + private String merUserIp;//商户用户IP + private String riskExpand;//风控扩展信息 + private String goodsInfo;//商品信息 + private String subMerchantId;//商户渠道进件ID + private String divideFlag;//是否分账 + private String divideDetail;//分账明细信息 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T008TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T008TransForm.java new file mode 100644 index 0000000..e5c4407 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T008TransForm.java @@ -0,0 +1,45 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class T008TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"ncountOrderId","smsCode","merUserIp","paymentTerminalInfo","receiverTerminalInfo","deviceInfo","businessType","feeType","divideAcctDtl","feeAmountUser"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode" ,"errorCode", "ncountOrderId","tranAmount","checkDate","submitTime","tranFinishTime","bankCode","cardType","shortCardNo","bindCardAgrNo"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String ncountOrderId;//新账通订单号 + private String smsCode;//短信验证码 + private String merUserIp;//商户用户IP + private String paymentTerminalInfo;//付款方终端信息 + private String receiverTerminalInfo;//收款方终端信息 + private String deviceInfo;//设备信息 + private String businessType;//业务类型 + private String feeType;//手续费内扣外扣 + private String divideAcctDtl;//分账明细 + private String feeAmountUser;//手续费承担方id + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T009TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T009TransForm.java new file mode 100644 index 0000000..b8b6b05 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T009TransForm.java @@ -0,0 +1,53 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class T009TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"tranAmount","orgCode","currencyType","remark","notifyServerUrl","merUserIp","expireTime","riskExpand","goodsInfo","orderSubject","orderDesc","payLimit","merchantId","receiveUserId","businessType","feeType","divideAcctDtl","feeAmountUser"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode" ,"errorCode", "ncountOrderId","qrCodeUrl"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset","tranAmount","orgCode","currencyType","remark","notifyServerUrl","merUserIp","expireTime","riskExpand","goodsInfo","orderSubject","orderDesc","payLimit","merchantId","receiveUserId"}; + + private String tranAmount;//交易金额 + private String orgCode;//目标资金机构代码 + private String currencyType;//币种 + private String remark;//备注 + private String notifyServerUrl;//异步通知地址 + private String merUserIp;//用户浏览器IP + private String expireTime;//订单过期时间 + private String riskExpand;//分控扩展信息 + private String goodsInfo;//商品信息 + private String orderSubject;//订单标题 + private String orderDesc;//订单描述 + private String payLimit;//限制信用卡支付 + private String merchantId;//客户机构号 + private String receiveUserId;//收款方 ID + private String businessType;//业务类型 + private String feeType;//手续费内扣外扣 + private String divideAcctDtl;//分账明细 + private String feeAmountUser;//手续费承担方id + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T010TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T010TransForm.java new file mode 100644 index 0000000..7c9aca6 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T010TransForm.java @@ -0,0 +1,52 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class T010TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"merUserIp","goodsInfo","tranAmount","payType","bankCode","currencyType","directFlag","notifyFrontUrl","notifyServerUrl","receiveUserId","paymentTerminalInfo","receiverTerminalInfo","deviceInfo","businessType","feeType","divideAcctDtl","feeAmountUser"}; + public static final String[] verifyArr = new String[]{}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String merUserIp;//用户浏览器IP + private String goodsInfo;//商品信息 + private String tranAmount;//交易金额 + private String payType;//付款方支付方式 + private String bankCode;//网银机构代码 + private String currencyType;//币种 + private String directFlag;//是否直连 + private String notifyFrontUrl;//商户回调地址 + private String notifyServerUrl;//商户通知地址 + private String receiveUserId;//收款方 ID + private String paymentTerminalInfo;//付款方终端信息 + private String receiverTerminalInfo;//收款方终端信息 + private String deviceInfo;//设备信息 + private String businessType;//业务类型 + private String feeType;//手续费内扣外扣 + private String divideAcctDtl;//分账明细 + private String feeAmountUser;//手续费承担方id + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T011TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T011TransForm.java new file mode 100644 index 0000000..d77843c --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T011TransForm.java @@ -0,0 +1,38 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class T011TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"ncountOrderId","businessType","orgTranCode"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode" ,"errorCode","reciptBase64Pdf"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset","ncountOrderId","businessType","orgTranCode"}; + + private String ncountOrderId;//原交易订单号 + private String businessType;//业务类型 + private String orgTranCode;//原交易代码 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T012TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T012TransForm.java new file mode 100644 index 0000000..eabdf38 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T012TransForm.java @@ -0,0 +1,36 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class T012TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"colDate"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode" ,"errorCode","collateFileBase64"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset","colDate"}; + + private String colDate;//交易日期 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T013TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T013TransForm.java new file mode 100644 index 0000000..70c967c --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T013TransForm.java @@ -0,0 +1,48 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2020-10-19 + **/ +@Data +public class T013TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"tranAmount","currencyType","payType","receiveUserId","notifyFrontUrl","notifyServerUrl","riskExpand","goodsInfo","orderSubject","orderDesc","merchantId","merUserIp","payLimit"}; + public static final String[] verifyArr = new String[]{}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String tranAmount;//交易金额 + private String currencyType;//币种 + private String payType;//付款方支付方式 + private String receiveUserId;//收款方 ID + private String notifyFrontUrl;//商户回调地址 + private String notifyServerUrl;//商户通知地址 + private String riskExpand;//分控扩展信息 + private String goodsInfo;//商品信息 + private String orderSubject;//订单标题 + private String orderDesc;//订单描述 + private String merchantId;//客户机构号 + private String merUserIp;//商户用户IP + private String payLimit;//限制信用卡支付 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T019TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T019TransForm.java new file mode 100644 index 0000000..6652209 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T019TransForm.java @@ -0,0 +1,41 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2023-06-05 + **/ +@Data +public class T019TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"tranAmount","receiveUserId","merUserIp","notifyUrl","businessType","feeType"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "charset", "signType", "resultCode", "errorCode", "tranAmount", "ncountOrderId", "hnapayBankAcctNo", "inChargeCode"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String tranAmount;//交易金额 + private String receiveUserId;//收款方ID + private String merUserIp;//用户浏览器IP + private String notifyUrl;//异步通知地址 + private String businessType;//业务类型 + private String feeType;//手续费内扣外扣 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T020TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T020TransForm.java new file mode 100644 index 0000000..c887b6c --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T020TransForm.java @@ -0,0 +1,54 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2023-07-12 + **/ +@Data +public class T020TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"merchantId","tranAmount","scanCodeId","businessType","feeType","currencyType","orderSubject","holderName","identityType","identityCode","minAge","riskExpand","terminalId","terminalIp","location","receiveUserId","merUserIp","notifyServerUrl","remark"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "merAttach", "charset", "signType", "resultCode", "errorCode", "errorMsg", "signValue", "ncountOrderId", "businessType"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String merchantId;//客户机构号 + private String tranAmount;//支付金额 + private String scanCodeId;//条形码 + private String businessType;//业务类型 + private String feeType;//手续费内扣外扣 + private String currencyType;//币种 + private String orderSubject;//订单标题 + private String holderName;//姓名 + private String identityType;//证件类型 + private String identityCode;//证件号 + private String minAge;//最小买家年龄 + private String riskExpand;//风控扩展信息 + private String terminalId;//设备编号 + private String terminalIp;//设备终端IP + private String location;//实时经纬度 + private String receiveUserId;//收款方用户ID + private String merUserIp;//交易IP + private String notifyServerUrl;//商户后台通知地址 + private String remark;//备注 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T021TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T021TransForm.java new file mode 100644 index 0000000..f60ced2 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T021TransForm.java @@ -0,0 +1,40 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2023-07-12 + **/ +@Data +public class T021TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"merchantId","terminalId","terminalType","serialNum","terminalAddress"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "merAttach", "charset", "signType", "resultCode", "errorCode", "errorMsg", "signValue", "businessType"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String merchantId;//客户机构号 + private String terminalId;//设备编号 + private String terminalType;//设备类型 + private String serialNum;//终端序列号 + private String terminalAddress;//终端布放地址 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T022TransForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T022TransForm.java new file mode 100644 index 0000000..7d60982 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/form/T022TransForm.java @@ -0,0 +1,37 @@ +package com.shop.cereshop.app.pay.hnapay.request.form; + +import lombok.Data; + +/** + * @Author + * @Version V1.0 + * @Description + * @Date 2023-07-12 + **/ +@Data +public class T022TransForm extends BaseTransForm { + + private static final long serialVersionUID = 1L; + + public static final String[] encryptArr = new String[]{"merchantId","terminalId"}; + public static final String[] verifyArr = new String[]{"version", "tranCode", "merOrderId", "merId", "merAttach", "charset", "signType", "resultCode", "errorCode", "errorMsg", "signValue"}; + public static final String[] submitArr = new String[]{"version", "tranCode", "merId", "merOrderId", "submitTime", "msgCiphertext", "signType", "signValue", "merAttach", "charset"}; + + private String merchantId;//客户机构号 + private String terminalId;//设备编号 + + @Override + public String getEncryptJsonStr() { + return getJsonStr(this,encryptArr); + } + + @Override + public String getVerifyJsonStr() { + return getJsonStr(this,verifyArr); + } + + @Override + public String getSubmitJsonStr() { + return getJsonStr(this,submitArr); + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/init/InitForm.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/init/InitForm.java new file mode 100644 index 0000000..25345b5 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/request/init/InitForm.java @@ -0,0 +1,815 @@ +package com.shop.cereshop.app.pay.hnapay.request.init; + + +import com.shop.cereshop.app.pay.hnapay.request.form.*; + +import java.util.Map; + + +public class InitForm { + + // 接口请求提交地址 + public static final String R012_SUBMIT_URL = "https://ncount.hnapay.com/api/r012.htm"; + public static final String R013_SUBMIT_URL = "https://ncount.hnapay.com/api/r013.htm"; + public static final String R014_SUBMIT_URL = "https://ncount.hnapay.com/api/r014.htm"; + public static final String Q006_SUBMIT_URL = "https://ncount.hnapay.com/api/q006.htm"; + public static final String Q007_SUBMIT_URL = "https://ncount.hnapay.com/api/q007.htm"; + public static final String Q008_SUBMIT_URL = "https://ncount.hnapay.com/api/q008.htm"; + public static final String Q009_SUBMIT_URL = "https://ncount.hnapay.com/api/q009.htm"; + public static final String Q001_SUBMIT_URL = "https://ncount.hnapay.com/api/q001.htm"; + public static final String Q002_SUBMIT_URL = "https://ncount.hnapay.com/api/q002.htm"; + public static final String Q004_SUBMIT_URL = "https://ncount.hnapay.com/api/q004.htm"; + public static final String R001_SUBMIT_URL = "https://ncount.hnapay.com/api/r001.htm"; + public static final String R002_SUBMIT_URL = "https://ncount.hnapay.com/api/r002.htm"; + public static final String R003_SUBMIT_URL = "https://ncount.hnapay.com/api/r003.htm"; + public static final String R004_SUBMIT_URL = "https://ncount.hnapay.com/api/r004.htm"; + public static final String R007_SUBMIT_URL = "https://ncount.hnapay.com/api/r007.htm"; + public static final String R008_SUBMIT_URL = "https://ncount.hnapay.com/api/r008.htm"; + public static final String R009_SUBMIT_URL = "https://ncount.hnapay.com/api/r009.htm"; + public static final String R010_SUBMIT_URL = "https://ncount.hnapay.com/api/r010.htm"; + public static final String R011_SUBMIT_URL = "https://ncount.hnapay.com/api/r011.htm"; + public static final String T002_SUBMIT_URL = "https://ncount.hnapay.com/api/t002.htm"; + public static final String T003_SUBMIT_URL = "https://ncount.hnapay.com/api/t003.htm"; + public static final String T004_SUBMIT_URL = "https://ncount.hnapay.com/api/t004.htm"; + public static final String T005_SUBMIT_URL = "https://ncount.hnapay.com/api/t005.htm"; + public static final String T006_SUBMIT_URL = "https://ncount.hnapay.com/api/t006.htm"; + public static final String T007_SUBMIT_URL = "https://ncount.hnapay.com/api/t007.htm"; + public static final String T008_SUBMIT_URL = "https://ncount.hnapay.com/api/t008.htm"; + public static final String R015_SUBMIT_URL = "https://ncount.hnapay.com/api/r015.htm"; + public static final String T009_SUBMIT_URL = "https://ncount.hnapay.com/api/t009.htm"; + public static final String T010_SUBMIT_URL = "https://ncount.hnapay.com/api/t010.htm"; + public static final String T011_SUBMIT_URL = "https://ncount.hnapay.com/api/t011.htm"; + public static final String T012_SUBMIT_URL = "https://ncount.hnapay.com/api/t012.htm"; + public static final String T013_SUBMIT_URL = "https://ncount.hnapay.com/api/t013.htm"; + public static final String F001_SUBMIT_URL = "https://ncount.hnapay.com/api/f001.htm"; + public static final String T019_SUBMIT_URL = "https://ncount.hnapay.com/api/t019.htm"; + public static final String T020_SUBMIT_URL = "https://ncount.hnapay.com/api/t020.htm"; + public static final String T021_SUBMIT_URL = "https://ncount.hnapay.com/api/t021.htm"; + public static final String T022_SUBMIT_URL = "https://ncount.hnapay.com/api/t022.htm"; + + + public static BaseTransForm getFormByTranCode(String tranCode) { + + BaseTransForm baseTransForm = null; + switch (tranCode) { + case "R012": + baseTransForm = getR012TransForm(); + break; + case "R013": + baseTransForm = getR013TransForm(); + break; + case "R014": + baseTransForm = getR014TransForm(); + break; + case "Q006": + baseTransForm = getQ006TransForm(); + break; + case "Q007": + baseTransForm = getQ007TransForm(); + break; + case "Q008": + baseTransForm = getQ008TransForm(); + break; + case "Q009": + baseTransForm = getQ009TransForm(); + break; + case "Q001": + baseTransForm = getQ001TransForm(); + break; + case "Q002": + baseTransForm = getQ002TransForm(); + break; + case "Q004": + baseTransForm = getQ004TransForm(); + break; + case "R001": + baseTransForm = getR001TransForm(); + break; + case "R002": + baseTransForm = getR002TransForm(); + break; + case "R003": + baseTransForm = getR003TransForm(); + break; + case "R004": + baseTransForm = getR004TransForm(); + break; + case "R007": + baseTransForm = getR007TransForm(); + break; + case "R008": + baseTransForm = getR008TransForm(); + break; + case "R009": + baseTransForm = getR009TransForm(); + break; + case "R010": + baseTransForm = getR010TransForm(); + break; + case "R011": + baseTransForm = getR011TransForm(); + break; + case "T002": + baseTransForm = getT002TransForm(); + break; + case "T003": + baseTransForm = getT003TransForm(); + break; + case "T004": + baseTransForm = getT004TransForm(); + break; + case "T005": + baseTransForm = getT005TransForm(); + break; + case "T006": + baseTransForm = getT006TransForm(); + break; + case "T007": + baseTransForm = getT007TransForm(); + break; + case "T008": + baseTransForm = getT008TransForm(); + break; + case "R015": + baseTransForm = getR015TransForm(); + break; + case "T009": + baseTransForm = getT009TransForm(); + break; + case "T010": + baseTransForm = getT010TransForm(); + break; + case "T011": + baseTransForm = getT011TransForm(); + break; + case "T012": + baseTransForm = getT012TransForm(); + break; + case "T013": + baseTransForm = getT013TransForm(); + break; + case "F001": + baseTransForm = getF001TransForm(); + break; + case "T019": + baseTransForm = getT019TransForm(); + break; + case "T020": + baseTransForm = getT020TransForm(); + break; + case "T021": + baseTransForm = getT021TransForm(); + break; + case "T022": + baseTransForm = getT022TransForm(); + break; + default: + break; + } + return baseTransForm; + } + + private static R012TransForm getR012TransForm() { + + R012TransForm transForm = new R012TransForm(); + transForm.setTranCode("R012"); + transForm.initCommonParams("R012"); + transForm.setSubmitUrl(R012_SUBMIT_URL); + transForm.setUserId("102302320"); + transForm.setChoiceAgreement("01"); + return transForm; + } + private static R013TransForm getR013TransForm() { + + R013TransForm transForm = new R013TransForm(); + transForm.setTranCode("R013"); + transForm.initCommonParams("R013"); + transForm.setSubmitUrl(R013_SUBMIT_URL); + transForm.setBizType("00"); + transForm.setUserId("102302320"); + transForm.setEnpAcct("21341242423423423"); + transForm.setTransAmt(""); + return transForm; + } + private static R014TransForm getR014TransForm() { + + R014TransForm transForm = new R014TransForm(); + transForm.setTranCode("R014"); + transForm.initCommonParams("R014"); + transForm.setSubmitUrl(R014_SUBMIT_URL); + transForm.setEnpAcct("21341242423423423"); + return transForm; + } + private static Q006TransForm getQ006TransForm() { + + Q006TransForm transForm = new Q006TransForm(); + transForm.setTranCode("Q006"); + transForm.initCommonParams("Q006"); + transForm.setSubmitUrl(Q006_SUBMIT_URL); + transForm.setUserId("1231243124"); + transForm.setEnpAcct("21341242423423423"); + return transForm; + } + private static Q007TransForm getQ007TransForm() { + + Q007TransForm transForm = new Q007TransForm(); + transForm.setTranCode("Q007"); + transForm.initCommonParams("Q007"); + transForm.setSubmitUrl(Q007_SUBMIT_URL); + transForm.setUserId("1231243124"); + transForm.setEnpAcct("21341242423423423"); + transForm.setStartDate("20200729"); + transForm.setEndDate("20200729"); + transForm.setPageSize("10"); + transForm.setPageNum("1"); + return transForm; + } + private static Q008TransForm getQ008TransForm() { + + Q008TransForm transForm = new Q008TransForm(); + transForm.setTranCode("Q008"); + transForm.initCommonParams("Q008"); + transForm.setSubmitUrl(Q008_SUBMIT_URL); + transForm.setOriChannelSerialNo("1231243124"); + return transForm; + } + private static Q009TransForm getQ009TransForm() { + + Q009TransForm transForm = new Q009TransForm(); + transForm.setTranCode("Q009"); + transForm.initCommonParams("Q009"); + transForm.setSubmitUrl(Q009_SUBMIT_URL); + transForm.setEnpAcct("21341242423423423"); + transForm.setIdentityType("2"); + transForm.setIdentityCode("1231241234324"); + return transForm; + } + private static Q001TransForm getQ001TransForm() { + + Q001TransForm transForm = new Q001TransForm(); + transForm.setTranCode("Q001"); + transForm.initCommonParams("Q001"); + transForm.setSubmitUrl(Q001_SUBMIT_URL); + transForm.setUserId("100000002285"); + return transForm; + } + private static Q002TransForm getQ002TransForm() { + + Q002TransForm transForm = new Q002TransForm(); + transForm.setTranCode("Q002"); + transForm.initCommonParams("Q002"); + transForm.setSubmitUrl(Q002_SUBMIT_URL); + transForm.setTranMerOrderId("T006_20190614180952"); + transForm.setQueryType("RECV"); + return transForm; + } + private static Q004TransForm getQ004TransForm() { + + Q004TransForm transForm = new Q004TransForm(); + transForm.setTranCode("Q004"); + transForm.initCommonParams("Q004"); + transForm.setSubmitUrl(Q004_SUBMIT_URL); + transForm.setUserId("11000000111"); + transForm.setAcctType("1"); + transForm.setStartDate("20181230"); + transForm.setEndDate("20181231"); + transForm.setPageNum("1"); + return transForm; + } + private static R001TransForm getR001TransForm() { + + R001TransForm transForm = new R001TransForm(); + transForm.setTranCode("R001"); + transForm.initCommonParams("R001"); + transForm.setSubmitUrl(R001_SUBMIT_URL); + transForm.setMerUserId("11000000111"); + transForm.setUserName("某某公司"); + transForm.setMobile("13211111111"); + transForm.setCertType("2"); + transForm.setCertNo("112312431241231"); + transForm.setCertValidate("20201020"); + transForm.setCardNo("320102000"); + transForm.setBankCode("ICBC"); + transForm.setProvince("北京"); + transForm.setCity("北京市"); + transForm.setBranch("北京支行"); + return transForm; + } + private static R002TransForm getR002TransForm() { + + R002TransForm transForm = new R002TransForm(); + transForm.setTranCode("R002"); + transForm.initCommonParams("R002"); + transForm.setSubmitUrl(R002_SUBMIT_URL); + transForm.setUserId("11000000111"); + transForm.setBindCardAgrNo("10000000000000000000"); + transForm.setMobile("13211111111"); + transForm.setCardNo("320102000"); + transForm.setBankCode("ICBC"); + transForm.setProvince("北京"); + transForm.setCity("北京市"); + transForm.setBranch("北京支行"); + return transForm; + } + private static R003TransForm getR003TransForm() { + + R003TransForm transForm = new R003TransForm(); + transForm.setTranCode("R003"); + transForm.initCommonParams("R003"); + transForm.setSubmitUrl(R003_SUBMIT_URL); + transForm.setUserId("11000000111"); + transForm.setCertFileType("1"); + return transForm; + } + private static R004TransForm getR004TransForm() { + + R004TransForm transForm = new R004TransForm(); + transForm.setTranCode("R004"); + transForm.initCommonParams("R004"); + transForm.setSubmitUrl(R004_SUBMIT_URL); + transForm.setUserId("11000000111"); + transForm.setCertFileType("1"); + return transForm; + } + private static R007TransForm getR007TransForm() { + + R007TransForm transForm = new R007TransForm(); + transForm.setTranCode("R007"); + transForm.initCommonParams("R007"); + transForm.setSubmitUrl(R007_SUBMIT_URL); + transForm.setCardNo("21321423412343"); + transForm.setHolderName("刘备"); + transForm.setCardAvailableDate("0320"); + transForm.setCvv2("318"); + transForm.setMobileNo("13212121212"); + transForm.setIdentityType("1"); + transForm.setIdentityCode("12331341241234124234"); + transForm.setUserId("11000000111"); + transForm.setMerUserIp("211.12.38.88"); + return transForm; + } + private static R008TransForm getR008TransForm() { + + R008TransForm transForm = new R008TransForm(); + transForm.setTranCode("R008"); + transForm.initCommonParams("R008"); + transForm.setSubmitUrl(R008_SUBMIT_URL); + transForm.setNcountOrderId("2017032312244422"); + transForm.setSmsCode("788900"); + transForm.setMerUserIp("211.12.38.88"); + return transForm; + } + private static R009TransForm getR009TransForm() { + + R009TransForm transForm = new R009TransForm(); + transForm.setTranCode("R009"); + transForm.initCommonParams("R009"); + transForm.setSubmitUrl(R009_SUBMIT_URL); + transForm.setOriBindCardAgrNo("2017032312244422"); + transForm.setUserId("11000000111"); + return transForm; + } + private static R010TransForm getR010TransForm() { + + R010TransForm transForm = new R010TransForm(); + transForm.setTranCode("R010"); + transForm.initCommonParams("R010"); + transForm.setSubmitUrl(R010_SUBMIT_URL); + transForm.setMerUserId("2017032312244422"); + transForm.setMobile("13212121212"); + transForm.setUserName("张飞"); + transForm.setCertNo("123123124234235"); + return transForm; + } + private static R011TransForm getR011TransForm() { + + R011TransForm transForm = new R011TransForm(); + transForm.setTranCode("R011"); + transForm.initCommonParams("R011"); + transForm.setSubmitUrl(R011_SUBMIT_URL); + transForm.setUserId("2017032312244422"); + transForm.setCertNo("13212121212"); + transForm.setUserName("公司名称"); + transForm.setMobile("18888888888"); + transForm.setCertValidate("20200107"); + return transForm; + } + private static T002TransForm getT002TransForm() { + + T002TransForm transForm = new T002TransForm(); + transForm.setTranCode("T002"); + transForm.initCommonParams("T002"); + transForm.setSubmitUrl(T002_SUBMIT_URL); + transForm.setTranAmount("1212.12"); + transForm.setUserId("13212121212"); + transForm.setBindCardAgrNo("1231242354235"); + transForm.setNotifyUrl("http://www.xxx.com/response.do"); + transForm.setPaymentTerminalInfo("01|10001"); + transForm.setDeviceInfo("192.168.0.1|E1E2E3E4E5E6|12456789012345|20000|12345678901234567890|H1H2H3H4H5H6|AABBCC"); + return transForm; + } + private static T003TransForm getT003TransForm() { + + T003TransForm transForm = new T003TransForm(); + transForm.setTranCode("T003"); + transForm.initCommonParams("T003"); + transForm.setSubmitUrl(T003_SUBMIT_URL); + transForm.setPayUserId("11000000111"); + transForm.setReceiveUserId("11000000112"); + transForm.setTranAmount("12.12"); + transForm.setBusinessType("02"); + return transForm; + } + private static T004TransForm getT004TransForm() { + + T004TransForm transForm = new T004TransForm(); + transForm.setTranCode("T004"); + transForm.initCommonParams("T004"); + transForm.setSubmitUrl(T004_SUBMIT_URL); + transForm.setTranAmount("100.01"); + transForm.setBankCode("PBOC"); + transForm.setCurrencyType("1"); + transForm.setRemark(""); + transForm.setReceiveUserId("11000000111"); + transForm.setMerUserIp("211.12.38.88"); + transForm.setNotifyUrl("http://www.xxx.com/response.do"); + transForm.setBusinessType("01"); + return transForm; + } + private static T005TransForm getT005TransForm() { + + T005TransForm transForm = new T005TransForm(); + transForm.setTranCode("T005"); + transForm.initCommonParams("T005"); + transForm.setSubmitUrl(T005_SUBMIT_URL); + transForm.setSerialId("1231234124123"); + transForm.setOrgMerOrderId("1232134325423"); + transForm.setOrgSubmitTime("20200101121212"); + transForm.setOrderAmount("12.12"); + transForm.setRefundSource("1"); + transForm.setDestType("1"); + transForm.setRefundType("1"); + transForm.setRefundAmount("12.12"); + transForm.setNotifyUrl("http://www.xxx.com/response.do"); + transForm.setRemark("备注信息"); + return transForm; + } + private static T006TransForm getT006TransForm() { + + T006TransForm transForm = new T006TransForm(); + transForm.setTranCode("T006"); + transForm.initCommonParams("T006"); + transForm.setSubmitUrl(T006_SUBMIT_URL); + transForm.setTranAmount("12.12"); + transForm.setOrgCode("WECHATPAY"); + transForm.setCurrencyType("1"); + transForm.setRemark("备注信息"); + transForm.setNotifyServerUrl("http://www.xxx.com/response.do"); + transForm.setMerUserIp("211.12.38.88"); + transForm.setExpireTime("120"); + transForm.setRiskExpand("111"); + transForm.setGoodsInfo("111"); + transForm.setOrderSubject("111"); + transForm.setOrderDesc("1212"); + transForm.setPayLimit("1"); + transForm.setAppId("1231241434"); + transForm.setOpenId("123123424"); + transForm.setAliAppId(""); + transForm.setBuyerLogonId(""); + transForm.setBuyerId("备注信息"); + transForm.setMerchantId("111accSSVV"); + transForm.setReceiveUserId("213124234"); + transForm.setBusinessType("03"); + transForm.setFeeType("1"); + transForm.setDivideAcctDtl("[{\"ledgerUserId \": \"220000001390\",\"amount\": \"50\"},{\"ledgerUserId\":\"220000001408\",\"amount\":\"50\"}]"); + transForm.setFeeAmountUser(""); + return transForm; + } + private static T007TransForm getT007TransForm() { + + T007TransForm transForm = new T007TransForm(); + transForm.setTranCode("T007"); + transForm.initCommonParams("T007"); + transForm.setSubmitUrl(T007_SUBMIT_URL); + transForm.setTranAmount("12.12"); + transForm.setPayType("2"); + transForm.setCardNo("121220200101121212"); + transForm.setHolderName("赵子龙"); + transForm.setCardAvailableDate(""); + transForm.setCvv2(""); + transForm.setMobileNo("13212121212"); + transForm.setIdentityType("1"); + transForm.setIdentityCode("123124235345646"); + transForm.setBindCardAgrNo("http://www.xxx.com/response.do"); + transForm.setNotifyUrl("备注信息"); + transForm.setOrderExpireTime(""); + transForm.setUserId(""); + transForm.setReceiveUserId("备注信息"); + transForm.setMerUserIp("211.12.38.88"); + transForm.setRiskExpand(""); + transForm.setGoodsInfo("商品信息"); + transForm.setSubMerchantId("123123"); + transForm.setDivideFlag("0"); + transForm.setDivideDetail(""); + return transForm; + } + private static T008TransForm getT008TransForm() { + + T008TransForm transForm = new T008TransForm(); + transForm.setTranCode("T008"); + transForm.initCommonParams("T008"); + transForm.setSubmitUrl(T008_SUBMIT_URL); + transForm.setNcountOrderId("1231234124123"); + transForm.setSmsCode("121212"); + transForm.setMerUserIp("211.12.38.88"); + transForm.setPaymentTerminalInfo("01|10001"); + transForm.setReceiverTerminalInfo("01|00001|CN|110000"); + transForm.setDeviceInfo("192.168.0.1|E1E2E3E4E5E6|12456789012345|20000|12345678901234567890|H1H2H3H4H5H6|AABBCC"); + transForm.setBusinessType("03"); + transForm.setFeeType("1"); + transForm.setDivideAcctDtl("[{\"ledgerUserId \": \"220000001390\",\"amount\": \"50\"},{\"ledgerUserId\":\"220000001408\",\"amount\":\"50\"}]"); + transForm.setFeeAmountUser(""); + return transForm; + } + private static R015TransForm getR015TransForm() { + + R015TransForm transForm = new R015TransForm(); + transForm.setTranCode("R015"); + transForm.initCommonParams("R015"); + transForm.setSubmitUrl(R015_SUBMIT_URL); + transForm.setCardNo("6230200017171717"); + transForm.setUserId(""); + transForm.setMobileNo("13212121212"); + transForm.setFrontUrl("http://www.xxx.com/response.do"); + transForm.setNotifyUrl("https://www.baidu.com "); + transForm.setMerUserIp("211.12.38.88"); + transForm.setPageStyle("1"); + return transForm; + } + private static T009TransForm getT009TransForm() { + + T009TransForm transForm = new T009TransForm(); + transForm.setTranCode("T009"); + transForm.initCommonParams("T009"); + transForm.setSubmitUrl(T009_SUBMIT_URL); + transForm.setTranAmount("12.12"); + transForm.setOrgCode("WECHATPAY"); + transForm.setCurrencyType("1"); + transForm.setRemark("备注信息"); + transForm.setNotifyServerUrl("http://www.xxx.com/response.do"); + transForm.setMerUserIp("211.12.38.88"); + transForm.setExpireTime("120"); + transForm.setRiskExpand("111"); + transForm.setGoodsInfo("111"); + transForm.setOrderSubject("111"); + transForm.setOrderDesc("1212"); + transForm.setPayLimit("1"); + transForm.setMerchantId("111accSSVV"); + transForm.setReceiveUserId("213124234"); + transForm.setBusinessType("03"); + transForm.setFeeType("1"); + transForm.setDivideAcctDtl("[{\"ledgerUserId \": \"220000001390\",\"amount\": \"50\"},{\"ledgerUserId\":\"220000001408\",\"amount\":\"50\"}]"); + transForm.setFeeAmountUser(""); + return transForm; + } + private static T010TransForm getT010TransForm() { + + T010TransForm transForm = new T010TransForm(); + transForm.setTranCode("T010"); + transForm.initCommonParams("T010"); + transForm.setSubmitUrl(T010_SUBMIT_URL); + transForm.setMerUserIp("211.12.38.88"); + transForm.setGoodsInfo("111"); + transForm.setTranAmount("12.12"); + transForm.setPayType("BANK_B2C"); + transForm.setBankCode("ICBC"); + transForm.setCurrencyType("1"); + transForm.setDirectFlag("1"); + transForm.setNotifyFrontUrl("http://www.xxx.com/response.do"); + transForm.setNotifyServerUrl("http://www.xxx.com/response.do"); + transForm.setReceiveUserId("213124234"); + transForm.setPaymentTerminalInfo("01|10001"); + transForm.setReceiverTerminalInfo("01|00001|CN|110000"); + transForm.setDeviceInfo("192.168.0.1|E1E2E3E4E5E6|12456789012345|20000|12345678901234567890|H1H2H3H4H5H6|AABBCC"); + transForm.setBusinessType("03"); + transForm.setFeeType("1"); + transForm.setDivideAcctDtl("[{\"ledgerUserId \": \"220000001390\",\"amount\": \"50\"},{\"ledgerUserId\":\"220000001408\",\"amount\":\"50\"}]"); + transForm.setFeeAmountUser(""); + return transForm; + } + private static T011TransForm getT011TransForm() { + + T011TransForm transForm = new T011TransForm(); + transForm.setTranCode("T011"); + transForm.initCommonParams("T011"); + transForm.setSubmitUrl(T011_SUBMIT_URL); + transForm.setNcountOrderId("1231242345"); + transForm.setBusinessType("03"); + transForm.setOrgTranCode("T010"); + return transForm; + } + private static T012TransForm getT012TransForm() { + + T012TransForm transForm = new T012TransForm(); + transForm.setTranCode("T012"); + transForm.initCommonParams("T012"); + transForm.setSubmitUrl(T012_SUBMIT_URL); + transForm.setColDate("20191224"); + return transForm; + } + private static T013TransForm getT013TransForm() { + + T013TransForm transForm = new T013TransForm(); + transForm.setTranCode("T013"); + transForm.initCommonParams("T013"); + transForm.setSubmitUrl(T013_SUBMIT_URL); + transForm.setTranAmount("12.12"); + transForm.setCurrencyType("1"); + transForm.setPayType("BANK_B2C"); + transForm.setReceiveUserId("213124234"); + transForm.setNotifyFrontUrl("http://www.xxx.com/response.do"); + transForm.setNotifyServerUrl("http://www.xxx.com/response.do"); + transForm.setRiskExpand("111"); + transForm.setGoodsInfo("111"); + transForm.setOrderSubject("111"); + transForm.setOrderDesc("1212"); + transForm.setMerchantId("111accSSVV"); + transForm.setMerUserIp("211.12.38.88"); + transForm.setPayLimit("1"); + return transForm; + } + private static F001TransForm getF001TransForm() { + + F001TransForm transForm = new F001TransForm(); + transForm.setTranCode("F001"); + transForm.initCommonParams("F001"); + transForm.setSubmitUrl(F001_SUBMIT_URL); + transForm.setOrgMerOrderId("T006_1021345435"); + transForm.setDivideId("123456789"); + transForm.setDivideDtlId("223456789"); + return transForm; + } + private static T019TransForm getT019TransForm() { + + T019TransForm transForm = new T019TransForm(); + transForm.setTranCode("T019"); + transForm.initCommonParams("T019"); + transForm.setSubmitUrl(T019_SUBMIT_URL); + transForm.setTranAmount("100"); + transForm.setReceiveUserId("123456789"); + transForm.setMerUserIp("211.12.38.88"); + transForm.setNotifyUrl("https//www.xxx.com/request.do"); + transForm.setBusinessType("03"); + transForm.setFeeType("0"); + return transForm; + } + private static T020TransForm getT020TransForm() { + + T020TransForm transForm = new T020TransForm(); + transForm.setTranCode("T020"); + transForm.initCommonParams("T020"); + transForm.setSubmitUrl(T020_SUBMIT_URL); + transForm.setMerchantId("123"); + transForm.setTranAmount("1"); + transForm.setScanCodeId("28149154864202839"); + transForm.setBusinessType("03"); + transForm.setFeeType("0"); + transForm.setCurrencyType("1"); + transForm.setOrderSubject("测试"); + transForm.setHolderName("张三"); + transForm.setIdentityType("01"); + transForm.setIdentityCode(""); + transForm.setMinAge("10"); + transForm.setRiskExpand("测试"); + transForm.setTerminalId("123"); + transForm.setTerminalIp("211.12.38.88"); + transForm.setLocation(""); + transForm.setReceiveUserId(""); + transForm.setMerUserIp("211.12.38.88"); + transForm.setNotifyServerUrl(""); + transForm.setRemark(""); + return transForm; + } + private static T021TransForm getT021TransForm() { + + T021TransForm transForm = new T021TransForm(); + transForm.setTranCode("T021"); + transForm.initCommonParams("T021"); + transForm.setSubmitUrl(T021_SUBMIT_URL); + transForm.setMerchantId("123"); + transForm.setTerminalId("123"); + transForm.setTerminalType("01"); + transForm.setSerialNum(""); + transForm.setTerminalAddress(""); + return transForm; + } + private static T022TransForm getT022TransForm() { + + T022TransForm transForm = new T022TransForm(); + transForm.setTranCode("T022"); + transForm.initCommonParams("T022"); + transForm.setSubmitUrl(T022_SUBMIT_URL); + transForm.setMerchantId("123"); + transForm.setTerminalId("123"); + return transForm; + } + + public static String getVerifyDataByTranCode(String tranCode, Map responseMap) { + + StringBuffer sb = new StringBuffer(); + + String[] verifyFields = getVerifyArrByTranCode(tranCode); + + for (int i = 0; i < verifyFields.length; i++) { + sb.append(verifyFields[i]); + sb.append("=["); + sb.append(responseMap.get(verifyFields[i]) == null ? "" : responseMap.get(verifyFields[i])); + sb.append("]"); + } + + return sb.toString(); + + } + + private static String[] getVerifyArrByTranCode(String tranCode) { + switch (tranCode) { + case "R012": + return R012TransForm.verifyArr; + case "R013": + return R013TransForm.verifyArr; + case "R014": + return R014TransForm.verifyArr; + case "Q006": + return Q006TransForm.verifyArr; + case "Q007": + return Q007TransForm.verifyArr; + case "Q008": + return Q008TransForm.verifyArr; + case "Q009": + return Q009TransForm.verifyArr; + case "Q001": + return Q001TransForm.verifyArr; + case "Q002": + return Q002TransForm.verifyArr; + case "Q004": + return Q004TransForm.verifyArr; + case "R001": + return R001TransForm.verifyArr; + case "R002": + return R002TransForm.verifyArr; + case "R003": + return R003TransForm.verifyArr; + case "R004": + return R004TransForm.verifyArr; + case "R007": + return R007TransForm.verifyArr; + case "R008": + return R008TransForm.verifyArr; + case "R009": + return R009TransForm.verifyArr; + case "R010": + return R010TransForm.verifyArr; + case "R011": + return R011TransForm.verifyArr; + case "T002": + return T002TransForm.verifyArr; + case "T003": + return T003TransForm.verifyArr; + case "T004": + return T004TransForm.verifyArr; + case "T005": + return T005TransForm.verifyArr; + case "T006": + return T006TransForm.verifyArr; + case "T007": + return T007TransForm.verifyArr; + case "T008": + return T008TransForm.verifyArr; + case "R015": + return R015TransForm.verifyArr; + case "T009": + return T009TransForm.verifyArr; + case "T010": + return T010TransForm.verifyArr; + case "T011": + return T011TransForm.verifyArr; + case "T012": + return T012TransForm.verifyArr; + case "T013": + return T013TransForm.verifyArr; + case "F001": + return F001TransForm.verifyArr; + case "T019": + return T019TransForm.verifyArr; + case "T020": + return T020TransForm.verifyArr; + case "T021": + return T021TransForm.verifyArr; + case "T022": + return T022TransForm.verifyArr; + default: + return null; + } + } + +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/service/HnaPayService.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/service/HnaPayService.java new file mode 100644 index 0000000..9010a30 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/service/HnaPayService.java @@ -0,0 +1,23 @@ +package com.shop.cereshop.app.pay.hnapay.service; + +import com.shop.cereshop.app.pay.PayService; +import com.shop.cereshop.app.pay.xs.domain.XsCallBackRequestVo; + + +/** + * 描述:新生支付新账通分账服务类 + * + * @author stevenhu + * @version 2025/02/13 15:23 + */ +public interface HnaPayService extends PayService { + + /** + * 解析新生支付的回调接口 + * @param msg + * @return + * @throws Exception + */ + XsCallBackRequestVo parseCallBackRequestVo(String msg) throws Exception; + +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/service/impl/HnaPayServiceImpl.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/service/impl/HnaPayServiceImpl.java new file mode 100644 index 0000000..66a49ff --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/service/impl/HnaPayServiceImpl.java @@ -0,0 +1,378 @@ +package com.shop.cereshop.app.pay.hnapay.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.google.gson.Gson; +import com.shop.cereshop.app.dao.business.CerePlatformBusinessDAO; +import com.shop.cereshop.app.dao.order.CereOrderProductDAO; +import com.shop.cereshop.app.dao.order.CereShopOrderDAO; +import com.shop.cereshop.app.pay.hnapay.domain.DivideAcctDtlVo; +import com.shop.cereshop.app.pay.hnapay.request.form.T005TransForm; +import com.shop.cereshop.app.pay.hnapay.request.form.T006TransForm; +import com.shop.cereshop.app.pay.hnapay.request.form.T009TransForm; +import com.shop.cereshop.app.pay.hnapay.request.init.InitForm; +import com.shop.cereshop.app.pay.hnapay.service.HnaPayService; +import com.shop.cereshop.app.pay.hnapay.utils.HttpUtils; +import com.shop.cereshop.app.pay.hnapay.utils.JsonUtils; +import com.shop.cereshop.app.pay.xs.domain.XsCallBackRequestVo; +import com.shop.cereshop.app.pay.xs.utils.CommonUtils; +import com.shop.cereshop.app.service.business.CerePlatformBusinessService; +import com.shop.cereshop.app.service.buyer.CereBuyerUserService; +import com.shop.cereshop.app.service.shop.CerePlatformShopService; +import com.shop.cereshop.app.utils.ContextUtil; +import com.shop.cereshop.commons.config.HnaPayConfig; +import com.shop.cereshop.commons.config.XspayConfig; +import com.shop.cereshop.commons.domain.business.CerePlatformBusiness; +import com.shop.cereshop.commons.domain.buyer.CereBuyerUser; +import com.shop.cereshop.commons.domain.order.CereOrderParent; +import com.shop.cereshop.commons.domain.order.CereOrderProduct; +import com.shop.cereshop.commons.domain.order.CereShopOrder; +import com.shop.cereshop.commons.domain.shop.CerePlatformShop; +import com.shop.cereshop.commons.exception.CoBusinessException; +import com.shop.cereshop.commons.utils.EmptyUtils; +import com.shop.cereshop.commons.utils.StringUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 描述: + * + * @author stevenhu + * @version 2025/02/13 15:35 + */ +@Service(value = "HnaPayService") +@Slf4j +public class HnaPayServiceImpl implements HnaPayService { + + @Autowired + private CereShopOrderDAO cereShopOrderDAO; + + @Autowired + private CereBuyerUserService cereBuyerUserService; + + @Autowired + private CereOrderProductDAO cereOrderProductDAO; + + @Autowired + private CerePlatformShopService cerePlatformShopService; + + @Autowired + private CerePlatformBusinessService cerePlatformBusinessService; + + @Autowired + private CerePlatformBusinessDAO cerePlatformBusinessDAO; + + @Override + public Map gotoPay(String orderFormid, BigDecimal money, String openid, String ip, Integer type, Integer huabeiPeriod) throws CoBusinessException, Exception { + List orderList = null; + + String cereOrderFormId = orderFormid; + String[] split = orderFormid.split("-"); + if (!EmptyUtils.isEmpty(split)) { + cereOrderFormId = split[0]; + } + + //查询是否为父订单编号 + CereOrderParent parent = cereShopOrderDAO.findByParentFormid(cereOrderFormId); + if (parent != null) { + //查询所有子订单数据 + orderList = cereShopOrderDAO.findByParentId(parent.getParentId()); + + } else { + //子订单支付回调 + orderList = cereShopOrderDAO.findByFormid(cereOrderFormId); + } + if (orderList.isEmpty()) { + throw new CoBusinessException("10000", "订单查找出错", ""); + } + CereBuyerUser user = cereBuyerUserService.selectByBuyerUserId(orderList.get(0).getBuyerUserId()); + if (user == null) { + throw new CoBusinessException("10000", "系统出错,请联系管理员", ""); + } + + List cereOrderProductList = cereOrderProductDAO.findByOrderIds(orderList.stream().map(CereShopOrder::getOrderId).collect(Collectors.toList())); + log.info("cereOrderProductList:" + new Gson().toJson(cereOrderProductList)); + + List shopIdList = orderList.stream().map(CereShopOrder::getShopId).distinct().collect(Collectors.toList()); + List cerePlatformShopList = cerePlatformShopService.getByIdList(shopIdList); + + List businessIdList = cerePlatformShopList.stream().map(CerePlatformShop::getBusinessId).distinct().collect(Collectors.toList()); + List cerePlatformBusinessList = cerePlatformBusinessService.getByIdList(businessIdList); + for (CerePlatformBusiness cerePlatformBusiness : cerePlatformBusinessList) { + if (StringUtils.isEmpty(cerePlatformBusiness.getXsPayId())) { + //校验商家是否注册新账通商户 + throw new CoBusinessException("10000", "商家" + cerePlatformBusiness.getBusinessName() + "未进行支付信息认证,请联系管理员", ""); + } + } + + T006TransForm transForm = new T006TransForm(); + transForm.setTranCode("T006"); + transForm.initCommonParams("T006"); + transForm.setMerOrderId(orderFormid); + transForm.setSubmitUrl(InitForm.T006_SUBMIT_URL); + transForm.setTranAmount(String.valueOf(money)); + transForm.setOrgCode("WECHATPAY"); + transForm.setCurrencyType("1"); + transForm.setRemark("备注信息"); + transForm.setNotifyServerUrl(HnaPayConfig.APP_NOTICE_URL); + transForm.setMerUserIp(HnaPayConfig.IP); + transForm.setExpireTime(""); + transForm.setRiskExpand(""); + transForm.setGoodsInfo("商品名称"); + transForm.setOrderSubject("商品名称"); + transForm.setOrderDesc(""); + //1-仅能使用借记卡 为空表示不限制 + transForm.setPayLimit("1"); + transForm.setAppId(XspayConfig.wxAppid); + transForm.setOpenId(user.getWechatOpenId()); + transForm.setAliAppId(""); + transForm.setBuyerLogonId(""); + transForm.setBuyerId(""); + transForm.setMerchantId(HnaPayConfig.MERCHANT_ID); + String project = ContextUtil.getProject(); + String xsPayId = cerePlatformBusinessDAO.findXsPayIdByProject(project); + String merId = project.equals("0") ? HnaPayConfig.MERCHANT_ID : xsPayId; + //收款方id。即收款方的新账通id。 + transForm.setReceiveUserId(merId); + transForm.setBusinessType("03"); + transForm.setFeeType("1"); + transForm.setDivideAcctDtl(this.buildSubMerchantOrderDetails(orderList, cereOrderProductList, cerePlatformShopList, cerePlatformBusinessList)); + transForm.setFeeAmountUser(""); + String result = ""; + try { + result = HttpUtils.commonReq(transForm, false); + } catch (Exception e) { + e.printStackTrace(); + } + + //解析返回结果 + JSONObject jsonObject = JSONObject.parseObject(result); + String payInfoStr = jsonObject.getJSONObject("content").getJSONObject("payInfo").getString("payInfo"); + payInfoStr = payInfoStr.replace("{", "").replace("}", ""); + String[] payInfoDetailArray = payInfoStr.split(","); + Map resultMap = new HashMap<>(); + for (String payInfoDetail : payInfoDetailArray) { + if (StringUtils.isNotBlank(payInfoDetail) && payInfoDetail.contains("=")) { + int firstIndex = payInfoDetail.indexOf("="); + String key = payInfoDetail.substring(0, firstIndex).trim(); + String value = payInfoDetail.substring(firstIndex + 1).trim(); + if (!StringUtils.isEmpty(XspayConfig.WX_SIGN_TYPE) && StringUtils.equals(key, "signType")) { + value = XspayConfig.WX_SIGN_TYPE; + } + resultMap.put(key, value); + } + } + return resultMap; + } + + private String buildSubMerchantOrderDetails(List orderList, + List cereOrderProductList, + List cerePlatformShopList, + List cerePlatformBusinessList) { + if(cereOrderProductList.isEmpty()){ + return null; + } + + List divideAcctDtlVos = new ArrayList<>(); + for (CereShopOrder cereShopOrder : orderList) { + CerePlatformShop cerePlatformShop = cerePlatformShopList.stream().filter(item -> + item.getShopId().equals(cereShopOrder.getShopId())).findFirst().orElse(null); + + CerePlatformBusiness cerePlatformBusiness = cerePlatformBusinessList.stream().filter(item -> + item.getBusinessId().equals(cerePlatformShop.getBusinessId())).findFirst().orElse(null); + + List orderProductList = cereOrderProductList.stream().filter(item -> item.getOrderId().equals(cereShopOrder.getOrderId())).collect(Collectors.toList()); + BigDecimal prodTotalAmount = BigDecimal.ZERO; + for (CereOrderProduct cereOrderProduct : orderProductList) { + BigDecimal productShareAmount = cereOrderProduct.getActualPrice().add(cereOrderProduct.getLogisticsPrice()) + .subtract(cereOrderProduct.getUseCreditAmount()) + .subtract(cereOrderProduct.getPlatformCommission()); + prodTotalAmount = prodTotalAmount.add(productShareAmount); + } + + DivideAcctDtlVo divideAcctDtlVo = new DivideAcctDtlVo(); + divideAcctDtlVo.setLedgerUserId(cerePlatformBusiness.getXsPayId()); + divideAcctDtlVo.setAmount(String.valueOf(prodTotalAmount)); + divideAcctDtlVos.add(divideAcctDtlVo); + + //平台 + BigDecimal platformShareAmount = cereShopOrder.getPlatformCommission(); + DivideAcctDtlVo platDivideAcctDtlVo = new DivideAcctDtlVo(); + platDivideAcctDtlVo.setLedgerUserId(HnaPayConfig.MER_ID); + platDivideAcctDtlVo.setAmount(String.valueOf(platformShareAmount)); + + divideAcctDtlVos.add(platDivideAcctDtlVo); + } + + return JSONUtil.toJsonStr(divideAcctDtlVos); + } + + @Override + public Map refund(String orderFormid, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception { + return null; + } + + @Override + public Map orderRefund(String outTradeNo, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception { + String result = ""; + T005TransForm transForm = new T005TransForm(); + transForm.setTranCode("T005"); + transForm.initCommonParams("T005"); + transForm.setSubmitUrl(InitForm.T005_SUBMIT_URL); + transForm.setSerialId("thee" + System.currentTimeMillis()); + transForm.setOrgMerOrderId(outTradeNo); + //transForm.setOrgSubmitTime(orderInfo.getPaySubmitTime()); + transForm.setOrderAmount(String.valueOf(total)); + transForm.setRefundSource("1"); + transForm.setDestType("1"); + //退款类型 1:全额退款 2:部分退款 + transForm.setRefundType("1"); + transForm.setRefundAmount(String.valueOf(refund)); + transForm.setNotifyUrl(HnaPayConfig.REFUND_NOTICE_URL); + transForm.setRemark("退款备注信息"); + try { + result = HttpUtils.commonReq(transForm, false); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + @Override + public Map refundBond(String orderFormid, String transactionId, String outRefundNo, BigDecimal total, BigDecimal refund) throws CoBusinessException, Exception { + return null; + } + + @Override + public String getCollectionCode(String orderFormid, BigDecimal money, String ip, String tradeType) throws CoBusinessException, Exception { + return null; + } + + @Override + public String getOrderCollectionCode(String orderFormid, BigDecimal money, String ip, String tradeType) throws CoBusinessException, Exception { + + List orderList = null; + + String cereOrderFormId = orderFormid; + String[] split = orderFormid.split("-"); + if(!EmptyUtils.isEmpty(split)) { + cereOrderFormId = split[0]; + } + + //查询是否为父订单编号 + CereOrderParent parent = cereShopOrderDAO.findByParentFormid(cereOrderFormId); + if (parent != null) { + //查询所有子订单数据 + orderList = cereShopOrderDAO.findByParentId(parent.getParentId()); + + } else { + //子订单支付回调 + orderList = cereShopOrderDAO.findByFormid(cereOrderFormId); + } + if(orderList.isEmpty()){ + throw new CoBusinessException("10000","订单查找出错", ""); + } + + log.info("orderList:" + new Gson().toJson(orderList)); + + CereBuyerUser user = cereBuyerUserService.selectByBuyerUserId(orderList.get(0).getBuyerUserId()); + if(user == null){ + throw new CoBusinessException("10000","系统出错,请联系管理员", ""); + } + + List cereOrderProductList = cereOrderProductDAO.findByOrderIds(orderList.stream().map(CereShopOrder::getOrderId).collect(Collectors.toList())); + log.info("cereOrderProductList:" + new Gson().toJson(cereOrderProductList)); + + List shopIdList = orderList.stream().map(CereShopOrder::getShopId).distinct().collect(Collectors.toList()); + List cerePlatformShopList = cerePlatformShopService.getByIdList(shopIdList); + + List businessIdList = cerePlatformShopList.stream().map(CerePlatformShop::getBusinessId).distinct().collect(Collectors.toList()); + List cerePlatformBusinessList = cerePlatformBusinessService.getByIdList(businessIdList); + for (CerePlatformBusiness cerePlatformBusiness : cerePlatformBusinessList) { + if(StringUtils.isEmpty(cerePlatformBusiness.getXsPayId())){ + throw new CoBusinessException("10000","商家" + cerePlatformBusiness.getBusinessName() + "未进行支付信息认证,请联系管理员", ""); + } + } + + String result = ""; + T009TransForm transForm = new T009TransForm(); + transForm.setTranCode("T009"); + transForm.initCommonParams("T009"); + transForm.setSubmitUrl(InitForm.T009_SUBMIT_URL); + transForm.setTranAmount(String.valueOf(money)); + //tradeType: WECHATPAY-微信支付 ALIPAY-支付宝支付 TENPAY-腾讯 UNIONPAY-银联 + transForm.setOrgCode(tradeType); + transForm.setCurrencyType("1"); + //transForm.setRemark(""); + transForm.setNotifyServerUrl(HnaPayConfig.APP_NOTICE_URL); + transForm.setMerUserIp(HnaPayConfig.IP); + //transForm.setExpireTime(""); + transForm.setRiskExpand(""); + transForm.setGoodsInfo(""); + transForm.setOrderSubject(""); + transForm.setOrderDesc(""); + transForm.setPayLimit("1"); + transForm.setMerchantId(HnaPayConfig.MERCHANT_ID); + String project = ContextUtil.getProject(); + String xsPayId = cerePlatformBusinessDAO.findXsPayIdByProject(project); + String merId = project.equals("0") ? HnaPayConfig.MERCHANT_ID : xsPayId; + //收款方id。即收款方的新账通id。 + transForm.setReceiveUserId(merId); + transForm.setBusinessType("03"); + transForm.setFeeType("1"); + transForm.setDivideAcctDtl(this.buildSubMerchantOrderDetails(orderList, cereOrderProductList, cerePlatformShopList, cerePlatformBusinessList)); + transForm.setFeeAmountUser(""); + try { + result = HttpUtils.commonReq(transForm, false); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 获取订单二维码 + * @param msg + * @return + * @throws Exception + */ + @Override + public XsCallBackRequestVo parseCallBackRequestVo(String msg) throws Exception { + //base64 decode + String msgStr = new String(Base64.getDecoder().decode(msg)); + + //LinkedHashMap json字符串转map时保持字段顺序不变 + JSONObject headContentMap = JSONObject.parseObject(msgStr); + + String resSign = headContentMap.getString("sign"); + headContentMap.remove("sign"); + + //headContentMap 转为json字符串时保留字段值为null的字段 + SerializerFeature[] serializerFeatures = new SerializerFeature[]{SerializerFeature.WriteMapNullValue}; + String headContentJson = JSONObject.toJSONString(headContentMap,serializerFeatures); + CommonUtils.verifySignature(headContentJson, resSign); + + JSONObject head = headContentMap.getJSONObject("head"); + JSONObject content = headContentMap.getJSONObject("content"); + + String responseCode = content.getString("responseCode"); + if(StrUtil.isNotBlank(responseCode) && StrUtil.isNotBlank(responseCode) && !StrUtil.equals(responseCode, "0") + && !StrUtil.equals(responseCode, "0000") && !StrUtil.equals(responseCode, "0001")){ + String errorMsg = content.getString("responseDesc"); + throw new CoBusinessException(responseCode, errorMsg); + } + XsCallBackRequestVo xsCallBackRequestVo = new XsCallBackRequestVo(); + xsCallBackRequestVo.setHead(head); + xsCallBackRequestVo.setContent(content); + return xsCallBackRequestVo; + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/Base64Util.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/Base64Util.java new file mode 100644 index 0000000..b162ac2 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/Base64Util.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2017. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * www.hnapay.com + */ + +package com.shop.cereshop.app.pay.hnapay.utils; + +import java.util.Base64; + +/** + * base64编码工具类 + */ +@SuppressWarnings({"all"}) +public class Base64Util { + + /** + * 将 s 进行 BASE64 编码 + * + * @param s + * @return + */ + public static String encode(byte[] s) { + if (s == null) + return null; + return Base64.getEncoder().encodeToString(s); + } + + + /** + * 将 s 进行 BASE64 编码 + * + * @param s + * @return + */ + public static String encode(String s) { + if (s == null) + return null; + return encode(s.getBytes()); + } + + /** + * 将 BASE64 编码的字符串 s 进行解码 + * + * @param s + * @return + */ + public static byte[] decode(String s) { + if (s == null) + return null; + try { + byte[] b = Base64.getDecoder().decode(s); + return b; + } catch (Exception e) { + return null; + } + } + + +} + + diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/HexStringByte.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/HexStringByte.java new file mode 100644 index 0000000..a4bb653 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/HexStringByte.java @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2017. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * www.hnapay.com + */ + +package com.shop.cereshop.app.pay.hnapay.utils; + +/** + * 十六进制转换 + */ +public class HexStringByte { + + /** + * 字符串转换成十六进制值 + * @param bin String 我们看到的要转换成十六进制的字符串 + * @return + */ + public static String stringToHex(String bin) { + char[] digital = "0123456789ABCDEF".toCharArray(); + StringBuffer sb = new StringBuffer(""); + byte[] bs = bin.getBytes(); + int bit; + for (int i = 0; i < bs.length; i++) { + bit = (bs[i] & 0x0f0) >> 4; + sb.append(digital[bit]); + bit = bs[i] & 0x0f; + sb.append(digital[bit]); + } + return sb.toString(); + } + + /** + * 十六进制转换字符串 + * @param hex String 十六进制 + * @return String 转换后的字符串 + */ + public static String hexToString(String hex) { + String digital = "0123456789ABCDEF"; + char[] hex2char = hex.toCharArray(); + byte[] bytes = new byte[hex.length() / 2]; + int temp; + for (int i = 0; i < bytes.length; i++) { + temp = digital.indexOf(hex2char[2 * i]) * 16; + temp += digital.indexOf(hex2char[2 * i + 1]); + bytes[i] = (byte) (temp & 0xff); + } + return new String(bytes); + } + + /** + * java字节码转字符串 + * @param bts + * @return + */ + + public static String byteToHex(byte[] bts) { + String des = ""; + String tmp = null; + for (int i = 0; i < bts.length; i++) { + tmp = (Integer.toHexString(bts[i] & 0xFF)); + if (tmp.length() == 1) { + des += "0"; + } + des += tmp; + } + return des; + } + + /** + * hex2byte. + * + * @param hexStr hexStr + * @return byte[] + */ + public static byte[] hex2byte(String hexStr) { + byte[] bts = new byte[hexStr.length() / 2]; + for (int i = 0, j = 0; j < bts.length; j++) { + bts[j] = (byte) Integer.parseInt(hexStr.substring(i, i + 2), 16); + i += 2; + } + return bts; + } + + /** + * 字符串转java字节码 + * @param b + * @return + */ + public static byte[] hexToByte(byte[] b) { + if ((b.length % 2) != 0) { + throw new IllegalArgumentException("长度不是偶数"); + } + byte[] b2 = new byte[b.length / 2]; + for (int n = 0; n < b.length; n += 2) { + String item = new String(b, n, 2); + // 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个进制字节 + b2[n / 2] = (byte) Integer.parseInt(item, 16); + } + b = null; + return b2; + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/HnaPayDateUtils.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/HnaPayDateUtils.java new file mode 100644 index 0000000..249b7cb --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/HnaPayDateUtils.java @@ -0,0 +1,195 @@ + package com.shop.cereshop.app.pay.hnapay.utils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + + public class HnaPayDateUtils { + /** 时间格式:yyyyMMddHHmmss'. */ + public static String DEFAULT_PATTERN = "yyyyMMddHHmmss"; + + /** 时间格式:yyyyMMdd'. */ + public static String yyyyMMdd = "yyyyMMdd"; + + /** 时间格式:yyyy-MM-dd'. */ + public static String yyyy_MM_dd = "yyyy-MM-dd"; + + /** 时间格式:HH:mm:ss'. */ + public static String HH_mm_ss = "HH:mm:ss"; + + /** 时间格式:yyyy-MM-dd' 'HH:mm:ss'. */ + public static String yyyy_MM_dd_HH_mm_ss = "yyyy-MM-dd' 'HH:mm:ss"; + + /** 时间格式:yyyy-MM-dd' 'HH:mm'. */ + public static String yyyy_MM_dd_HH_mm = "yyyy-MM-dd' 'HH:mm"; + + /** + * 获取当前时间(格式:yyyyMMddHHmmss) + * + * @return + */ + public static String getCurrDate() { + return getCurrDate(DEFAULT_PATTERN); + } + + /** + * 字符串转日期,默认格式为yyyyMMddHHmmss + * + * @param str + * @return + */ + public static Date strToDate(String str) { + return strToDate(str, DEFAULT_PATTERN); + } + + /** + * 日期格式化,默认格式为yyyyMMddHHmmss + * + * @param date + * 日期 + * @return + */ + public static String format(Date date) { + return HnaPayDateUtils.format(date, DEFAULT_PATTERN); + } + + /** + * 字符串转日期 + * + * @param str + * 时间 + * @param pattern + * 格式 + * @return + */ + public static Date strToDate(String str, String pattern) { + SimpleDateFormat format = new SimpleDateFormat(pattern); + Date date = null; + try { + date = format.parse(str); + } catch (ParseException e) { + e.printStackTrace(); + } + return date; + } + + /** + * 日期格式化 + * + * @param date + * 日期 + * @param pattern + * 格式 + * @return + */ + public static String format(Date date, String pattern) { + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + + return sdf.format(date); + } + + /** + * 获取当前时间 + * + * @param pattern + * 格式 + * @return + */ + public static String getCurrDate(String pattern) { + long d = System.currentTimeMillis(); + Date date = new Date(d); + + return format(date, pattern); + } + + /** + * 获取系统当前时间 + * + * @return + */ + public static Date getSystemDate() { + long d = System.currentTimeMillis(); + Date date = new Date(d); + + return date; + } + + /** + * 格式化时间 + * + * @param strTime + * @param pattern + * @return + */ + public static String getTime(String strTime, String pattern) { + SimpleDateFormat s = new SimpleDateFormat(pattern); + try { + return String.valueOf(s.parse(strTime).getTime());// 时间戳 + } catch (ParseException e) { + e.printStackTrace(); + return String.valueOf(new Date().getTime()); + } + } + + /** + * 格式化日期格式 + * + * @param date + * @param mask + * @return + */ + public static final String date2string(Date date, String style) { + SimpleDateFormat sdf = new SimpleDateFormat(style); + return sdf.format(date); + } + + /** + * 获取本地日期时间. + * + * @return 本地日期时间yyyyMMddHHmmss + */ + public static String getLocalFullDateTime14() { + return date2string(new Date(), DEFAULT_PATTERN); + } + + + /** + * 返回指定格式时间 + * @param mask + * @return + */ + public static final String now2string(String mask){ + return date2string(new Date(), mask); + } + + /** + * + * @param date + * @param field + * @param amount + * @return 对指定的日期做加减运算;
+ * 减:add(new Date(), Calendar.DATE, -1)返回昨天的日期
+ * 加:add(new Date(), Calendar.YEAR, 1)返回一年后的今天 + */ + public static Date add(Date date, int field, int amount) { + Calendar c = Calendar.getInstance(); + c.setTime(date); + c.add(field, amount); + return c.getTime(); + } + + + /** + * 返回需要格式的字符串时间 + * @param str 字符串时间 + * @param patternS 字符串格式 + * @param patternE 格式化后的格式 + * @return + */ + public static String strToStr(String str, String patternS,String patternE){ + + return format(strToDate(str,patternS),patternE); + + } + } diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/HnapaySign.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/HnapaySign.java new file mode 100644 index 0000000..5d1c462 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/HnapaySign.java @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2015. + * www.hnapay.com + */ + +package com.shop.cereshop.app.pay.hnapay.utils; + +import com.shop.cereshop.commons.config.HnaPayConfig; +import com.shop.cereshop.commons.exception.CoBusinessException; + +import javax.crypto.Cipher; +import java.io.ByteArrayOutputStream; +import java.security.Key; +import java.security.KeyFactory; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.X509EncodedKeySpec; + +/** + * 签名 验签 加解密 + */ +public class HnapaySign { + + /** + * RSA最大加密明文大小 + */ + private static final int MAX_ENCRYPT_BLOCK = 117; + + + /** + * 签名 + * + * @param privateKey + * 企业用户编号 + * @param merData + * 明文串 + * @return 签名后的消息 + * @throws CoBusinessException + */ + public static byte[] sign(PrivateKey privateKey, String merData) throws CoBusinessException { + + try { + return RSAAlgorithms.sign(privateKey, merData); + } catch (Exception e) { + throw new CoBusinessException("读取密钥异常", e); + } + + } + + /** + * 验证签名 + * + * @param merData + * 明文串 + * @param signMsg + * 签名消息 + * @return 验证签名的结果 true--成功 false--失败 + * @throws CoBusinessException + */ + public static boolean verify(String merData, String signMsg) throws CoBusinessException { + boolean result = false; + String hexPublicKey = HexStringByte.byteToHex(Base64Util.decode(HnaPayConfig.NCOUNT_PUBLIC_KEY)); + String signVal = HexStringByte.byteToHex(Base64Util.decode(signMsg)); + result = verifySignatureByRSA(merData, signVal, "UTF-8", hexPublicKey); + return result; + } + + /** + * @param src + * @param dit + * @param charsetType + * @param publicKey + * @return + * @throws CoBusinessException + */ + private static boolean verifySignatureByRSA(String src, String dit, String charsetType, String publicKey) + throws CoBusinessException { + if ((src == null) || ("".equals(src.trim()))) { + throw new CoBusinessException("src is empty ,verifySignatureByRSA无法执行"); + } + if ((dit == null) || ("".equals(dit.trim()))) { + throw new CoBusinessException("dit is empty ,verifySignatureByRSA无法执行"); + } + try { + return RSAAlgorithms.verify(publicKey, src, dit); + } catch (Exception e) { + e.printStackTrace(); + throw new CoBusinessException("验证签名出现异常:请检查输入参数"); + } + } + + /** + *

+ * 公钥加密 + *

+ * + * @param data + * 源数据 + * @return + * @throws Exception + */ + public static byte[] encryptByPublicKey(byte[] data, String key) throws Exception { + if (data == null) { + throw new Exception("需要加密的数据为空"); + } + PublicKey publicKey = getPublicKey(key); + X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(publicKey.getEncoded()); + KeyFactory keyFactory = KeyFactory.getInstance(HnaPayConfig.ALGORITHM); + Key publicK = keyFactory.generatePublic(x509KeySpec); + // 对数据加密 + Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); + cipher.init(Cipher.ENCRYPT_MODE, publicK); + int inputLen = data.length; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int offSet = 0; + byte[] cache; + int i = 0; + // 对数据分段加密 + while (inputLen - offSet > 0) { + if (inputLen - offSet > MAX_ENCRYPT_BLOCK) { + cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK); + } else { + cache = cipher.doFinal(data, offSet, inputLen - offSet); + } + out.write(cache, 0, cache.length); + i++; + offSet = i * MAX_ENCRYPT_BLOCK; + } + byte[] encryptedData = out.toByteArray(); + out.close(); + return encryptedData; + } + + /** + * @param publicKey + * 密钥信息 + * @return 返回公钥 + * @throws Exception + */ + private static PublicKey getPublicKey(String publicKey) throws Exception { + PublicKey pubKey = null; + try { + KeyFactory keyFactory = KeyFactory.getInstance(HnaPayConfig.ALGORITHM); + pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(Base64Util.decode(publicKey))); + } catch (InvalidKeySpecException e) { + throw new Exception("公钥无效!", e); + } + return pubKey; + } + + /** + * hex2byte. + * + * @param hexStr + * hexStr + * @return byte[] + */ + public static byte[] hex2byte(String hexStr) { + byte[] bts = new byte[hexStr.length() / 2]; + for (int i = 0, j = 0; j < bts.length; j++) { + bts[j] = (byte) Integer.parseInt(hexStr.substring(i, i + 2), 16); + i += 2; + } + return bts; + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/HttpClientUtils.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/HttpClientUtils.java new file mode 100644 index 0000000..bb579c6 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/HttpClientUtils.java @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2017. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * www.hnapay.com + */ + +package com.shop.cereshop.app.pay.hnapay.utils; + +import com.shop.cereshop.commons.exception.CoBusinessException; +import org.apache.commons.httpclient.*; +import org.apache.commons.httpclient.methods.ByteArrayRequestEntity; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.commons.httpclient.params.HttpMethodParams; +import org.apache.commons.lang3.StringUtils; +import org.apache.http.HttpStatus; + +import javax.naming.CommunicationException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + + +/** + * HttpClient工具类 + * + */ +public class HttpClientUtils { + private String sendEncoding = "UTF-8"; + private int retryConnTimes = 1; + private int timeout = 5*60*1000; + /** + * HTTP请求 + * + * @param obj + * @return + * @throws CommunicationException + */ + /* String url=this.notifyBtJumpPath+"?contractId="+contractId+"&inTxnCd="+IntTxnCd._00203.value;*/ + public String submit(Object obj ,String url) throws CoBusinessException { + HttpClient client = new HttpClient(); + PostMethod method = new PostMethod(url); + method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, + new DefaultHttpMethodRetryHandler(retryConnTimes, false)); + client.getHttpConnectionManager().getParams().setConnectionTimeout(timeout); + client.getHttpConnectionManager().getParams().setSoTimeout(timeout); + + if (StringUtils.isNotEmpty(this.sendEncoding)) { + method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, sendEncoding); + } + method.setRequestHeader("User-Agent", "Rich Powered/1.0"); + + if (obj != null) { + if (obj instanceof Map) { + @SuppressWarnings("unchecked") + Map paraMap = (Map) obj; + for (Iterator iter = paraMap.keySet().iterator(); iter.hasNext();) { + String key = iter.next(); + String value = ""; + if (paraMap.get(key) != null) { + value = paraMap.get(key); + } + + method.addParameter(key, value); + } + } else if (obj instanceof byte[]) { + method.setRequestEntity(new ByteArrayRequestEntity((byte[]) obj)); + } else { + throw new IllegalArgumentException("submit(Object obj): obj should be Map or byte[]"); + } + } + + int statusCode = 0; + byte[] responseBody = null; + String result = ""; + try { + statusCode = client.executeMethod(method); + responseBody = method.getResponseBody(); + result = new String(responseBody, sendEncoding); + } catch (HttpException e) { + } catch (IOException e) { + } finally { + method.releaseConnection(); + client.getHttpConnectionManager().closeIdleConnections(0); + } + if (statusCode != HttpStatus.SC_OK) { + throw new CoBusinessException("HTTP状态:"+String.valueOf(statusCode)); + } + + return result; + } + + public String query(Object obj ,String url) throws CoBusinessException { + HttpClient client = new HttpClient(); + GetMethod method = new GetMethod(url); + method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, + new DefaultHttpMethodRetryHandler(retryConnTimes, false)); + client.getHttpConnectionManager().getParams().setConnectionTimeout(timeout); + client.getHttpConnectionManager().getParams().setSoTimeout(timeout); + + if (StringUtils.isNotEmpty(this.sendEncoding)) { + method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, sendEncoding); + } + method.setRequestHeader("User-Agent", "Rich Powered/1.0"); + List params = new ArrayList(); + if (obj != null) { + if (obj instanceof Map) { + @SuppressWarnings("unchecked") + Map paraMap = (Map) obj; + for (Iterator iter = paraMap.keySet().iterator(); iter.hasNext();) { + String key = iter.next(); + String value = ""; + if (paraMap.get(key) != null) { + value = paraMap.get(key); + } + params.add(new NameValuePair(key,value)); + } + } else if (obj instanceof byte[]) { + + } else { + throw new IllegalArgumentException("submit(Object obj): obj should be Map or byte[]"); + } + } + + int statusCode = 0; + byte[] responseBody = null; + String result = ""; + try { + NameValuePair[] temp = new NameValuePair[params.size()]; + method.setQueryString(params.toArray(temp)); + statusCode = client.executeMethod(method); + responseBody = method.getResponseBody(); + result = new String(responseBody, sendEncoding); + } catch (HttpException e) { + } catch (IOException e) { + } finally { + method.releaseConnection(); + client.getHttpConnectionManager().closeIdleConnections(0); + } + if (statusCode != HttpStatus.SC_OK) { + throw new CoBusinessException("HTTP状态:"+String.valueOf(statusCode)); + } + + return result; + } + +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/HttpUtils.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/HttpUtils.java new file mode 100644 index 0000000..9341c58 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/HttpUtils.java @@ -0,0 +1,114 @@ +package com.shop.cereshop.app.pay.hnapay.utils; + +import com.shop.cereshop.app.pay.hnapay.request.form.BaseTransForm; +import com.shop.cereshop.app.pay.hnapay.request.init.InitForm; +import com.shop.cereshop.commons.config.HnaPayConfig; +import com.shop.cereshop.commons.utils.Base64Util; +import org.apache.http.HttpEntity; +import org.apache.http.NameValuePair; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.HttpMultipartMode; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; + +import java.io.File; +import java.io.FileInputStream; +import java.security.PrivateKey; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class HttpUtils { + + public static String httpPost(String url,String msg) throws Exception { + //发送请求 + CloseableHttpClient httpclient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(url); + //此处设值防止新生将该次请求当成手机端请求 + httpPost.setHeader("User-Agent","Mozilla/5.0(Windows NT 6.1;Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0"); + List params=new ArrayList(); + params.add(new BasicNameValuePair("msg",msg)); + UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params,"UTF-8"); + httpPost.setEntity(entity); + CloseableHttpResponse response = httpclient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String responseStr = EntityUtils.toString(responseEntity, "UTF-8"); + return responseStr; + } + + + public static String httpPostFile(String url,String msg,File attachedFile) throws Exception { + //发送请求 + CloseableHttpClient httpclient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(url); + //设置请求参数 + MultipartEntityBuilder builder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532); + builder.addTextBody("msg", msg, ContentType.TEXT_PLAIN); + //把文件加到HTTP的post请求中 + if(attachedFile != null) { + builder.addBinaryBody("attachedFile", new FileInputStream(attachedFile), ContentType.APPLICATION_OCTET_STREAM, attachedFile.getName()); + } + HttpEntity multipart = builder.build(); + + httpPost.setEntity(multipart); + CloseableHttpResponse response = httpclient.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String responseStr = EntityUtils.toString(responseEntity, "UTF-8"); + return responseStr; + } + + public static String commonReq(BaseTransForm base, boolean isUploadFile) throws Exception { + //1,加载商户私钥 + PrivateKey privateKey = KeyUtils.loadPrivateKey(HnaPayConfig.MER_PRIVATE_KEY); + //4,获取加密字段的json串(明文) + String encryptStr = base.getEncryptJsonStr(); + System.out.println("待加密字符串为:"+encryptStr); + + //5,使用平台公钥进行rsa加密 + String msgCipherText = Base64Util.encode(HnapaySign.encryptByPublicKey(encryptStr.getBytes(), HnaPayConfig.NCOUNT_PUBLIC_KEY)).replace("\n", "").replace("\r", ""); + System.out.println("加密后字符串为:"+msgCipherText); + base.setMsgCiphertext(msgCipherText); + + //6,使用商户私钥进行签名 + String signValue = Base64Util.encode(HnapaySign.sign(privateKey, base.getCommonSignStr())).replace("\n", "").replace("\r", ""); + System.out.println("签名后字符串为:"+signValue); + + base.setSignValue(signValue); + + //7,构建提交至平台的请求参数 + Map reqMap = base.getCommonReqSignParams(isUploadFile); + reqMap.put("signValue", base.getSignValue()); + reqMap.put("charset", "1"); + System.out.println("提交字符串为:"+ JsonUtils.toJson(reqMap)); + + String response = null; + if (base.getSubmitUrl().startsWith("https://")) { + HttpsTransport httpsTransport = new HttpsTransport(); + httpsTransport.setSendEncoding("UTF-8"); + httpsTransport.setUrl(base.getSubmitUrl()); + response = (String) httpsTransport.submit(reqMap); + } else { + HttpClientUtils httpClientUtils = new HttpClientUtils(); + response = httpClientUtils.submit(reqMap, base.getSubmitUrl()); + } + System.out.println("响应字符串为:"+JsonUtils.toJson(response)); + //8,返回参数转map + Map responseMap = JsonUtils.jsonToMap(response); + + //9,根据交易码构建不同接口验签明文串 + String verifyFieldStr = InitForm.getVerifyDataByTranCode(base.getTranCode(), responseMap); + System.out.println("验签明文字符串为:"+verifyFieldStr); + + //10,使用平台公钥进行验签 + boolean verifyResult = HnapaySign.verify(verifyFieldStr, responseMap.get("signValue").toString()); + System.out.println("验签结果为:"+verifyResult); + + return verifyResult ? response : null; + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/HttpsTransport.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/HttpsTransport.java new file mode 100644 index 0000000..331875c --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/HttpsTransport.java @@ -0,0 +1,211 @@ +/* + * Copyright (c) 2017. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * www.hnapay.com + */ + +package com.shop.cereshop.app.pay.hnapay.utils; + +import org.apache.commons.lang3.StringUtils; +import org.apache.http.*; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.DefaultHttpRequestRetryHandler; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.protocol.HTTP; +import org.apache.http.util.EntityUtils; + +import javax.naming.CommunicationException; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +/** + * 使用httpClient形式发送报文 + * + */ +public class HttpsTransport { + + private String url = null; + private int timeout = 5*60*1000; + private int retryConnTimes = 5; + private String sendEncoding = null; + + public HttpsTransport() { + } + + public Object submit(Object obj) throws CommunicationException { + CloseableHttpClient httpClient = HttpClients.custom() + .setRetryHandler(new DefaultHttpRequestRetryHandler(retryConnTimes, false)) + .build(); + HttpPost method = new HttpPost(url); + + RequestConfig requestConfig = RequestConfig.custom() + .setSocketTimeout(timeout) + .setConnectTimeout(timeout) + .setConnectionRequestTimeout(timeout) + .build(); + + if (StringUtils.isNotEmpty(this.sendEncoding)) { + method.setHeader(HTTP.CONTENT_ENCODING, sendEncoding); + } + method.setHeader(HTTP.USER_AGENT, "Rich Powered/1.0"); + + method.setConfig(requestConfig); + + if (obj instanceof Map) { + Map paraMap = (Map) obj; + List nvps = new ArrayList(); + for (Iterator iter = paraMap.keySet().iterator(); iter.hasNext();) { + String key = (String) iter.next(); + nvps.add(new BasicNameValuePair(key, (String) paraMap.get(key))); + } + + try { + method.setEntity(new UrlEncodedFormEntity(nvps, this.sendEncoding)); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } else if (obj instanceof byte[]) { + method.setEntity(new ByteArrayEntity((byte[]) obj)); + } else if(obj instanceof String){ + try{ + StringEntity entity = new StringEntity( obj.toString(), this.sendEncoding); + if( this.sendEncoding != null){ + entity.setContentEncoding( this.sendEncoding); + } + entity.setContentType( "text/xml"); + method.setEntity(entity); + }catch(Exception e){ + } + }else { + throw new IllegalArgumentException("submit(Object obj): obj should be Map ,String,or byte[]"); + } + + int statusCode = 0; + String result = ""; + CloseableHttpResponse response = null; + try { + + response = httpClient.execute(method); + statusCode = response.getStatusLine().getStatusCode(); + HttpEntity responseEntity = response.getEntity(); + result = EntityUtils.toString(responseEntity, sendEncoding); + + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (response != null) + response.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (statusCode != HttpStatus.SC_OK) { + throw new CommunicationException(String.valueOf(statusCode)); + } + return result; + } + + public Object query(Object obj) throws CommunicationException { + CloseableHttpClient httpClient = HttpClients.custom() + .setRetryHandler(new DefaultHttpRequestRetryHandler(retryConnTimes, false)) + .build(); + HttpGet method = null; + if (obj instanceof Map) { + Map paraMap = (Map) obj; + List nvps = new ArrayList(); + for (Iterator iter = paraMap.keySet().iterator(); iter.hasNext();) { + String key = (String) iter.next(); + nvps.add(new BasicNameValuePair(key, (String) paraMap.get(key))); + } + + try { + //method.setEntity(new UrlEncodedFormEntity(nvps, this.sendEncoding)); + String str = EntityUtils.toString(new UrlEncodedFormEntity(nvps, Consts.UTF_8)); + method = new HttpGet(url + "?" + str); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } else if (obj instanceof byte[]) { + + } else if(obj instanceof String){ + method = new HttpGet(url + "?" + obj.toString()); + }else { + throw new IllegalArgumentException("submit(Object obj): obj should be Map ,String,or byte[]"); + } + RequestConfig requestConfig = RequestConfig.custom() + .setSocketTimeout(timeout) + .setConnectTimeout(timeout) + .setConnectionRequestTimeout(timeout) + .build(); + + if (StringUtils.isNotEmpty(this.sendEncoding)) { + method.setHeader(HTTP.CONTENT_ENCODING, sendEncoding); + } + method.setHeader(HTTP.USER_AGENT, "Rich Powered/1.0"); + + method.setConfig(requestConfig); + + + + int statusCode = 0; + String result = ""; + CloseableHttpResponse response = null; + try { + + response = httpClient.execute(method); + statusCode = response.getStatusLine().getStatusCode(); + HttpEntity responseEntity = response.getEntity(); + result = EntityUtils.toString(responseEntity, sendEncoding); + + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (response != null) + response.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (statusCode != HttpStatus.SC_OK) { + throw new CommunicationException(String.valueOf(statusCode)); + } + return result; + } + + public void setTimeout(int timeout) { + this.timeout = timeout; + } + + public void setUrl(String url) { + this.url = url; + } + + public void setRetryConnTimes(int retryConnTimes) { + this.retryConnTimes = retryConnTimes; + } + + public void setSendEncoding(String sendEncoding) { + this.sendEncoding = sendEncoding; + } + + +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/JsonUtils.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/JsonUtils.java new file mode 100644 index 0000000..bc18f9a --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/JsonUtils.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2017. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * www.hnapay.com + */ + +package com.shop.cereshop.app.pay.hnapay.utils; + +import com.alibaba.fastjson.JSONArray; +import com.fasterxml.jackson.core.JsonGenerationException; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.commons.lang3.StringUtils; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * JSON操作工具类 + * + */ +public class JsonUtils { + /** + * 将JSON串转为Map + * + * @param json + * @return + * @throws JsonParseException + * @throws JsonMappingException + * @throws IOException + */ + @SuppressWarnings("unchecked") + public static Map jsonToMap(String json) { + if (StringUtils.isBlank(json)) { + return null; + } + + Map model = new HashMap(); + ObjectMapper mapper = new ObjectMapper(); + + try { + model = mapper.readValue(json, Map.class); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + + return model; + } + + /** + * 将对象解析为json串 + * + * @param obj + * @return + * @throws JsonGenerationException + * @throws JsonMappingException + * @throws IOException + */ + public static String toJson(Object obj) throws JsonGenerationException, JsonMappingException, IOException { + ObjectMapper mapper = new ObjectMapper(); + + String json = mapper.writeValueAsString(obj); + + return json; + } + + /** + * JSON数组转LIST + * @param json + * @param clazz + * @param + * @return + */ + public static List jsonArrayToList(String json,Class clazz){ + return JSONArray.parseArray(json,clazz); + + } + +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/KeyUtils.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/KeyUtils.java new file mode 100644 index 0000000..84d9fb6 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/KeyUtils.java @@ -0,0 +1,32 @@ +package com.shop.cereshop.app.pay.hnapay.utils; + +import com.shop.cereshop.commons.config.HnaPayConfig; +import com.shop.cereshop.commons.exception.CoBusinessException; + +import java.security.KeyFactory; +import java.security.PrivateKey; +import java.security.spec.PKCS8EncodedKeySpec; + +public class KeyUtils { + + /** + * 加载私钥 + * + */ + public static PrivateKey loadPrivateKey(String privateKey) throws CoBusinessException { + // 去除头尾标志 + // 去除换行符 + privateKey = privateKey.replace("\r", "").replace("\n", "").replace(" ", ""); + byte[] bPriKey = Base64Util.decode(privateKey); + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bPriKey); + KeyFactory keyFactory; + try { + keyFactory = KeyFactory.getInstance(HnaPayConfig.ALGORITHM); + PrivateKey key = keyFactory.generatePrivate(keySpec); + return key; + } catch (Exception e) { + e.printStackTrace(); + throw new CoBusinessException("加载私钥异常", e); + } + } +} diff --git a/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/RSAAlgorithms.java b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/RSAAlgorithms.java new file mode 100644 index 0000000..fdcb405 --- /dev/null +++ b/cereshop-app/src/main/java/com/shop/cereshop/app/pay/hnapay/utils/RSAAlgorithms.java @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2016. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * www.hnapay.com + */ + +package com.shop.cereshop.app.pay.hnapay.utils; + +import com.shop.cereshop.commons.config.HnaPayConfig; +import com.shop.cereshop.commons.exception.CoBusinessException; + +import java.io.UnsupportedEncodingException; +import java.security.*; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.X509EncodedKeySpec; + +/** + * 签名验签 + */ +public class RSAAlgorithms { + + /** + * @param publicKey + * 公钥HEX字符串 + * @return 返回公钥 + * @throws Exception + */ + public static PublicKey getPublicKey(String publicKey) throws CoBusinessException { + PublicKey pubKey = null; + try { + byte[] encodedKey = HexStringByte.hexToByte(publicKey.getBytes()); + KeyFactory keyFactory = KeyFactory.getInstance(HnaPayConfig.ALGORITHM); + pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey)); + } catch (InvalidKeySpecException e) { + throw new CoBusinessException("公钥无效!", e); + } catch (NoSuchAlgorithmException e) { + throw new CoBusinessException("算法类型无效!", e); + } + return pubKey; + } + + /** + * @param priKey + * 私钥 + * @param data + * 要签名的数据 + * @return 签名消息 + * @throws Exception + */ + public static byte[] sign(PrivateKey priKey, String data) throws CoBusinessException { + try { + Signature signet = Signature.getInstance(HnaPayConfig.SIGN_ALGORITHM); + signet.initSign(priKey); + signet.update(data.getBytes("UTF-8")); + return signet.sign(); + } catch (Exception e) { + throw new CoBusinessException(e.getMessage()); + } + } + + /** + * 验证签名 + * + * @param publicKey + * 公钥HEX字符串 + * @param merData + * 签名数据 + * @param signMsg + * 签名消息 + * @return 返回验证结果 true 成功 false 失败 + * @throws Exception + */ + public static Boolean verify(String publicKey, String merData, String signMsg) throws CoBusinessException { + + boolean bVerify = false; + Signature signet = null; + try { + signet = Signature.getInstance(HnaPayConfig.SIGN_ALGORITHM); + } catch (NoSuchAlgorithmException e) { + throw new CoBusinessException("算法类型不能为空!", e); + } + + PublicKey pubKey = getPublicKey(publicKey); + + try { + signet.initVerify(pubKey); + } catch (InvalidKeyException e) { + throw new CoBusinessException("公钥无效!", e); + } + try { + signet.update(merData.getBytes("UTF-8")); + } catch (SignatureException e) { + throw new CoBusinessException("验签时符号异常!", e); + } catch (UnsupportedEncodingException e) { + throw new CoBusinessException("不支持的编码方式", e); + } + + try { + bVerify = signet.verify(HexStringByte.hex2byte(signMsg)); + } catch (SignatureException e) { + throw new CoBusinessException("验签异常!", e); + } + return bVerify; + } + +} diff --git a/cereshop-app/src/main/resources/mybatis/mapper/business/CerePlatformBusinessDAO.xml b/cereshop-app/src/main/resources/mybatis/mapper/business/CerePlatformBusinessDAO.xml index 1769437..996a4df 100644 --- a/cereshop-app/src/main/resources/mybatis/mapper/business/CerePlatformBusinessDAO.xml +++ b/cereshop-app/src/main/resources/mybatis/mapper/business/CerePlatformBusinessDAO.xml @@ -325,4 +325,8 @@ + + diff --git a/cereshop-commons/src/main/java/com/shop/cereshop/commons/config/HnaPayConfig.java b/cereshop-commons/src/main/java/com/shop/cereshop/commons/config/HnaPayConfig.java new file mode 100644 index 0000000..7dfc84c --- /dev/null +++ b/cereshop-commons/src/main/java/com/shop/cereshop/commons/config/HnaPayConfig.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2017-2021 + * All rights reserved, Designed By 深圳中科鑫智科技有限公司 + * Copyright authorization contact 18814114118 + */ +package com.shop.cereshop.commons.config; + +import org.springframework.stereotype.Component; + +@Component +public class HnaPayConfig { + + //新生签名使用的算法 + public static String ALGORITHM = "RSA"; + + //类型 + public static String SIGN_ALGORITHM = "SHA1withRSA"; + //前置系统公钥(平台公钥) + public static String NCOUNT_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9vGvYjivDF5uPBNDXMtoAtjYQ2YPSsfareduDG6kHL/N3A05rFHA11Dbr+UON82Y4V0RFKAQeZFPWcTLjcy6ntZVI8XoYLpuVQBPsb0Ya+PwbzR8/TmUdUf91ru8APtJgqkULgPVrO1hhzZ1tQMznosNLTOqbknMnnMcwzB5yYwIDAQAB"; + + + public static String MER_PRIVATE_KEY = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIk/o9rSLWxkM3c6+sK5ucqLVGZuffSeIH4NCuwSTruQFm1t9snLasmVgNcGF5buxK/6GFzfRJyRwJX7yfTTNLJVVzXb60Xz0HtMJu2mXh3Aj8DuYRXLS28p56xbw/UEfFjf5mfFur8yDKhFQ7tAoFbh2pLlMzKQ5A9FqsP+KehDAgMBAAECgYBrY6dC3Xd7Oz/lx/lTidzstW45o7TcRSnpVy03n++I5OoXf5Y9OPP6fQdNt8+XYoX1p7uOV4go9gZ5lITmEqhEvt3uAk84YxCDqP9b8KNvp+zyGyHcnDWNoaxZtIN2zOToqLbNsFc/xbyDGQ1HksTlS3FWPeL+kMybI/JaRPA4UQJBAPC/7H2cqg23N3Knit1dSYpK8tQS9t9+hijdZNF4vP79Z9aquxPGI6adGj9r3Y0Z35legiA7bMZmo5pVvsqO19sCQQCR8U7tuYFsWh8QVTij5MQKRg2RxqauZ4MuFzpC6cH08+2jYMFfXP2wNSVOe/g9dcgIJ93zonoakgyO6drGjTG5AkBNP/g9chiq4ABdvN71GurvAg+a9x7aJfocgLXJ9SkH1P4NxqjStoBYBQ8YDJ+BmCzERKwSdZ74ppSWgC8BRgaDAkAL/nLoIpi6WOW4p+hRv9lEpuEym8rTBnrHbO1C1oc0JF/hT3BU8AWBV7zLKHEMTAO2d+BLx4yVZm9Vx25NZwkxAkBgjj8DE9Jue2DQSymBZb9ro/gD88au/aFNcgPerNuN/A1hUtyXL8Xo6K9ksK2eC7QYSa6skAcmNxKWPKwh3mw+"; + + //测试环境商户私钥 +/* public static String MER_PRIVATE_KEY = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAM2Ak5XX86FypU3t\n" + + "DSXlDQp+eXgowPLjBoEt0ZfEfhUtLIrU8J4YzUiz9tUzI6o6mGafDltUasdyRtt3\n" + + "+NdSQuFq7MhZyWwGUqle3ybGswYVkN8+LMADCQEOYphM4p0j/OGw7QYcL/ERHsUW\n" + + "2MGPR6M/9xe0KURIDdeJC0ulxQ8TAgMBAAECgYEAqgTfldBl68PbSb5+60Q25uC+\n" + + "hJBLGmiDwCp1Rng1zDVkrbQBIvvoE2d5Jui5cCQsZHLhwOP1t+8u+nKmuRaA51vB\n" + + "sQ+F01SqYrmS/TV/iD5xjAteSXmTf76doP7FwrHuRQ391KcdIn+W0R7cv1tLBY5B\n" + + "oRnAcAwWhQMiRWf+yPECQQD6TtJ7kETd5Rl3YryFMTvfW73oHxss87jz6/tUIPxF\n" + + "rXYu+ywD4Ut1AWwtN6Td6kZhWOUhG2d4OUVYP0FtjjprAkEA0izql6EQB7SF8AE5\n" + + "j8U7Weg8IqPk8b78neav8y1CpjSuwOaRxcS1Mk+W2/AXRvTRL2VUw+Az4boAz3MS\n" + + "WnP3+QJBAJW6vtfhRgDCQciTjJfUCq+irmgC63upUzK+L7p0fNOlXrPd1ceAZmXY\n" + + "cwBdb8a7lFw5E98JCIz3HU8bj6TcVn8CQQC3EfLBYsSwwXjNBnQaHAVHmfcPgU0B\n" + + "mYc3DuKB4hGk7kytr+iXqHDgQt039FiCMOso6o28FEV8v+TGzgfVjCAZAkA9NWuj\n" + + "VEHwFLZLtftLDQxGfJmWJGl4CipOjv6YpQEw0A2NBtUp5tuiJ09DNq5RaKJbfWUY\n" + + "fQJkAZ0tsrXBWqgK";*/ + + +// public static String MER_ID = "110000002003"; + + + + /** + * 商户会员号 merCode 商户ID + */ + public static String MER_ID = "10000000381"; + + //报备编号 + public static String MERCHANT_ID = "2410251102593947577"; + + public static String IP = "36.138.125.206"; + + + // 支付结果通知地址 + public static String APP_NOTICE_URL = "http://36.138.125.206/ceres-app-api/extend/hnaPay/pay/notify"; + + // 退款回调地址 + public static String REFUND_NOTICE_URL = "http://36.138.125.206/ceres-app-api/extend/hnaPay/refund/notify"; + +} diff --git a/cereshop-commons/src/main/java/com/shop/cereshop/commons/domain/business/CerePlatformBusiness.java b/cereshop-commons/src/main/java/com/shop/cereshop/commons/domain/business/CerePlatformBusiness.java index 6cd2faa..f048621 100644 --- a/cereshop-commons/src/main/java/com/shop/cereshop/commons/domain/business/CerePlatformBusiness.java +++ b/cereshop-commons/src/main/java/com/shop/cereshop/commons/domain/business/CerePlatformBusiness.java @@ -174,7 +174,7 @@ public class CerePlatformBusiness implements Serializable { /** - * 新生支付方开通的商家Id + * 新生支付方开通的商家Id(或新账通开通的商家id) */ @ApiModelProperty(value = "新生支付方开通的商家Id") private String xsPayId;