|
- package com.iformall.controller;
-
- import com.alibaba.fastjson.JSONObject;
- import com.github.binarywang.wxpay.v3.util.AesUtils;
- import com.iformall.annotation.AuthIgnore;
- import com.iformall.domain.po.WxAppinfo;
- import com.iformall.domain.po.WxPayAccount;
- import com.iformall.enums.EnumAppPlat;
- import com.iformall.service.ProductOrderService;
- import com.iformall.service.WxAppinfoService;
- import com.iformall.service.WxPayAccountService;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import org.jdom2.JDOMException;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.*;
-
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.util.HashMap;
- import java.util.Map;
-
-
- @RestController
- @RequestMapping("/payCallBack")
- @Api(description = "支付回调")
- public class CallbackPayController extends BaseController {
- private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
- @Autowired
- private WxAppinfoService wxAppinfoService;
-
- @Autowired
- private WxPayAccountService wxPayAccountService;
-
- @Autowired
- private ProductOrderService productOrderService;
-
- @AuthIgnore
- @ApiOperation("支付回调")
- @PostMapping(value = "{projectType}/pay/v3")
- public void _payV3Notify(@PathVariable Integer projectType,@RequestBody Map<String, Object> paranMap, HttpServletResponse response) {
- logger.debug("[" + getIpAddr() + "] CallbackPayController::_payV3Notify");
- logger.info("微信支付回调结果通知{}"+JSONObject.toJSONString(paranMap));
- /**
- * {"id":"4330b030-788f-5067-8c8a-69ee373d43ad","create_time":"2023-08-28T18:44:56+08:00","resource_type":"encrypt-resource","event_type":"TRANSACTION.SUCCESS","summary":"支付成功","resource":{"original_type":"transaction","algorithm":"AEAD_AES_256_GCM","ciphertext":"PneNTwSVDoirBNQsJstB/yX1dNMupj7uKQVEVfLOoyMSCqKh+KMwIdanidbcs6OnSy1Xmx4MploMaQ5rSg66sFDQ9nDuSVc4S/I3OVflu1l7z9vR+FJiztpTqhr/ekeNz9VivtqPPtn6N3dCyZb6iCEwnXT+TEB8SBZe4bPSPFGhB/MB9w1ZpqP14OvMDUnzKM15mdex6wmAJH6qIbd1aH3jrW/Lv7KeyfXEYrRDljq2Za6476UQxeAcsR3JA6QpWwrhYxpKFQEHuGMdiVC1KvQsP3+JUWOKSiQQ1r5upTACPI8n5B/kOeXJA8MnTgY/7lZiA6ys2dt8jqxzL8IlDracnlwvsiRAuXjRjcX6pYCz4q0HwIYb1nHXE+iRcSGm8h+xFFsnhGgxrhEVz6ARhK6ZtKtibCv7Ll/a/d090FBKtVXzCWB6cLMMmfrIwLQFqiFUtb6zsV/zusAJdwHZt3LmtgGahoV3+UPTnbztEAp5IJGz2imGPTsk7QpvKWQknf5FM/Z1fhr/vb+pZV5NGBZ+6l/mI8isA4HtljzNHU/PuKCGO8uWu6QFevgAftGGww==","associated_data":"transaction","nonce":"Hrcahgdp1eO6"}}
- */
-
- try{
- WxAppinfo appInfo = wxAppinfoService.getProjectCAppInfoFromRedis(projectType, EnumAppPlat.WX.getCode());
- WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(appInfo.getPayId());
-
- Map<String, String> resource = (Map<String, String>) paranMap.get("resource");
- String associatedData = resource.get("associated_data");
- String nonce = resource.get("nonce");
- String ciphertext = resource.get("ciphertext");
-
- //todo 解密回调数据
- String decryptString = AesUtils.decryptToString(associatedData, nonce, ciphertext, payAccount.getMerchantApiv3Key());
- logger.info("微信支付回调解密数据{}"+decryptString);
- JSONObject jsonObject = JSONObject.parseObject(decryptString);
- String out_order_no = jsonObject.getString("out_trade_no");
- //todo 处理支付数据
-
- }catch(Exception e){
-
- }
- response.setStatus(200);
- }
-
- @AuthIgnore
- @ApiOperation("支付回调")
- @PostMapping(value = "/ttNotify")
- public Map<String,Object> _ttNotify(@RequestBody Map<String, Object> paranMap, HttpServletRequest request, HttpServletResponse response) {
- logger.debug("[" + getIpAddr() + "] CallbackPayController::_ttNotify");
- Map<String,Object> resultMap = new HashMap<>();
- logger.info("抖音支付回调结果通知{}"+JSONObject.toJSONString(paranMap));
- /**
- * ----效验数据来源合法
- */
- try{
- String msg = (String) paranMap.get("msg");
- String type = (String) paranMap.get("type");
-
- Map<String, Object> pMap = JSONObject.parseObject(msg, Map.class);
- String appid = (String) pMap.get("app_id");
- if("payment".equals(type)){
- String out_order_no = (String)pMap.get("cp_orderno");
- //todo 处理订单支付状态
-
- }
- }catch(Exception e){
-
- }
- return resultMap;
- }
-
- }
|