src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java
@@ -31,4 +31,10 @@ @ApiModelProperty(value = "支付凭证") private String payImage; @ApiModelProperty(value = "签约短信验证码") private String smsCode; @ApiModelProperty(value = "银行卡号") private String bankNo; } src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -17,6 +17,7 @@ import cc.mrbird.febs.mall.vo.OrderDetailVo; import cc.mrbird.febs.mall.vo.OrderListVo; import cc.mrbird.febs.mall.vo.OrderRefundVo; import cc.mrbird.febs.pay.model.AgreementPayDto; import cc.mrbird.febs.pay.model.AgreementSignDto; import cc.mrbird.febs.pay.model.UnipayDto; import cc.mrbird.febs.pay.service.IPayService; @@ -39,6 +40,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.text.DecimalFormat; import java.util.*; /** @@ -257,7 +259,7 @@ if("fail" == unipayStr){ throw new FebsException("支付失败"); }else{ JSONUtil.parseObj(unipayStr); // JSONUtil.parseObj(unipayStr); JSONObject jsonObject = JSONUtil.parseObj(unipayStr); payResultStr = (String) jsonObject.get("r7_TrxNo"); rcResult = (String) jsonObject.get("rc_Result"); @@ -333,31 +335,45 @@ case "5": AgreementSignDto agreementSignDto = new AgreementSignDto(); agreementSignDto.setOrderNo(orderInfo.getOrderNo()); unipayService.agreementSign(agreementSignDto); // UnipayDto unipayDto = new UnipayDto(); //// unipayDto.setAmount(new BigDecimal("0.01")); // unipayDto.setAmount(orderInfo.getAmount()); // unipayDto.setFrpCode("ALIPAY_H5"); // unipayDto.setTradeMerchantNo("777180800385820"); // unipayDto.setOrderNo(orderInfo.getOrderNo()); // List<MallOrderItem> items = orderInfo.getItems(); // if(CollUtil.isEmpty(items)){ // unipayDto.setProductName("商品"); // }else{ // unipayDto.setProductName(items.get(0).getGoodsName()); // } // String agreementSignStr = ""; // if("fail" == unipayStr){ // throw new FebsException("支付失败"); // }else{ // JSONUtil.parseObj(unipayStr); // JSONObject jsonObject = JSONUtil.parseObj(unipayStr); // payResultStr = (String) jsonObject.get("r7_TrxNo"); // rcResult = (String) jsonObject.get("rc_Result"); // } orderInfo.setPayOrderNo(payResultStr); orderInfo.setPayMethod("支付宝支付"); // agentProducer.sendOrderReturn(orderInfo.getId()); agreementSignDto.setSmsCode(payOrderDto.getSmsCode()); String agreementSignStr = unipayService.agreementSign(agreementSignDto); if("fail" == agreementSignStr){ throw new FebsException("支付失败"); }else{ JSONObject jsonObject = JSONUtil.parseObj(agreementSignStr); payResultStr = (String) jsonObject.get("biz_code"); if("JS000000" != payResultStr){ throw new FebsException("支付失败"); } } AgreementPayDto agreementPayDto = new AgreementPayDto(); agreementPayDto.setOrderNo(orderInfo.getOrderNo()); BigDecimal value = orderInfo.getAmount().setScale(2, BigDecimal.ROUND_DOWN); DecimalFormat decimalFormat = new DecimalFormat("0.00#"); String strVal = decimalFormat.format(value); agreementPayDto.setOrderAmount(new BigDecimal(strVal)); agreementPayDto.setOrderTime(DateUtil.now()); List<MallOrderItem> itemsGoods = orderInfo.getItems(); if(CollUtil.isEmpty(itemsGoods)){ agreementPayDto.setOrderDesc("商品"); }else{ agreementPayDto.setOrderDesc(itemsGoods.get(0).getGoodsName()); } agreementPayDto.setBankNo(payOrderDto.getBankNo()); String agreementPayStr = unipayService.agreementPay(agreementPayDto); if("fail".equals(agreementSignStr)){ throw new FebsException("支付失败"); }else{ JSONObject jsonObject = JSONUtil.parseObj(agreementPayStr); payResultStr = (String) jsonObject.get("biz_code"); if(!"JS000000".equals(payResultStr)){ throw new FebsException("支付失败"); } } orderInfo.setPayMethod("快捷协议支付"); break; default: src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java
@@ -153,8 +153,12 @@ @ApiOperation(value = "获取协议支付签约短信", notes = "获取协议支付签约短信") @PostMapping(value = "getAgreeMentPaySms") public FebsResponse getAgreeMentPaySms(@RequestBody AgreeMentPaySmsDto agreeMentPaySmsDto) { unipayService.getAgreeMentPaySms(agreeMentPaySmsDto); return new FebsResponse().success().message("申请成功"); String agreeMentPaySms = unipayService.getAgreeMentPaySms(agreeMentPaySmsDto); if("fail".equals(agreeMentPaySms)){ return new FebsResponse().fail().message("获取失败"); }else{ return new FebsResponse().success().message("获取成功"); } } // public static void main(String[] args) { @@ -186,6 +190,7 @@ orderInfo.setPayResult("1"); orderInfo.setPayTime(DateUtil.parse(pay_success_time)); orderInfo.setPayTradeNo(jp_order_no); orderInfo.setPayOrderNo(orderNo); orderInfoMapper.updateById(orderInfo); boolean hasTc = false; src/main/java/cc/mrbird/febs/pay/model/AgreeMentPaySmsDto.java
@@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @@ -12,20 +13,22 @@ public class AgreeMentPaySmsDto { // 商户订单号 @ApiModelProperty(value = "订单号") private String orderNo; // 订单金额;金额保留两位小数 private BigDecimal orderAmount; //创建时间 // @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private String createdTime; // 姓名 @ApiModelProperty(value = "姓名") private String name; //证件类型 @ApiModelProperty(value = "证件类型") private String idType; //证件号码 @ApiModelProperty(value = "证件号码") private String idCardNum; // 银行卡号 @ApiModelProperty(value = "银行卡号") private String bankNo; // 手机号 @ApiModelProperty(value = "手机号") private String phone; } src/main/java/cc/mrbird/febs/pay/service/UnipayService.java
@@ -6,10 +6,20 @@ import cc.mrbird.febs.pay.model.UnipayDto; public interface UnipayService { /** * 聚合支付-微信支付宝 * @param unipayDto * @return */ String unipay(UnipayDto unipayDto); /** * 协议快捷支付步骤 * 1快捷协议支付-签约短信接口 * 2快捷协议支付-签约接口 * 3快捷协议支付-无短支付接口 */ /** * 快捷协议支付-签约短信接口 * @param agreeMentPaySmsDto * @return src/main/java/cc/mrbird/febs/pay/service/impl/UnipayServiceImpl.java
@@ -1,14 +1,18 @@ package cc.mrbird.febs.pay.service.impl; import cc.mrbird.febs.mall.entity.MallOrderInfo; import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper; import cc.mrbird.febs.pay.model.*; import cc.mrbird.febs.pay.service.UnipayService; import cc.mrbird.febs.pay.util.*; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -44,6 +48,9 @@ public static final String agreementPayNotifyUrl = "http://47.111.90.145:8800/api/unipay/agreementPayCallBack"; public static final String p1MerchantNo = "888118000001971";/** 商户编号 */ public static final String aesKey = "1234567891234567";/** 商户编号 */ @Autowired private MallOrderInfoMapper orderInfoMapper; @Override @Transactional @@ -180,7 +187,7 @@ map.put("mch_order_no",agreementPayDto.getOrderNo()); // 商户订单号 map.put("order_amount", agreementPayDto.getOrderAmount()); // 订单金额;金额保留两位小数 map.put("mch_req_time", agreementPayDto.getOrderTime()); // 订单时间 map.put("order_desc", agreementPayDto.getOrderDesc()); // 订单时间 map.put("order_desc", agreementPayDto.getOrderDesc()); // 商品名称 map.put("callback_url", agreementPayNotifyUrl); // 异步通知地址 map.put("bank_card_no", AESUtil.Aes256Encode(agreementPayDto.getBankNo(),aesKey)); // 签约银行卡号 @@ -250,9 +257,15 @@ e.printStackTrace(); } map.put("mch_order_no", "NO_"+agreeMentPaySmsDto.getOrderNo()); // 商户订单号 map.put("order_amount", agreeMentPaySmsDto.getOrderAmount()); // 订单金额 map.put("mch_req_time", agreeMentPaySmsDto.getCreatedTime()); // 下单时间 MallOrderInfo orderInfo = orderInfoMapper.selectByOrderNo(agreeMentPaySmsDto.getOrderNo()); map.put("mch_order_no", "NO_"+orderInfo.getOrderNo()); // 商户订单号 BigDecimal value = orderInfo.getAmount().setScale(2, BigDecimal.ROUND_DOWN); DecimalFormat decimalFormat = new DecimalFormat("0.00#"); String strVal = decimalFormat.format(value); map.put("order_amount", strVal); // 订单金额 map.put("mch_req_time", DateUtil.now()); // 下单时间 map.put("payer_name",AESUtil.Aes256Encode(agreeMentPaySmsDto.getName(),aesKey)); // 姓名 map.put("id_type", agreeMentPaySmsDto.getIdType()); // 证件类型 map.put("id_no", AESUtil.Aes256Encode(agreeMentPaySmsDto.getIdCardNum(),aesKey)); // 证件号码 @@ -323,7 +336,7 @@ e.printStackTrace(); } map.put("mch_order_no", agreementSignDto.getOrderNo()); // 商户订单号 map.put("mch_order_no", "NO_"+agreementSignDto.getOrderNo()); // 商户订单号 map.put("sms_code", agreementSignDto.getSmsCode()); // 签约短信验证码 requestParam.setData(JsonUtil.toString(map));