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); } }