|
@@ -12,17 +12,18 @@ import java.util.Map;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
+import com.iamberry.wechat.core.entity.ResultMsg;
|
|
|
import com.iamberry.wechat.core.entity.order.OrderItem;
|
|
|
-import com.iamberry.wechat.face.coupon.WelfareService;
|
|
|
import com.iamberry.wechat.tools.ResultInfo;
|
|
|
import com.iamberry.wechat.tools.SendMessageUtil;
|
|
|
import org.jdom.Document;
|
|
|
import org.jdom.Element;
|
|
|
import org.jdom.input.SAXBuilder;
|
|
|
-import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Controller;
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestParam;
|
|
|
+import org.springframework.web.bind.annotation.ResponseBody;
|
|
|
import org.xml.sax.InputSource;
|
|
|
|
|
|
import com.iamberry.app.tool.log.RatFWLogger;
|
|
@@ -56,25 +57,42 @@ import com.iamberry.wechat.tools.StaticInfo;
|
|
|
@RequestMapping("/callback")
|
|
|
public class ResponseWechatPayHandler {
|
|
|
|
|
|
- private final Object lock = new Object();
|
|
|
@Autowired
|
|
|
private RatFWLogger ratFWLogger;
|
|
|
+
|
|
|
+ private Object lock = new Object();
|
|
|
+
|
|
|
@Autowired
|
|
|
private CartService cartService;
|
|
|
+
|
|
|
@Autowired
|
|
|
private PlaceOrderService placeOrderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private PlaceInfoService placeInfoService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MemberService memberService;
|
|
|
+
|
|
|
@Autowired
|
|
|
private SendMessageUtil sendMessageUtil;
|
|
|
+
|
|
|
@Autowired
|
|
|
private AdminOrderService adminOrderService;
|
|
|
+
|
|
|
@Autowired
|
|
|
private MQServiceProxy mQservice;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RebackServices rebackServices;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private QrcodeService qrcodeService; //二维码处理
|
|
|
+
|
|
|
@Autowired
|
|
|
CashLogService cashLogService;
|
|
|
@Autowired
|
|
|
CouponItemService couponItemService;
|
|
|
- @Autowired
|
|
|
- private WelfareService welfareService;
|
|
|
|
|
|
/**
|
|
|
* 销售订单支付回调方法
|
|
@@ -85,90 +103,150 @@ public class ResponseWechatPayHandler {
|
|
|
HttpServletResponse response) throws IOException {
|
|
|
synchronized (lock) {
|
|
|
String inputLine;
|
|
|
- StringBuilder notityXml = new StringBuilder();
|
|
|
+ String notityXml = "";
|
|
|
String resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
|
|
|
try {
|
|
|
//获取XML参数
|
|
|
while ((inputLine = request.getReader().readLine()) != null) {
|
|
|
- notityXml.append(inputLine);
|
|
|
+ notityXml += inputLine;
|
|
|
}
|
|
|
request.getReader().close();
|
|
|
- // 解析XML格式的数据
|
|
|
- Map m = parseXmlToList2(notityXml.toString());
|
|
|
+ //解析XML格式的数据
|
|
|
+ Map m = parseXmlToList2(notityXml);
|
|
|
WxPayResult wpr = new WxPayResult();
|
|
|
- wpr = setWxPayResultObj(wpr,m);
|
|
|
- // 判断微信返回的内容是否为SUCCESS
|
|
|
- assert "SUCCESS".equalsIgnoreCase(wpr.getResultCode());
|
|
|
- // 验证数据
|
|
|
- String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach());
|
|
|
- assert orderIdMD5.equals(wpr.getOutTradeNo());
|
|
|
- // 组装数据
|
|
|
- Date nowDate = new Date();
|
|
|
- Order order = new Order();
|
|
|
- order.setSalesOrderid(orderIdMD5);
|
|
|
- order.setSalesStatus(2);
|
|
|
- order.setSalesTransactionId(wpr.getTransactionId());
|
|
|
- order.setSalesTransactionDate(nowDate);
|
|
|
- order.setSalesOpenid(wpr.getOpenid());
|
|
|
- Order or = adminOrderService.getShopOrderByOrderId(orderIdMD5);
|
|
|
- assert or.getSalesStatus() == 1;
|
|
|
- List<OrderItem> orderItemList = adminOrderService.getShopOrderItemByOrderId(or.getSalesOrderid());
|
|
|
- // 修改订单状态
|
|
|
- int count = cartService.updateOrderStatus(order);
|
|
|
- // 修改优惠券状态
|
|
|
- order=cartService.selectOrderInfoById(order);
|
|
|
- String couponId=order.getCouponId();
|
|
|
- if (couponId!=null && !"".equals(couponId)) {
|
|
|
- welfareService.useCoupon(wpr.getOpenid(), orderIdMD5, couponId);
|
|
|
- }
|
|
|
- assert count >= 1;
|
|
|
- // 给订单的回调修改状态
|
|
|
- {
|
|
|
- MQMessage message = new MQMessage();
|
|
|
- message.setServiceToMessage(orderIdMD5);
|
|
|
- message.setServiceOtherMessage(wpr.getTransactionId());
|
|
|
- message.setServiceIsSend(2);
|
|
|
- message.setServiceStatus(1);
|
|
|
- message.setServiceHandlerObjectName("cartServiceImpl");
|
|
|
- message.setServiceHandlerMethodName("supdateStateByOrderId");
|
|
|
- message.setServiceType(1);
|
|
|
- mQservice.insertMQMessage(message);
|
|
|
- }
|
|
|
- // 给RST推送信息
|
|
|
- {
|
|
|
- MQMessage message = new MQMessage();
|
|
|
- message.setServiceToMessage(orderIdMD5);
|
|
|
- message.setServiceOtherMessage("efast.trade.new.add");
|
|
|
- message.setServiceIsSend(2);
|
|
|
- message.setServiceStatus(1);
|
|
|
- message.setServiceType(1);
|
|
|
- message.setServiceHandlerObjectName("efastOrderServiceImpl");
|
|
|
- message.setServiceHandlerMethodName("addOrderInfoToEfast");
|
|
|
- mQservice.insertMQMessage(message);
|
|
|
- }
|
|
|
- //推送消息到微信
|
|
|
- {
|
|
|
- DecimalFormat df=new DecimalFormat("0.00");
|
|
|
- String payMoney = df.format((float)or.getSalesYetAmount()/100) + "元";
|
|
|
- sendMessageUtil.probationPaySuccess(
|
|
|
- ResultInfo.PAYSUCCESS,
|
|
|
- orderItemList.get(0).getItemProductName()+"...",
|
|
|
- or.getSalesOrderid(),
|
|
|
- payMoney,
|
|
|
- ResultInfo.sendRemark1,
|
|
|
- order.getSalesOpenid(),
|
|
|
- ResultInfo.ORDER_DETAIL+order.getSalesOrderid());
|
|
|
+ wpr=setWxPayResultObj(wpr,m);
|
|
|
+ //判断
|
|
|
+ if("SUCCESS".equalsIgnoreCase(wpr.getResultCode())){
|
|
|
+ //resXml:返回给微信服务器的数据
|
|
|
+ resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
|
|
|
+ String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach());
|
|
|
+//System.out.println("===========pay 117==============");
|
|
|
+
|
|
|
+ if (orderIdMD5.equals(wpr.getOutTradeNo())) {
|
|
|
+ Date nowDate = new Date();
|
|
|
+ // 组装数据
|
|
|
+ Order order = new Order();
|
|
|
+ order.setSalesOrderid(orderIdMD5);
|
|
|
+ order.setSalesStatus(2); // 已支付
|
|
|
+ order.setSalesTransactionId(wpr.getTransactionId()); // 微信支付ID
|
|
|
+ order.setSalesTransactionDate(new Date()); // 微信支付时间
|
|
|
+ order.setSalesOpenid(wpr.getOpenid());
|
|
|
+
|
|
|
+ Order or = adminOrderService.getShopOrderByOrderId(orderIdMD5);
|
|
|
+ if(or.getSalesStatus() != 1){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<OrderItem> orderItemList = adminOrderService.getShopOrderItemByOrderId(or.getSalesOrderid());
|
|
|
+
|
|
|
+ // 修改订单状态
|
|
|
+ int count = cartService.updateOrderStatus(order);
|
|
|
+
|
|
|
+//System.out.println("===========pay 132 修改订单状态==============");
|
|
|
+ //修改优惠券状态
|
|
|
+ order=cartService.selectOrderInfoById(order);
|
|
|
+
|
|
|
+//System.out.println("===========pay 136 修改订单状态=============="+order.getSalesOrderid());
|
|
|
+ String couponId=order.getCouponId();
|
|
|
+
|
|
|
+ if(couponId!=null && !couponId.equals("")){
|
|
|
+ CouponItem couponItem=new CouponItem();
|
|
|
+ couponItem.setCouponItemId(couponId);
|
|
|
+ couponItem.setCouponUseStatus(2);
|
|
|
+ couponItem.setCouponUseDate(new Date());
|
|
|
+ couponItemService.updateCouponItemById(couponItem);
|
|
|
+ }
|
|
|
+ //更新账户余额
|
|
|
+ int balancePayAmount=order.getBalancePayAmount();
|
|
|
+ if(balancePayAmount>0){
|
|
|
+ Member member=new Member();
|
|
|
+ member.setUserOpenid(order.getSalesOpenid());
|
|
|
+ member.setUserIncome(-balancePayAmount);
|
|
|
+ memberService.updateUserIncomeByOpenId(member);
|
|
|
+
|
|
|
+ //现金使用记录
|
|
|
+ CashLog log=new CashLog();
|
|
|
+ log.setCashLogsIntroduction("订单支出");
|
|
|
+ log.setCashLogsNum(balancePayAmount);
|
|
|
+ log.setCashLogsOpenid(member.getUserOpenid());
|
|
|
+ log.setCashLogsType(2);
|
|
|
+ log.setCashLogsResType(3);
|
|
|
+ log.setCashLogsOrderid(order.getSalesOrderid());
|
|
|
+ log.setCashLogsCreateDate(nowDate);
|
|
|
+ count=cashLogService.addCashLog(log);
|
|
|
+ }
|
|
|
+ if (count < 1) {
|
|
|
+ resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
|
|
|
+ }
|
|
|
+//System.out.println("===========pay 168 快速插入=============="+count);
|
|
|
+ // 给订单的回调修改状态
|
|
|
+ try {
|
|
|
+ MQMessage message = new MQMessage();
|
|
|
+ message.setServiceToMessage(orderIdMD5);
|
|
|
+ message.setServiceOtherMessage(wpr.getTransactionId());
|
|
|
+ message.setServiceIsSend(2); // 没有推送的信息
|
|
|
+ message.setServiceStatus(1); // 推送成功
|
|
|
+ message.setServiceHandlerObjectName("cartServiceImpl");
|
|
|
+ message.setServiceHandlerMethodName("supdateStateByOrderId");
|
|
|
+ message.setServiceType(1);
|
|
|
+ mQservice.insertMQMessage(message);
|
|
|
+ } catch (Exception e) {
|
|
|
+ // TODO: handle exception
|
|
|
+ }
|
|
|
+//System.out.println("===========pay 182 插入返利到mq=============="+count);
|
|
|
+ //rebackServices.loadSingleOrderReward(order);
|
|
|
+
|
|
|
+ //添加到返利表
|
|
|
+ //rebackServices.loadSingleOrderReward(order);
|
|
|
+ // 给百胜推送信息
|
|
|
+ try {
|
|
|
+ MQMessage message = new MQMessage();
|
|
|
+ message.setServiceToMessage(orderIdMD5);
|
|
|
+ message.setServiceOtherMessage("efast.trade.new.add");
|
|
|
+ message.setServiceIsSend(2); // 没有推送的信息
|
|
|
+ message.setServiceStatus(1); // 推送成功
|
|
|
+ message.setServiceType(1); // 添加订单信息
|
|
|
+ message.setServiceHandlerObjectName("efastOrderServiceImpl");
|
|
|
+ message.setServiceHandlerMethodName("addOrderInfoToEfast");
|
|
|
+ mQservice.insertMQMessage(message);
|
|
|
+ } catch (Exception e) {
|
|
|
+ }
|
|
|
+
|
|
|
+ //推送消息到微信
|
|
|
+ DecimalFormat df=new DecimalFormat("0.00");
|
|
|
+ String payMoney = df.format((float)or.getSalesYetAmount()/100) + "元";
|
|
|
+ try {
|
|
|
+ sendMessageUtil.probationPaySuccess(
|
|
|
+ ResultInfo.PAYSUCCESS,
|
|
|
+ orderItemList.get(0).getItemProductName()+"...",
|
|
|
+ or.getSalesOrderid(),
|
|
|
+ payMoney,
|
|
|
+ ResultInfo.sendRemark1,
|
|
|
+ order.getSalesOpenid(),
|
|
|
+ ResultInfo.ORDER_DETAIL+order.getSalesOrderid());
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println("推送支付成功消息失败!");
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ //给父节点推送返利消息
|
|
|
+// rewardsMessage(member,orderIdMD5);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
|
|
|
+ ratFWLogger.error(this, "订单:" + orderIdMD5 + "支付成功,但是没有通过校验!");
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文为空]]></return_msg></xml>";
|
|
|
}
|
|
|
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
|
|
|
out.write(resXml.getBytes());
|
|
|
out.flush();
|
|
|
out.close();
|
|
|
} catch (Exception e) {
|
|
|
- BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
|
|
|
- out.write("<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>".getBytes());
|
|
|
- out.flush();
|
|
|
- out.close();
|
|
|
- LoggerFactory.getLogger(this.getClass()).error("", e);
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -244,9 +322,10 @@ public class ResponseWechatPayHandler {
|
|
|
sb.setFeature("http://xml.org/sax/features/external-general-entities", false);
|
|
|
sb.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
|
|
|
sb.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
|
|
+
|
|
|
// 通过输入源构造一个Document
|
|
|
Document doc = (Document) sb.build(source);
|
|
|
- Element root = doc.getRootElement();
|
|
|
+ Element root = doc.getRootElement();// 指向根节点
|
|
|
List<Element> es = root.getChildren();
|
|
|
if (es != null && es.size() != 0) {
|
|
|
for (Element element : es) {
|