Althars123 vor 4 Jahren
Ursprung
Commit
7d0c58243f

+ 56 - 3
zzjs-admin/src/main/java/com/miaxis/app/controller/film/NotifyController.java

@@ -1,44 +1,97 @@
 package com.miaxis.app.controller.film;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.miaxis.common.config.WxpayConfig;
 import com.miaxis.common.constant.Constants;
 import com.miaxis.common.core.domain.Response;
+import com.miaxis.common.exception.CustomException;
 import com.miaxis.common.utils.AesUtil;
 import com.miaxis.film.domain.FilmOrder;
 import com.miaxis.film.dto.FilmWxpayDTO;
+import com.miaxis.film.service.IFilmOrderService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import lombok.Data;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
 import java.security.GeneralSecurityException;
+import java.sql.Date;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.util.Locale;
 
 @RestController
 @RequiredArgsConstructor
 @RequestMapping(Constants.OPEN_PREFIX+"/film/notify")
 @Api(tags = {"【小程序-回调】"})
+@Slf4j
 public class NotifyController {
 
 
     @Autowired
     private WxpayConfig wxpayConfig;
 
+
+    @Autowired
+    private IFilmOrderService filmOrderService;
+
     /**
      * 微信支付回调接口
      */
     @PostMapping(value = "/wxpay")
     @ApiOperation("微信支付回调")
-    public Response<FilmOrder> wxpayNotify(@RequestBody FilmWxpayDTO filmWxpayDTO,HttpServletRequest request) throws GeneralSecurityException, IOException {
+    public WxNotifyReturnDTO wxpayNotify(@RequestBody FilmWxpayDTO filmWxpayDTO,HttpServletRequest request) throws GeneralSecurityException, IOException {
         AesUtil aesUtil = new AesUtil(wxpayConfig.getV3key().getBytes());
         FilmWxpayDTO.WxpaySource wxpaySource = filmWxpayDTO.getResource();
         String resourceString = aesUtil.decryptToString(wxpaySource.getAssociated_data().getBytes(), wxpaySource.getNonce().getBytes(), wxpaySource.getCiphertext());
-        System.out.println(resourceString);
-        return Response.success();
+        log.info(resourceString);
+        JSONObject jsonObject = JSONObject.parseObject(resourceString);
+        //将回调数据写入数据库
+        writeNotifyDataToDb(jsonObject);
+        WxNotifyReturnDTO wxNotifyReturnDTO = new WxNotifyReturnDTO();
+        wxNotifyReturnDTO.setCode("SUCCESS");
+        wxNotifyReturnDTO.setMessage("成功");
+        return wxNotifyReturnDTO;
+    }
+
+    private void writeNotifyDataToDb(JSONObject jsonObject) {
+        String outTradeNo = jsonObject.getString("out_trade_no");
+        FilmOrder filmOrder = filmOrderService.getByOutTradeNo(outTradeNo);
+        if (filmOrder == null) {
+            throw new CustomException("该订单不存在");
+        }
+        filmOrder.setTransactionId(jsonObject.getString("transaction_id"));
+        JSONObject amount = jsonObject.getJSONObject("amount");
+        filmOrder.setPayerTotal(jsonObject.getInteger("payer_total"));
+        filmOrder.setTotal(jsonObject.getInteger("total"));
+        filmOrder.setCurrency(jsonObject.getString("currency"));
+        filmOrder.setPayerCurrency(jsonObject.getString("payer_currency"));
+        filmOrder.setTradeState(jsonObject.getString("SUCCESS"));
+        filmOrder.setBankType(jsonObject.getString("bank_type"));
+        DateTime dateTime  = new DateTime(jsonObject.getString("success_time"));
+        filmOrder.setSuccessTime(dateTime.toDate());
+        filmOrder.setTradeStateDesc(jsonObject.getString("trade_state_desc"));
+        filmOrder.setTradeType(jsonObject.getString("trade_type"));
+        filmOrder.setAttach(jsonObject.getString("attach"));
+        JSONObject sceneInfo = jsonObject.getJSONObject("scene_info");
+        if (sceneInfo != null){
+            filmOrder.setDeviceId(jsonObject.getString("device_id"));
+        }
+        filmOrderService.updateById(filmOrder);
+
+    }
+    @Data
+    public class WxNotifyReturnDTO {
+        String code;
+        String message;
     }
 
 }

+ 6 - 9
zzjs-service/src/main/java/com/miaxis/film/domain/FilmOrder.java

@@ -1,19 +1,16 @@
 package com.miaxis.film.domain;
 
-import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
 import com.miaxis.common.annotation.Excel;
-import com.miaxis.common.core.domain.BaseEntity;
+import com.miaxis.common.core.domain.BaseBusinessEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.miaxis.common.core.domain.BaseBusinessEntity;
 import lombok.Data;
+
+import java.util.Date;
 /**
  * 电影订单对象 film_order
  *

+ 1 - 0
zzjs-service/src/main/java/com/miaxis/film/mapper/FilmOrderMapper.java

@@ -19,4 +19,5 @@ public interface FilmOrderMapper extends BaseMapper<FilmOrder> {
      */
     public List<FilmOrder> selectFilmOrderList(FilmOrder filmOrder);
 
+    FilmOrder getByOutTradeNo(String outTradeNo);
 }

+ 2 - 0
zzjs-service/src/main/java/com/miaxis/film/service/IFilmOrderService.java

@@ -18,4 +18,6 @@ public interface IFilmOrderService extends IService<FilmOrder>{
      * @return 电影订单集合
      */
     public List<FilmOrder> selectFilmOrderList(FilmOrder filmOrder);
+
+    FilmOrder getByOutTradeNo(String outTradeNo);
 }

+ 5 - 0
zzjs-service/src/main/java/com/miaxis/film/service/impl/FilmOrderServiceImpl.java

@@ -33,4 +33,9 @@ public class FilmOrderServiceImpl extends ServiceImpl<FilmOrderMapper, FilmOrder
     public List<FilmOrder> selectFilmOrderList(FilmOrder filmOrder){
         return filmOrderMapper.selectFilmOrderList(filmOrder);
     }
+
+    @Override
+    public FilmOrder getByOutTradeNo(String outTradeNo) {
+        return filmOrderMapper.getByOutTradeNo(outTradeNo);
+    }
 }

+ 5 - 0
zzjs-service/src/main/resources/mapper/film/FilmOrderMapper.xml

@@ -40,6 +40,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select * from film_order
     </sql>
 
+    <select id="getByOutTradeNo" parameterType="string" resultType="com.miaxis.film.domain.FilmOrder">
+         select * from film_order where out_trade_no =#{outTradeNo}
+    </select>
+
+
     <select id="selectFilmOrderList" parameterType="FilmOrder" resultMap="FilmOrderResult">
         <include refid="selectFilmOrderVo"/>
         <where>