admin
2019-11-05 50721de246e661e83e96284523d415c7d280d5b2
微信支付回调处理
7个文件已修改
98 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/CallBackController.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/shop/BanLiShopOrderMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dto/mq/order/OrderTopicTagEnum.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/shop/BanLiShopOrderMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/shop/BanLiShopOrderService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/wx/BanLiShopWXPayUtil.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/CallBackController.java
@@ -5,6 +5,8 @@
import java.io.PrintWriter;
import java.security.SignatureException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import javax.crypto.Mac;
@@ -14,16 +16,27 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.yeshi.utils.wx.WXUtil;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.Producer;
import com.google.gson.Gson;
import com.yeshi.fanli.dto.mq.order.OrderTopicTagEnum;
import com.yeshi.fanli.dto.mq.order.body.BanLiShopOrderMQMsg;
import com.yeshi.fanli.dto.push.PushContentDTO;
import com.yeshi.fanli.entity.bus.msg.MsgDeviceReadState;
import com.yeshi.fanli.entity.config.push.PushMsgFactory;
import com.yeshi.fanli.entity.shop.BanLiShopOrder;
import com.yeshi.fanli.exception.push.PushException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.msg.MsgDeviceReadStateService;
import com.yeshi.fanli.service.inter.push.PushService;
import com.yeshi.fanli.service.inter.shop.BanLiShopOrderService;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.rocketmq.MQTopicName;
import com.yeshi.fanli.util.shop.BanLiShopOrderUtil;
import com.yeshi.fanli.util.wx.BanLiShopWXPayUtil;
import net.sf.json.JSONObject;
@@ -44,6 +57,12 @@
    @Resource
    private MsgDeviceReadStateService msgDeviceReadStateService;
    @Resource(name = "producer")
    private Producer producer;
    @Resource
    private BanLiShopOrderService banLiShopOrderService;
    /**
     * 客服消息回调
@@ -150,10 +169,34 @@
        out.print("success");
    }
    @RequestMapping(value = "banlishop/pay")
    public void banLiShopPay(PrintWriter out) {
        out.print("success");
    public void banLiShopPay(HttpServletRequest request, PrintWriter out) {
        Map<String, String> map = WXUtil.parseXML(request);
        String sign = map.get("sign");
        map.remove("sign");
        boolean isSuccess = BanLiShopWXPayUtil.signIsRight(map, sign);
        if (isSuccess)
            if (map.get("return_code").equalsIgnoreCase("SUCCESS")
                    && map.get("result_code").equalsIgnoreCase("SUCCESS")) {
                // 商户订单号
                String wxPayOrderNo = map.get("out_trade_no");
                // 订单号
                String orderNo = BanLiShopOrderUtil.getOrderNoFromWXPayOrderNo(wxPayOrderNo);
                if (!StringUtil.isNullOrEmpty(orderNo)) {
                    BanLiShopOrder order = banLiShopOrderService.selectByOrderNo(orderNo);
                    if (order != null) {// 支付成功消息推送
                        BanLiShopOrderMQMsg msg = new BanLiShopOrderMQMsg(order.getId(), order.getUid());
                        Message message = new Message(MQTopicName.TOPIC_ORDER.name(),
                                OrderTopicTagEnum.banLiShopOrderPaid.name(), new Gson().toJson(msg).getBytes());
                        producer.send(message);
                        Map<String, String> returnMap = new HashMap<>();
                        returnMap.put("return_code", "SUCCESS");
                        returnMap.put("return_msg", "OK");
                        out.print(WXUtil.loadWXMessage(returnMap));
                        out.close();
                    }
                }
            }
    }
}
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/shop/BanLiShopOrderMapper.java
@@ -31,5 +31,12 @@
     * @return
     */
    long countByUid(@Param("stateList") List<Integer> stateList, @Param("uid") Long uid);
    /**
     * 根据订单号查询
     * @param orderNo
     * @return
     */
    BanLiShopOrder selectByOrderNo(String orderNo);
}
fanli/src/main/java/com/yeshi/fanli/dto/mq/order/OrderTopicTagEnum.java
@@ -9,7 +9,8 @@
    orderFanLiActual(UserActive.class), // 订单实时到账
    orderFanLiDelay(UserActive.class), // 订单到账延时消息
    banLiShopOrderDelay(BanLiShopOrderMQMsg.class),// 板栗商城下单
    banLiShopOrderRefund(BanLiShopOrderMQMsg.class);//板栗商城订单退款
    banLiShopOrderRefund(BanLiShopOrderMQMsg.class),//板栗商城订单退款
    banLiShopOrderPaid(BanLiShopOrderMQMsg.class);//商城订单支付成功
    private final Class<?> clazz;
fanli/src/main/java/com/yeshi/fanli/mapping/shop/BanLiShopOrderMapper.xml
@@ -71,6 +71,15 @@
        </if>
        order by so_id desc limit #{start},#{count}
    </select>
    <select id="selectByOrderNo" resultMap="BaseResultMap"
        parameterType="java.lang.String">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_shop_order where so_order_no = #{0}
    </select>
    <select id="countByUid" resultType="java.lang.Long">
        select count(*) from yeshi_ec_shop_order where so_uid = #{uid}
        <if test="stateList!=null">
fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderServiceImpl.java
@@ -422,4 +422,9 @@
        return order;
    }
    @Override
    public BanLiShopOrder selectByOrderNo(String orderNo) {
        return banLiShopOrderMapper.selectByOrderNo(orderNo);
    }
}
fanli/src/main/java/com/yeshi/fanli/service/inter/shop/BanLiShopOrderService.java
@@ -101,5 +101,12 @@
     * @param order
     */
    public void udpateSelectiveByPrimaryKey(BanLiShopOrder order);
    /**
     * 根据订单号查询
     * @param orderNo
     * @return
     */
    public BanLiShopOrder selectByOrderNo(String orderNo);
}
fanli/src/main/java/com/yeshi/fanli/util/wx/BanLiShopWXPayUtil.java
@@ -9,6 +9,7 @@
import org.yeshi.utils.exception.WXOrderException;
import org.yeshi.utils.exception.WXPlaceOrderParamsException;
import org.yeshi.utils.wx.WXPayUtil;
import org.yeshi.utils.wx.WXUtil;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.shop.BanLiShopOrderUtil;
@@ -66,7 +67,8 @@
    public static boolean refund(String orderNo, BigDecimal money) throws WXOrderException {
        boolean success = WXPayUtil.refund(BanLiShopOrderUtil.getWXPayOrderNo(orderNo), money, money, null,
                new WXAPPInfo(Constant.getWXAccount(null, null).getGzAppId(),
                        Constant.getWXAccount(null, null).getGzAppSecret(), MCH_ID, MCH_KEY), MCH_ID, BanLiShopWXPayUtil.class.getClassLoader().getResourceAsStream(MCH_CERT_PATH));
                        Constant.getWXAccount(null, null).getGzAppSecret(), MCH_ID, MCH_KEY),
                MCH_ID, BanLiShopWXPayUtil.class.getClassLoader().getResourceAsStream(MCH_CERT_PATH));
        return success;
    }
@@ -76,4 +78,16 @@
                        Constant.getWXAccount(null, null).getGzAppSecret(), MCH_ID, MCH_KEY));
    }
    /**
     * 签名是否正确
     *
     * @param params
     * @param sign
     * @return
     */
    public static boolean signIsRight(Map<String, String> params, String sign) {
        String newSign = WXUtil.getSignMD5(params, MCH_KEY);
        return newSign.equalsIgnoreCase(sign);
    }
}