Showing
8 changed files
with
253 additions
and
4 deletions
1 | +package com.yohoufo.dal.order; | ||
2 | + | ||
3 | + | ||
4 | +import com.yohoufo.dal.order.model.OrdersPayHbfq; | ||
5 | + | ||
6 | +public interface OrdersPayHbfqMapper { | ||
7 | + int deleteByPrimaryKey(String fqTradeNo); | ||
8 | + | ||
9 | + int insert(OrdersPayHbfq record); | ||
10 | + | ||
11 | + int insertSelective(OrdersPayHbfq record); | ||
12 | + | ||
13 | + OrdersPayHbfq selectByPrimaryKey(String fqTradeNo); | ||
14 | + | ||
15 | + int updateByPrimaryKeySelective(OrdersPayHbfq record); | ||
16 | + | ||
17 | + int updateByPrimaryKey(OrdersPayHbfq record); | ||
18 | + | ||
19 | + int insertOnDuplicateUpdate(OrdersPayHbfq record); | ||
20 | +} |
1 | +package com.yohoufo.dal.order.model; | ||
2 | + | ||
3 | +public class OrdersPayHbfq { | ||
4 | + private String fqTradeNo; | ||
5 | + | ||
6 | + private String payOrderCode; | ||
7 | + | ||
8 | + private Integer uid; | ||
9 | + | ||
10 | + private Integer createTime; | ||
11 | + | ||
12 | + private Integer updateTime; | ||
13 | + | ||
14 | + public String getFqTradeNo() { | ||
15 | + return fqTradeNo; | ||
16 | + } | ||
17 | + | ||
18 | + public void setFqTradeNo(String fqTradeNo) { | ||
19 | + this.fqTradeNo = fqTradeNo == null ? null : fqTradeNo.trim(); | ||
20 | + } | ||
21 | + | ||
22 | + public String getPayOrderCode() { | ||
23 | + return payOrderCode; | ||
24 | + } | ||
25 | + | ||
26 | + public void setPayOrderCode(String payOrderCode) { | ||
27 | + this.payOrderCode = payOrderCode == null ? null : payOrderCode.trim(); | ||
28 | + } | ||
29 | + | ||
30 | + public Integer getUid() { | ||
31 | + return uid; | ||
32 | + } | ||
33 | + | ||
34 | + public void setUid(Integer uid) { | ||
35 | + this.uid = uid; | ||
36 | + } | ||
37 | + | ||
38 | + public Integer getCreateTime() { | ||
39 | + return createTime; | ||
40 | + } | ||
41 | + | ||
42 | + public void setCreateTime(Integer createTime) { | ||
43 | + this.createTime = createTime; | ||
44 | + } | ||
45 | + | ||
46 | + public Integer getUpdateTime() { | ||
47 | + return updateTime; | ||
48 | + } | ||
49 | + | ||
50 | + public void setUpdateTime(Integer updateTime) { | ||
51 | + this.updateTime = updateTime; | ||
52 | + } | ||
53 | +} |
1 | +<?xml version="1.0" encoding="UTF-8" ?> | ||
2 | +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > | ||
3 | +<mapper namespace="com.yohoufo.dal.order.OrdersPayHbfqMapper" > | ||
4 | + <resultMap id="BaseResultMap" type="com.yohoufo.dal.order.model.OrdersPayHbfq" > | ||
5 | + <id column="fq_trade_no" property="fqTradeNo" jdbcType="VARCHAR" /> | ||
6 | + <result column="pay_order_code" property="payOrderCode" jdbcType="VARCHAR" /> | ||
7 | + <result column="uid" property="uid" jdbcType="INTEGER" /> | ||
8 | + <result column="create_time" property="createTime" jdbcType="INTEGER" /> | ||
9 | + <result column="update_time" property="updateTime" jdbcType="INTEGER" /> | ||
10 | + </resultMap> | ||
11 | + <sql id="Base_Column_List" > | ||
12 | + fq_trade_no, pay_order_code, uid, create_time, update_time | ||
13 | + </sql> | ||
14 | + | ||
15 | + <insert id="insertOnDuplicateUpdate" parameterType="com.yoho.yhorder.dal.model.OrdersPayHbfq" > | ||
16 | + insert into orders_pay_hbfq (fq_trade_no, pay_order_code, uid, create_time) | ||
17 | + values(#{fqTradeNo,jdbcType=VARCHAR}, #{payOrderCode,jdbcType=VARCHAR}, #{uid,jdbcType=INTEGER}, UNIX_TIMESTAMP()) | ||
18 | + on duplicate key update update_time = UNIX_TIMESTAMP() | ||
19 | + </insert> | ||
20 | + | ||
21 | + <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" > | ||
22 | + select | ||
23 | + <include refid="Base_Column_List" /> | ||
24 | + from orders_pay_hbfq | ||
25 | + where fq_trade_no = #{fqTradeNo,jdbcType=VARCHAR} | ||
26 | + </select> | ||
27 | + <delete id="deleteByPrimaryKey" parameterType="java.lang.String" > | ||
28 | + delete from orders_pay_hbfq | ||
29 | + where fq_trade_no = #{fqTradeNo,jdbcType=VARCHAR} | ||
30 | + </delete> | ||
31 | + <insert id="insert" parameterType="com.yohoufo.dal.order.model.OrdersPayHbfq" > | ||
32 | + insert into orders_pay_hbfq (fq_trade_no, pay_order_code, uid, | ||
33 | + create_time, update_time) | ||
34 | + values (#{fqTradeNo,jdbcType=VARCHAR}, #{payOrderCode,jdbcType=VARCHAR}, #{uid,jdbcType=INTEGER}, | ||
35 | + #{createTime,jdbcType=INTEGER}, #{updateTime,jdbcType=INTEGER}) | ||
36 | + </insert> | ||
37 | + <insert id="insertSelective" parameterType="com.yohoufo.dal.order.model.OrdersPayHbfq" > | ||
38 | + insert into orders_pay_hbfq | ||
39 | + <trim prefix="(" suffix=")" suffixOverrides="," > | ||
40 | + <if test="fqTradeNo != null" > | ||
41 | + fq_trade_no, | ||
42 | + </if> | ||
43 | + <if test="payOrderCode != null" > | ||
44 | + pay_order_code, | ||
45 | + </if> | ||
46 | + <if test="uid != null" > | ||
47 | + uid, | ||
48 | + </if> | ||
49 | + <if test="createTime != null" > | ||
50 | + create_time, | ||
51 | + </if> | ||
52 | + <if test="updateTime != null" > | ||
53 | + update_time, | ||
54 | + </if> | ||
55 | + </trim> | ||
56 | + <trim prefix="values (" suffix=")" suffixOverrides="," > | ||
57 | + <if test="fqTradeNo != null" > | ||
58 | + #{fqTradeNo,jdbcType=VARCHAR}, | ||
59 | + </if> | ||
60 | + <if test="payOrderCode != null" > | ||
61 | + #{payOrderCode,jdbcType=VARCHAR}, | ||
62 | + </if> | ||
63 | + <if test="uid != null" > | ||
64 | + #{uid,jdbcType=INTEGER}, | ||
65 | + </if> | ||
66 | + <if test="createTime != null" > | ||
67 | + #{createTime,jdbcType=INTEGER}, | ||
68 | + </if> | ||
69 | + <if test="updateTime != null" > | ||
70 | + #{updateTime,jdbcType=INTEGER}, | ||
71 | + </if> | ||
72 | + </trim> | ||
73 | + </insert> | ||
74 | + <update id="updateByPrimaryKeySelective" parameterType="com.yohoufo.dal.order.model.OrdersPayHbfq" > | ||
75 | + update orders_pay_hbfq | ||
76 | + <set > | ||
77 | + <if test="payOrderCode != null" > | ||
78 | + pay_order_code = #{payOrderCode,jdbcType=VARCHAR}, | ||
79 | + </if> | ||
80 | + <if test="uid != null" > | ||
81 | + uid = #{uid,jdbcType=INTEGER}, | ||
82 | + </if> | ||
83 | + <if test="createTime != null" > | ||
84 | + create_time = #{createTime,jdbcType=INTEGER}, | ||
85 | + </if> | ||
86 | + <if test="updateTime != null" > | ||
87 | + update_time = #{updateTime,jdbcType=INTEGER}, | ||
88 | + </if> | ||
89 | + </set> | ||
90 | + where fq_trade_no = #{fqTradeNo,jdbcType=VARCHAR} | ||
91 | + </update> | ||
92 | + <update id="updateByPrimaryKey" parameterType="com.yohoufo.dal.order.model.OrdersPayHbfq" > | ||
93 | + update orders_pay_hbfq | ||
94 | + set pay_order_code = #{payOrderCode,jdbcType=VARCHAR}, | ||
95 | + uid = #{uid,jdbcType=INTEGER}, | ||
96 | + create_time = #{createTime,jdbcType=INTEGER}, | ||
97 | + update_time = #{updateTime,jdbcType=INTEGER} | ||
98 | + where fq_trade_no = #{fqTradeNo,jdbcType=VARCHAR} | ||
99 | + </update> | ||
100 | +</mapper> |
@@ -71,9 +71,11 @@ public class PaymentController { | @@ -71,9 +71,11 @@ public class PaymentController { | ||
71 | public ApiResponse pay(@RequestParam(name = "uid") int uid, | 71 | public ApiResponse pay(@RequestParam(name = "uid") int uid, |
72 | @RequestParam(name = "orderCode") long orderCode, | 72 | @RequestParam(name = "orderCode") long orderCode, |
73 | @RequestParam(name = "payment") int payment, | 73 | @RequestParam(name = "payment") int payment, |
74 | - @RequestParam(name = "openid", required = false)String openid){ | 74 | + @RequestParam(name = "openid", required = false)String openid, |
75 | + @RequestParam(name = "hbfqNums", required = false) int hbfqNums){ | ||
75 | 76 | ||
76 | PaymentRequest request = PaymentRequest.builder().uid(uid).orderCode(orderCode).payment(payment) | 77 | PaymentRequest request = PaymentRequest.builder().uid(uid).orderCode(orderCode).payment(payment) |
78 | + .hbfqNums(hbfqNums) | ||
77 | .openid(openid).build(); | 79 | .openid(openid).build(); |
78 | 80 | ||
79 | logger.info("method com.yohoufo.order.controller.PaymentController.pay in, request is {}", request); | 81 | logger.info("method com.yohoufo.order.controller.PaymentController.pay in, request is {}", request); |
@@ -24,6 +24,11 @@ public class PaymentRequest { | @@ -24,6 +24,11 @@ public class PaymentRequest { | ||
24 | private int skup; | 24 | private int skup; |
25 | 25 | ||
26 | /** | 26 | /** |
27 | + * 花呗分期期数 | ||
28 | + */ | ||
29 | + private int hbfqNums; | ||
30 | + | ||
31 | + /** | ||
27 | * 退款金额 | 32 | * 退款金额 |
28 | */ | 33 | */ |
29 | private double refundAmount; | 34 | private double refundAmount; |
@@ -6,11 +6,15 @@ import com.google.common.base.Splitter; | @@ -6,11 +6,15 @@ import com.google.common.base.Splitter; | ||
6 | import com.yoho.error.ServiceError; | 6 | import com.yoho.error.ServiceError; |
7 | import com.yoho.error.exception.ServiceException; | 7 | import com.yoho.error.exception.ServiceException; |
8 | import com.yohobuy.ufo.model.order.bo.OrderInfo; | 8 | import com.yohobuy.ufo.model.order.bo.OrderInfo; |
9 | +import com.yohobuy.ufo.model.order.common.Payment; | ||
9 | import com.yohoufo.common.utils.DateUtil; | 10 | import com.yohoufo.common.utils.DateUtil; |
10 | import com.yohoufo.common.utils.HttpClient; | 11 | import com.yohoufo.common.utils.HttpClient; |
11 | import com.yohoufo.common.utils.MD5Utils; | 12 | import com.yohoufo.common.utils.MD5Utils; |
12 | import com.yohoufo.common.utils.RSAUtils; | 13 | import com.yohoufo.common.utils.RSAUtils; |
13 | import com.yohoufo.common.utils.WXUtil; | 14 | import com.yohoufo.common.utils.WXUtil; |
15 | +import com.yohoufo.dal.order.OrdersPayHbfqMapper; | ||
16 | +import com.yohoufo.dal.order.model.OrdersPayHbfq; | ||
17 | +import com.yohoufo.order.common.HbfqEnum; | ||
14 | import com.yohoufo.order.config.AlipayConfig; | 18 | import com.yohoufo.order.config.AlipayConfig; |
15 | import com.yohoufo.order.constants.RefundContant; | 19 | import com.yohoufo.order.constants.RefundContant; |
16 | import com.yohoufo.order.model.*; | 20 | import com.yohoufo.order.model.*; |
@@ -59,6 +63,10 @@ public abstract class AlipayServiceAbstract extends AbstractPayService { | @@ -59,6 +63,10 @@ public abstract class AlipayServiceAbstract extends AbstractPayService { | ||
59 | } | 63 | } |
60 | 64 | ||
61 | 65 | ||
66 | + @Autowired | ||
67 | + private OrdersPayHbfqMapper ordersPayHbfqDao; | ||
68 | + | ||
69 | + | ||
62 | 70 | ||
63 | @Value("${alipay.notifyurl}") | 71 | @Value("${alipay.notifyurl}") |
64 | private String notifyURL; | 72 | private String notifyURL; |
@@ -124,7 +132,8 @@ public abstract class AlipayServiceAbstract extends AbstractPayService { | @@ -124,7 +132,8 @@ public abstract class AlipayServiceAbstract extends AbstractPayService { | ||
124 | public JSONObject prepayRequest(OrderInfo orderInfo) { | 132 | public JSONObject prepayRequest(OrderInfo orderInfo) { |
125 | 133 | ||
126 | String orderCode = String.valueOf(orderInfo.getOrderCode()); | 134 | String orderCode = String.valueOf(orderInfo.getOrderCode()); |
127 | - Map<String, String> queryParams = buildOpenApiPayParams(orderCode, orderInfo.getAmount(), orderInfo.getPayExpireTime()); | 135 | + Map<String, String> queryParams = buildOpenApiPayParams(orderCode, orderInfo.getAmount(), |
136 | + orderInfo.getPayExpireTime(),orderInfo.getPayment(), orderInfo.getHbfqNums(), orderInfo.getUid()); | ||
128 | StringBuilder res = new StringBuilder(); | 137 | StringBuilder res = new StringBuilder(); |
129 | for (String key : queryParams.keySet()){ | 138 | for (String key : queryParams.keySet()){ |
130 | res.append(key); | 139 | res.append(key); |
@@ -414,7 +423,8 @@ public abstract class AlipayServiceAbstract extends AbstractPayService { | @@ -414,7 +423,8 @@ public abstract class AlipayServiceAbstract extends AbstractPayService { | ||
414 | * @param payExpireTime | 423 | * @param payExpireTime |
415 | * @return | 424 | * @return |
416 | */ | 425 | */ |
417 | - private Map<String, String> buildOpenApiPayParams(String tradeNo, BigDecimal amount, int payExpireTime) { | 426 | + private Map<String, String> buildOpenApiPayParams(String tradeNo, BigDecimal amount, int payExpireTime, |
427 | + int payment, int hbfqNums, int uid) { | ||
418 | Map<String, String> params = new HashMap<String, String>(); | 428 | Map<String, String> params = new HashMap<String, String>(); |
419 | params.put("app_id", getAppId()); | 429 | params.put("app_id", getAppId()); |
420 | params.put("method", "alipay.trade.app.pay"); | 430 | params.put("method", "alipay.trade.app.pay"); |
@@ -424,6 +434,27 @@ public abstract class AlipayServiceAbstract extends AbstractPayService { | @@ -424,6 +434,27 @@ public abstract class AlipayServiceAbstract extends AbstractPayService { | ||
424 | params.put("version", "1.0"); | 434 | params.put("version", "1.0"); |
425 | params.put("notify_url", notifyURL); | 435 | params.put("notify_url", notifyURL); |
426 | 436 | ||
437 | + if (Payment.isHB(payment)){ | ||
438 | + params.put("specified_channel", "pcredit"); // 花呗单渠道 | ||
439 | + | ||
440 | + }else if(Payment.isHBFQ(payment)){ | ||
441 | + | ||
442 | + params.put("specified_channel", "pcreditpayInstallment"); // 花呗分期 | ||
443 | + | ||
444 | + HbfqEnum hbfqEnum = HbfqEnum.getByfqTerms(hbfqNums); | ||
445 | + if(hbfqEnum == null) { | ||
446 | + logger.warn("fqNums from req invalid, fqNums: {}, orderCode: {}", hbfqNums, tradeNo); | ||
447 | + throw new ServiceException(ServiceError.ORDER_FQNUM_INVALID); | ||
448 | + } | ||
449 | + | ||
450 | + String outTradeNo = tradeNo + hbfqEnum.getTradeNoPostfix(); | ||
451 | + params.put("out_trade_no", outTradeNo); | ||
452 | + params.put("extend_params", getHbfqParam(hbfqEnum.getFqTerms()).toJSONString()); | ||
453 | + | ||
454 | + // 记录分期 | ||
455 | + recordOrdersPayHbfq(outTradeNo, tradeNo, uid); | ||
456 | + } | ||
457 | + | ||
427 | 458 | ||
428 | JSONObject bizJson = new JSONObject(true); | 459 | JSONObject bizJson = new JSONObject(true); |
429 | bizJson.put("timeout_express", payExpireTime+"m"); //该订单允许的最晚付款时间 | 460 | bizJson.put("timeout_express", payExpireTime+"m"); //该订单允许的最晚付款时间 |
@@ -451,6 +482,37 @@ public abstract class AlipayServiceAbstract extends AbstractPayService { | @@ -451,6 +482,37 @@ public abstract class AlipayServiceAbstract extends AbstractPayService { | ||
451 | 482 | ||
452 | 483 | ||
453 | /** | 484 | /** |
485 | + * 花呗分期payOrderCode记录 | ||
486 | + * @param hbfqRecord | ||
487 | + * @return | ||
488 | + */ | ||
489 | + public boolean recordOrdersPayHbfq(String outTradeNo, String tradeNo, int uid) { | ||
490 | + logger.info("recordOrdersPayHbfq outTradeNo: {}, tradeNo: {}, uid: {}", outTradeNo, tradeNo, uid); | ||
491 | + | ||
492 | + OrdersPayHbfq record = new OrdersPayHbfq(); | ||
493 | + record.setFqTradeNo(outTradeNo); | ||
494 | + record.setPayOrderCode(tradeNo); | ||
495 | + record.setUid(uid); | ||
496 | + try { | ||
497 | + | ||
498 | + ordersPayHbfqDao.insertOnDuplicateUpdate(record); | ||
499 | + return true; | ||
500 | + } catch (Exception e) { | ||
501 | + logger.warn("recordOrdersPayHbfq failed, req: {}, ex: ", record, e); | ||
502 | + } | ||
503 | + | ||
504 | + return false; | ||
505 | + } | ||
506 | + | ||
507 | + | ||
508 | + private JSONObject getHbfqParam(int fqNums) { | ||
509 | + JSONObject json = new JSONObject(); | ||
510 | + json.put("hb_fq_num", String.valueOf(fqNums)); | ||
511 | + json.put("hb_fq_seller_percent", "0"); //用户承担手续费 | ||
512 | + return json; | ||
513 | + } | ||
514 | + | ||
515 | + /** | ||
454 | * 获取openapi支付宝待签名字符串 | 516 | * 获取openapi支付宝待签名字符串 |
455 | * @param paramsMap | 517 | * @param paramsMap |
456 | * @return | 518 | * @return |
@@ -475,12 +537,17 @@ public abstract class AlipayServiceAbstract extends AbstractPayService { | @@ -475,12 +537,17 @@ public abstract class AlipayServiceAbstract extends AbstractPayService { | ||
475 | } | 537 | } |
476 | 538 | ||
477 | 539 | ||
478 | - | ||
479 | public PaymentData getPaymentData(Map<String, String> params) { | 540 | public PaymentData getPaymentData(Map<String, String> params) { |
480 | PaymentData payData = new PaymentData(); | 541 | PaymentData payData = new PaymentData(); |
481 | try { | 542 | try { |
482 | String outTradeNo = params.get("out_trade_no"); | 543 | String outTradeNo = params.get("out_trade_no"); |
483 | 544 | ||
545 | + // 花呗分期,获取订单号 | ||
546 | + OrdersPayHbfq hbfqRecord = ordersPayHbfqDao.selectByPrimaryKey(outTradeNo); | ||
547 | + if(hbfqRecord != null) { | ||
548 | + outTradeNo = hbfqRecord.getPayOrderCode(); | ||
549 | + } | ||
550 | + | ||
484 | payData.setOrderCode(outTradeNo); | 551 | payData.setOrderCode(outTradeNo); |
485 | payData.setTotalFee(Double.parseDouble(params.get("total_fee") != null ? params.get("total_fee") : params.get("total_amount"))); | 552 | payData.setTotalFee(Double.parseDouble(params.get("total_fee") != null ? params.get("total_fee") : params.get("total_amount"))); |
486 | payData.setBankCode(""); | 553 | payData.setBankCode(""); |
@@ -103,6 +103,7 @@ datasources: | @@ -103,6 +103,7 @@ datasources: | ||
103 | - com.yohoufo.dal.order.InviteCodeSequenceRandomMapper | 103 | - com.yohoufo.dal.order.InviteCodeSequenceRandomMapper |
104 | - com.yohoufo.dal.order.SellerGoodsStatusFlowMapper | 104 | - com.yohoufo.dal.order.SellerGoodsStatusFlowMapper |
105 | - com.yohoufo.dal.order.CmsPayMapper | 105 | - com.yohoufo.dal.order.CmsPayMapper |
106 | + - com.yohoufo.dal.order.OrdersPayHbfqMapper | ||
106 | 107 | ||
107 | ufo_promotion: | 108 | ufo_promotion: |
108 | servers: | 109 | servers: |
@@ -102,6 +102,7 @@ datasources: | @@ -102,6 +102,7 @@ datasources: | ||
102 | - com.yohoufo.dal.order.InviteCodeSequenceRandomMapper | 102 | - com.yohoufo.dal.order.InviteCodeSequenceRandomMapper |
103 | - com.yohoufo.dal.order.SellerGoodsStatusFlowMapper | 103 | - com.yohoufo.dal.order.SellerGoodsStatusFlowMapper |
104 | - com.yohoufo.dal.order.CmsPayMapper | 104 | - com.yohoufo.dal.order.CmsPayMapper |
105 | + - com.yohoufo.dal.order.OrdersPayHbfqMapper | ||
105 | 106 | ||
106 | ufo_promotion: | 107 | ufo_promotion: |
107 | servers: | 108 | servers: |
-
Please register or login to post a comment