Pārlūkot izejas kodu

增加易乾接口

周箭河 6 gadi atpakaļ
vecāks
revīzija
e0d68549e2

+ 4 - 4
pom.xml

@@ -164,13 +164,13 @@
 			<systemPath>${project.basedir}/libs/SADK-3.2.5.2.jar</systemPath>
 		</dependency>
 		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-freemarker</artifactId>
-		</dependency>
-		<dependency>
 			<groupId>org.springframework.cloud</groupId>
 			<artifactId>spring-cloud-starter-openfeign</artifactId>
 		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-freemarker</artifactId>
+		</dependency>
 	</dependencies>
 
 	<build>

+ 88 - 29
src/main/java/com/ym/mec/collectfee/controller/YqPayController.java

@@ -1,24 +1,28 @@
 package com.ym.mec.collectfee.controller;
 
 import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import com.ym.mec.collectfee.entity.Order;
 import com.ym.mec.collectfee.service.OrderService;
 import com.ym.mec.collectfee.service.YqPayService;
 import com.ym.mec.collectfee.service.YqQueryService;
 import com.ym.mec.collectfee.service.impl.OrderServiceImpl;
 import com.ym.mec.collectfee.utils.GenerateNum;
-import com.ym.mec.collectfee.utils.yqpay.Msg;
-import com.ym.mec.collectfee.utils.yqpay.YqPayUtil;
+import com.ym.mec.collectfee.utils.yqpay.*;
+import org.hibernate.validator.constraints.SafeHtml;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.zip.Inflater;
 
 @RestController
 @RequestMapping("yqPay")
@@ -40,45 +44,32 @@ public class YqPayController {
      */
     @RequestMapping("/toPay")
     @Transactional
-    public Msg toPay(@ModelAttribute Order order) throws Exception {
+    public Msg toPay(@ModelAttribute @Validated Order order) throws Exception {
         String orderNo = GenerateNum.getInstance().GenerateOrderNo();
-        orderService.insert(order);
+        order.setOrderNo(orderNo);
+        order.setCreateTime(new Date());
+        order.setStatus(1);
+        Long id = orderService.insert(order);
 
         /*卖家双乾商户号*/
         String sellerNo = "0022652"; //某笔定义到某个商户
-        /*支付渠道*/
-        String payChannels = "weChatPay";
-        /*卖家双乾商户号*/
         /*订单信息*/
         String orderBody = "大雅乐盟培训课程";
-        /*金额*/
-        String payAmount = "50";
-        /*API支付类型1-即时支付,2-担保支付,3-预授权支付*/
-        String apiPayType = "1";
-        /*API商户订单号*/
-        String merMerOrderNo = "0855555322";
-        /*买家商户号*/
-        String buyerNo = "";
-        /*不参与优惠计算的金额*/
-        String undiscountableAmount = "";
         /*订单标题*/
         String orderSubject = "培训订单";
         /*商品列表信息*/
         String goodsDetail = "";
-        /*交易类型1—充值,0—收款*/
-        String tradeType = "0";
-
 
         String notifyUrl = "http://47.99.212.176:9000/yqpay/notify";
         String returnUrl = "http://47.99.212.176:9000/yqpay/notify";//前台页面通知地址(银联H5必填)
 
         Map<String, Object> resultMap = new LinkedHashMap<String, Object>();
         resultMap.put("sellerNo", sellerNo); //收款商户号
-        resultMap.put("payChannels", "unionPay"); //支付方式(支付渠道)
+        resultMap.put("payChannels", order.getBank()); //支付方式(支付渠道)
         resultMap.put("orderBody", orderBody); //订单信息
-        resultMap.put("payAmount", payAmount); //支付金额
+        resultMap.put("payAmount", order.getAmount()); //支付金额
         resultMap.put("apiPayType", "1"); //*API支付类型1-即时支付,2-担保支付,3-预授权支付*/
-        resultMap.put("tradeType", tradeType); //*交易类型1—充值,0—收款*
+        resultMap.put("tradeType", "0"); //*交易类型1—充值,0—收款*
         resultMap.put("merMerOrderNo", orderNo); //商户订单号
         resultMap.put("orderSubject", orderSubject); //订单标题
         resultMap.put("returnUrl", returnUrl); //前台页面通知地址(银联H5必填)
@@ -89,10 +80,13 @@ public class YqPayController {
         resultMap.put("goodsDetail", goodsDetail);
         Map<String, Object> requestMap = new YqPayUtil(notifyUrl, resultMap).getRequestMap();
         Msg msg = yqPayService.toPay(requestMap);
-        if(!msg.getResponseParameters().isEmpty()){
-            Object parse = JSON.parse(msg.getResponseParameters());
+        if (!msg.getResponseParameters().isEmpty()) {
+            RspMsg rspMsg = JSON.parseObject(msg.getResponseParameters(), RspMsg.class);
+            String merOrderNo = rspMsg.getMerOrderNo();
+            order.setId(id.intValue());
+            order.setPayId(merOrderNo); //乾易付订单号
+            orderService.update(order);
         }
-        System.out.println(parse);
         return msg;
     }
 
@@ -164,6 +158,48 @@ public class YqPayController {
         return yqPayService.platformTransferAcc(requestMap);
     }
 
+    /**
+     * 提现发送短信
+     *
+     * @return
+     * @throws Exception
+     */
+    public Msg sendSms(@ModelAttribute Intfc intfc) throws Exception {
+        String notifyUrl = ""; //回调地址
+        String merMerOrderNo = GenerateNum.getInstance().GenerateOrderNo();
+        Map<String, Object> resultMap = new LinkedHashMap<>();
+        resultMap.put("wdMerNo", intfc.getWdMerNo()); //提现商户号
+        resultMap.put("merMerOrderNo", merMerOrderNo); //商户订单号
+        resultMap.put("amount", intfc.getAmount()); //提现金额
+        resultMap.put("cardNo", intfc.getCardNo()); //提现银行卡号
+        resultMap.put("phone", intfc.getPhone()); //预留手机号(选填)
+        resultMap.put("cardType", intfc.getCardType()); //卡类型 0-个人银行卡,1-企业银行卡。(选填)
+        Map<String, Object> requestMap = new YqPayUtil(notifyUrl, resultMap).getRequestMap();
+        return yqPayService.intfc(requestMap);
+    }
+
+    /**
+     * 提现
+     *
+     * @return
+     * @throws Exception
+     */
+    public Msg intfc(@ModelAttribute Intfc intfc) throws Exception {
+        String notifyUrl = "http://47.99.212.176:9000/yqpay/notify"; //回调地址
+        String merMerOrderNo = GenerateNum.getInstance().GenerateOrderNo();
+        Map<String, Object> resultMap = new LinkedHashMap<>();
+        resultMap.put("wdMerNo", intfc.getWdMerNo()); //提现商户号
+        resultMap.put("merMerOrderNo", merMerOrderNo); //商户订单号
+        resultMap.put("amount", intfc.getAmount()); //提现金额
+        resultMap.put("cardNo", intfc.getCardNo()); //提现银行卡号
+        resultMap.put("phone", intfc.getPhone()); //预留手机号(选填)
+        resultMap.put("cardType", intfc.getCardType()); //卡类型 0-个人银行卡,1-企业银行卡。(选填)
+        resultMap.put("seqNo", ""); //流水号(选填)
+        resultMap.put("smsCode", ""); //验证码(选填)
+        Map<String, Object> requestMap = new YqPayUtil(notifyUrl, resultMap).getRequestMap();
+        return yqPayService.intfc(requestMap);
+    }
+
 
     /**
      * 易乾异步通知接口
@@ -173,7 +209,7 @@ public class YqPayController {
      * @throws Exception
      */
     @RequestMapping("/notify")
-    public Object notify(Msg msg) throws Exception {
+    public Msg notify(@ModelAttribute Msg msg) throws Exception {
         Map<String, Object> rqMap = new LinkedHashMap<String, Object>();
         rqMap.put("code", msg.getCode());
         rqMap.put("msg", msg.getMsg());
@@ -181,10 +217,33 @@ public class YqPayController {
         rqMap.put("responseParameters", msg.getResponseParameters());
         rqMap.put("sign", msg.getSign());
         boolean rs = YqPayUtil.verify(rqMap);
+        msg.setCode("");
+        msg.setMsg("fail");
+        Order order = null;
+        NotifyMsg notifyMsg = null;
         if (rs) {
-
+            notifyMsg = JSON.parseObject(msg.getResponseParameters(), NotifyMsg.class);
+            String merMerOrderNo = notifyMsg.getMerMerOrderNo(); //自己系统订单号
+            order = orderService.getOrderByOrderNo(merMerOrderNo);
+        }
+        //支付中订单存在,更新状态
+        if (order != null && msg.getResponseType().equals("1")) {
+            //更新订单状态
+            int status = msg.getCode().equals("88") ? 0 : 2;
+            order.setStatus(status);
+            if (order.getOrderNo().isEmpty()) {
+                order.setPayId(notifyMsg.getOrderNo()); //更新易乾付订单号
+            }
+            if (status == 0) {
+                order.setPay(notifyMsg.getPayAmount());
+                order.setPayTime(new Date());
+            }
+            orderService.update(order);
+
+            msg.setCode("000000");
+            msg.setMsg("success");
         }
-        return "";
+        return msg;
     }
 
 

+ 1 - 1
src/main/java/com/ym/mec/collectfee/controller/YqRegController.java

@@ -33,7 +33,7 @@ public class YqRegController {
 
         Map<String, Object> requestMap = new YqPayUtil(notifyUrl, resultMap).getRequestMap();
         map.addAttribute("info", requestMap);
-        return "reg/register";
+        return "/reg/register";
     }
 
 }

+ 2 - 0
src/main/java/com/ym/mec/collectfee/dao/OrderDao.java

@@ -14,4 +14,6 @@ public interface OrderDao extends BaseDAO<Integer, Order> {
     List<Order> getOrderByBatch(String batchNum);
 
     int countOrder(@Param("poName") String poName,@Param("voicePort") String voicePort);
+
+    Order getOrderByOrderNo(@Param("orderNo") String orderNo);
 }

+ 12 - 0
src/main/java/com/ym/mec/collectfee/entity/Order.java

@@ -17,6 +17,9 @@ public class Order {
 	
 	/** 订单号。订单流水号 */
 	private Integer oid;
+
+	/**自己系统订单号 */
+	private String orderNo;
 	
 	/** 学员的用户编号 */
 	private Integer userId;
@@ -217,6 +220,15 @@ public class Order {
 	public String getBatchNum(){
 		return this.batchNum;
 	}
+
+
+	public String getOrderNo() {
+		return orderNo;
+	}
+
+	public void setOrderNo(String orderNo) {
+		this.orderNo = orderNo;
+	}
 			
 	@Override
 	public String toString() {

+ 7 - 0
src/main/java/com/ym/mec/collectfee/service/OrderService.java

@@ -29,4 +29,11 @@ public interface OrderService extends BaseService<Integer, Order> {
      * @return
      */
     int countOrder(String poName,String voicePort);
+
+    /**
+     * 根据系统订单号获取订单
+     * @param orderNo 系统订单号
+     * @return
+     */
+    Order getOrderByOrderNo(String orderNo);
 }

+ 6 - 0
src/main/java/com/ym/mec/collectfee/service/YqPayService.java

@@ -15,4 +15,10 @@ public interface YqPayService {
 
     @RequestMapping(name = "平台转账",value = "/api/api/platformTransfer/toAcc", method=RequestMethod.POST)
     String platformTransferAcc(@RequestParam Map<String, Object> map);
+
+    @RequestMapping(name = "提现",value = "/api/api/withdraw/intfc", method=RequestMethod.POST)
+    Msg intfc(@RequestParam Map<String, Object> map);
+
+    @RequestMapping(name = "发送验证码",value = "/api/api/withdraw/sendSms", method=RequestMethod.POST)
+    Msg sendSms(@RequestParam Map<String, Object> map);
 }

+ 5 - 0
src/main/java/com/ym/mec/collectfee/service/impl/OrderServiceImpl.java

@@ -90,4 +90,9 @@ public class OrderServiceImpl extends BaseServiceImpl<Integer, Order> implements
 	public int countOrder(String poName, String voicePort) {
 		return orderDao.countOrder(poName,voicePort);
 	}
+
+	@Override
+	public Order getOrderByOrderNo(String orderNo) {
+		return orderDao.getOrderByOrderNo(orderNo);
+	}
 }

+ 80 - 0
src/main/java/com/ym/mec/collectfee/utils/yqpay/Intfc.java

@@ -0,0 +1,80 @@
+package com.ym.mec.collectfee.utils.yqpay;
+
+/**
+ * 提现信息
+ */
+public class Intfc {
+
+    private String wdMerNo; //提现商户号
+    private String merMerOrderNo; //商户订单号
+    private String amount; //提现金额
+    private String cardNo; //提现银行卡号
+    private String phone; //预留手机号(选填)
+    private String cardType; //卡类型 0-个人银行卡,1-企业银行卡。(选填)
+    private String seqNo; //流水号(选填)
+    private String smsCode; //验证码(选填)
+
+    public String getMerMerOrderNo() {
+        return merMerOrderNo;
+    }
+
+    public void setMerMerOrderNo(String merMerOrderNo) {
+        this.merMerOrderNo = merMerOrderNo;
+    }
+
+    public String getWdMerNo() {
+        return wdMerNo;
+    }
+
+    public void setWdMerNo(String wdMerNo) {
+        this.wdMerNo = wdMerNo;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getCardNo() {
+        return cardNo;
+    }
+
+    public void setCardNo(String cardNo) {
+        this.cardNo = cardNo;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getCardType() {
+        return cardType;
+    }
+
+    public void setCardType(String cardType) {
+        this.cardType = cardType;
+    }
+
+    public String getSeqNo() {
+        return seqNo;
+    }
+
+    public void setSeqNo(String seqNo) {
+        this.seqNo = seqNo;
+    }
+
+    public String getSmsCode() {
+        return smsCode;
+    }
+
+    public void setSmsCode(String smsCode) {
+        this.smsCode = smsCode;
+    }
+}

+ 81 - 0
src/main/java/com/ym/mec/collectfee/utils/yqpay/NotifyMsg.java

@@ -0,0 +1,81 @@
+package com.ym.mec.collectfee.utils.yqpay;
+
+import java.math.BigDecimal;
+
+/**
+ * 异步通知具体信息
+ */
+public class NotifyMsg {
+    private String merMerOrderNo;
+    private BigDecimal payAmount;
+    private String orderNo;
+    private String sellerNo;
+    private String buyerNo;
+    private String qyfcustUniqueNo;
+    private String tradeFee;
+    private String channelType;
+
+    public String getMerMerOrderNo() {
+        return merMerOrderNo;
+    }
+
+    public void setMerMerOrderNo(String merMerOrderNo) {
+        this.merMerOrderNo = merMerOrderNo;
+    }
+
+    public BigDecimal getPayAmount() {
+        return payAmount;
+    }
+
+    public void setPayAmount(BigDecimal payAmount) {
+        this.payAmount = payAmount;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public String getSellerNo() {
+        return sellerNo;
+    }
+
+    public void setSellerNo(String sellerNo) {
+        this.sellerNo = sellerNo;
+    }
+
+    public String getBuyerNo() {
+        return buyerNo;
+    }
+
+    public void setBuyerNo(String buyerNo) {
+        this.buyerNo = buyerNo;
+    }
+
+    public String getQyfcustUniqueNo() {
+        return qyfcustUniqueNo;
+    }
+
+    public void setQyfcustUniqueNo(String qyfcustUniqueNo) {
+        this.qyfcustUniqueNo = qyfcustUniqueNo;
+    }
+
+    public String getTradeFee() {
+        return tradeFee;
+    }
+
+    public void setTradeFee(String tradeFee) {
+        this.tradeFee = tradeFee;
+    }
+
+    public String getChannelType() {
+        return channelType;
+    }
+
+    public void setChannelType(String channelType) {
+        this.channelType = channelType;
+    }
+}

+ 68 - 0
src/main/java/com/ym/mec/collectfee/utils/yqpay/RspMsg.java

@@ -0,0 +1,68 @@
+package com.ym.mec.collectfee.utils.yqpay;
+
+public class RspMsg {
+
+    private String merOrderNo;
+    private String merMerOrderNo;
+    private String payUrlSAO;
+    private String qrCode;
+    private String apiStr;
+    private String tradeNo;
+    private String payHtml;
+
+    public String getMerOrderNo() {
+        return merOrderNo;
+    }
+
+    public void setMerOrderNo(String merOrderNo) {
+        this.merOrderNo = merOrderNo;
+    }
+
+    public String getMerMerOrderNo() {
+        return merMerOrderNo;
+    }
+
+    public void setMerMerOrderNo(String merMerOrderNo) {
+        this.merMerOrderNo = merMerOrderNo;
+    }
+
+    public String getPayUrlSAO() {
+        return payUrlSAO;
+    }
+
+    public void setPayUrlSAO(String payUrlSAO) {
+        this.payUrlSAO = payUrlSAO;
+    }
+
+    public String getQrCode() {
+        return qrCode;
+    }
+
+    public void setQrCode(String qrCode) {
+        this.qrCode = qrCode;
+    }
+
+    public String getApiStr() {
+        return apiStr;
+    }
+
+    public void setApiStr(String apiStr) {
+        this.apiStr = apiStr;
+    }
+
+    public String getTradeNo() {
+        return tradeNo;
+    }
+
+    public void setTradeNo(String tradeNo) {
+        this.tradeNo = tradeNo;
+    }
+
+    public String getPayHtml() {
+        return payHtml;
+    }
+
+    public void setPayHtml(String payHtml) {
+        this.payHtml = payHtml;
+    }
+}

+ 6 - 2
src/main/java/com/ym/mec/collectfee/utils/yqpay/YqPayUtil.java

@@ -38,11 +38,15 @@ public class YqPayUtil {
     }
 
     //验签
-    public static boolean verify(Map<String, Object> rsMap) throws Exception {
+    public static boolean verify(Map<String, Object> rsMap) {
         String sign = (String) rsMap.get("sign");
         rsMap.remove("sign");
         String beforeSignedData = CFCARAUtil.joinMapValue(rsMap, '&');
-        return CFCARAUtil.verifyMessageByP1(beforeSignedData, sign, "certificate/yqpay.cer");
+        try {
+            return CFCARAUtil.verifyMessageByP1(beforeSignedData, sign, "certificate/yqpay.cer");
+        } catch (Exception e) {
+            return false;
+        }
     }
 
 }

+ 2 - 2
src/main/resources/application.yml

@@ -1,5 +1,5 @@
 server:
-  port: 8001
+  port: 8005
 
 spring:
   application:
@@ -7,7 +7,7 @@ spring:
     
   datasource:
     name: test
-    url: jdbc:mysql://47.99.212.176:3306/mec_pay?useUnicode=true&characterEncoding=UTF8
+    url: jdbc:mysql://47.99.212.176:3306/mec_pay?useUnicode=true&characterEncoding=UTF8&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
     username: mec_dev
     password: mec_dev
     # 使用druid数据源

+ 7 - 2
src/main/resources/config/mybatis/OrderMapper.xml

@@ -9,6 +9,7 @@
 	<resultMap type="com.ym.mec.collectfee.entity.Order" id="Order">
 		<result column="id" property="id" />
 		<result column="oid" property="oid" />
+		<result column="order_no" property="orderNo" />
 		<result column="user_id" property="userId" />
 		<result column="amount" property="amount" />
 		<result column="pay" property="pay" />
@@ -44,12 +45,12 @@
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
 		</selectKey>
 		-->
-		INSERT INTO `order` (id,oid,user_id,amount,pay,bank,account,u_account,pay_id,pay_time,remark,class_id,status,create_time,po_name,voicy_part,balance,batch_num) VALUES(#{id},#{oid},#{userId},#{amount},#{pay},#{bank},#{account},#{uAccount},#{payId},#{payTime},#{remark},#{classId},#{status},#{createTime},#{poName},#{voicyPart},#{balance},#{batchNum})
+		INSERT INTO `order` (id,oid,order_no,user_id,amount,pay,bank,account,u_account,pay_id,pay_time,remark,class_id,status,create_time,po_name,voicy_part,balance,batch_num) VALUES(#{id},#{oid},#{orderNo},#{userId},#{amount},#{pay},#{bank},#{account},#{uAccount},#{payId},#{payTime},#{remark},#{classId},#{status},#{createTime},#{poName},#{voicyPart},#{balance},#{batchNum})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.collectfee.entity.Order">
-		UPDATE order SET amount = #{amount},create_time = #{createTime},class_id = #{classId},pay = #{pay},u_account = #{uAccount},remark = #{remark},oid = #{oid},batch_num = #{batchNum},pay_time = #{payTime},bank = #{bank},balance = #{balance},user_id = #{userId},voicy_part = #{voicyPart},po_name = #{poName},id = #{id},pay_id = #{payId},account = #{account},status = #{status} WHERE id = #{id} 
+		UPDATE order SET amount = #{amount},create_time = #{createTime},class_id = #{classId},pay = #{pay},u_account = #{uAccount},remark = #{remark},oid = #{oid},batch_num = #{batchNum},pay_time = #{payTime},bank = #{bank},balance = #{balance},user_id = #{userId},voicy_part = #{voicyPart},po_name = #{poName},id = #{id},pay_id = #{payId},account = #{account},status = #{status} WHERE id = #{id}
 	</update>
 	
 	<!-- 根据主键删除一条记录 -->
@@ -77,4 +78,8 @@
 	<select id="countOrder" resultType="java.lang.Integer">
 		SELECT COUNT(DISTINCT user_id) num FROM `order` WHERE po_name = #{poName} AND voicy_part = #{voicePort} AND status != 2
 	</select>
+
+	<select id="getOrderByOrderNo" resultMap="Order">
+		SELECT * FROM `order` WHERE order_no = #{orderNo} AND status = 1
+	</select>
 </mapper>

+ 0 - 0
src/main/resources/reg/register.ftl → src/main/resources/templates/reg/register.ftl