Althars123 4 жил өмнө
parent
commit
c093cb2de6

+ 59 - 4
zzjs-admin/src/main/java/com/miaxis/app/controller/film/NotifyController.java

@@ -9,6 +9,8 @@ import com.miaxis.common.core.domain.entity.UserInfo;
 import com.miaxis.common.exception.CustomException;
 import com.miaxis.common.exception.CustomException;
 import com.miaxis.common.utils.AesUtil;
 import com.miaxis.common.utils.AesUtil;
 import com.miaxis.common.utils.SecurityUtils;
 import com.miaxis.common.utils.SecurityUtils;
+import com.miaxis.common.utils.uuid.CommonUtils;
+import com.miaxis.common.utils.uuid.UUID;
 import com.miaxis.feign.dto.FilmDTO;
 import com.miaxis.feign.dto.FilmDTO;
 import com.miaxis.film.domain.FilmOrder;
 import com.miaxis.film.domain.FilmOrder;
 import com.miaxis.film.domain.RefundRecord;
 import com.miaxis.film.domain.RefundRecord;
@@ -26,16 +28,23 @@ import org.joda.time.DateTime;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.ClassPathResource;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
+import sun.plugin.util.UIUtil;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
+import java.io.BufferedReader;
+import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
 import java.security.GeneralSecurityException;
 import java.security.GeneralSecurityException;
+import java.security.PrivateKey;
+import java.security.Signature;
 import java.sql.Date;
 import java.sql.Date;
 import java.time.ZoneId;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
 import java.time.ZonedDateTime;
+import java.util.Base64;
 import java.util.Locale;
 import java.util.Locale;
 
 
 import static com.miaxis.common.utils.OrderCodeFactory.getOrderCode;
 import static com.miaxis.common.utils.OrderCodeFactory.getOrderCode;
@@ -70,7 +79,10 @@ public class NotifyController {
      */
      */
     @PostMapping(value = "/wxpay")
     @PostMapping(value = "/wxpay")
     @ApiOperation("微信支付回调")
     @ApiOperation("微信支付回调")
-    public WxNotifyReturnDTO wxpayNotify(@RequestBody FilmWxpayDTO filmWxpayDTO, HttpServletRequest request) throws GeneralSecurityException, IOException {
+    public WxNotifyReturnDTO wxpayNotify(@RequestBody FilmWxpayDTO filmWxpayDTO, HttpServletRequest request, BufferedReader br) throws GeneralSecurityException, IOException {
+        String bodyString = getBodyString(br);
+        System.out.println(bodyString);
+        Boolean pass =  validate(request);
 
 
         String resourceString = getSourString(filmWxpayDTO);
         String resourceString = getSourString(filmWxpayDTO);
         log.info(resourceString);
         log.info(resourceString);
@@ -84,6 +96,50 @@ public class NotifyController {
         return wxNotifyReturnDTO;
         return wxNotifyReturnDTO;
     }
     }
 
 
+    private String getBodyString(BufferedReader br) {
+        String inputLine;
+
+        String str = "";
+
+        try {
+            while ((inputLine = br.readLine()) != null) {
+                str += inputLine;
+
+            }
+
+            br.close();
+
+        } catch (IOException e) {
+            System.out.println("IOException: " + e);
+
+        }
+        return str;
+    }
+
+    private Boolean validate(HttpServletRequest request) {
+        String sign = request.getHeader("Wechatpay-Signature");
+        String timestamp = request.getHeader("Wechatpay-Timestamp");
+        String nonce = request.getHeader("Wechatpay-Nonce");
+
+
+        StringBuffer sb = new StringBuffer();
+        sb.append(timestamp + "\n");
+        sb.append(nonce + "\n");
+        System.out.println(sb);
+        return true;
+
+//        File file = new ClassPathResource("wechatpay/apiclient_key.pem").getFile();
+//        String realPath =file.getAbsolutePath();
+//        PrivateKey privateKey = CommonUtils.getPrivateKey(realPath);
+//        // 进行签名服务
+//        Signature signature = Signature.getInstance("SHA256withRSA");
+//        signature.initSign(privateKey);
+//        signature.update(sb.toString().getBytes("UTF-8"));
+//        byte[] signedData = signature.sign();
+//        String base64Str =  Base64.getEncoder().encodeToString(signedData);
+
+
+    }
 
 
 
 
     /**
     /**
@@ -147,9 +203,8 @@ public class NotifyController {
         }
         }
         filmOrderJsonData.setFilmOrderNotifyDTO(dbFilmOrderNotifyDTO);
         filmOrderJsonData.setFilmOrderNotifyDTO(dbFilmOrderNotifyDTO);
         filmOrder.setOrderDataJson(JSONObject.toJSONString(filmOrderJsonData));
         filmOrder.setOrderDataJson(JSONObject.toJSONString(filmOrderJsonData));
-        UserInfo student = SecurityUtils.getLoginUser().getStudent();
-        Long id = student.getId();
-        String refundCode = getOrderCode(id);
+        //UserInfo student = SecurityUtils.getLoginUser().getStudent();
+        String refundCode = getOrderCode(null);
         //如果回调回来的订单关闭,则调用退款
         //如果回调回来的订单关闭,则调用退款
         if ("ORDER_CLOSE".equals(filmOrderNotifyDTO.getEventName())){
         if ("ORDER_CLOSE".equals(filmOrderNotifyDTO.getEventName())){
         threadPoolTaskExecutor.execute(new Runnable() {
         threadPoolTaskExecutor.execute(new Runnable() {