admin
2021-11-19 7511509c68bd2892aad48a0612d497387660214d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package com.yeshi.location.app.controller;
 
import com.alipay.api.AlipayApiException;
import com.alipay.api.internal.util.AlipaySignature;
import com.google.gson.Gson;
import com.yeshi.location.app.service.inter.vip.OrderService;
import com.yeshi.location.app.utils.vip.VIPOrderUtil;
import com.yeshi.location.app.utils.vip.VipUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.yeshi.utils.StringUtil;
import org.yeshi.utils.entity.alipay.AlipayAppInfo;
 
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
 
@Controller
@RequestMapping("alipay")
public class AlipayController {
    Logger logger = LoggerFactory.getLogger(AlipayController.class);
 
    @Resource
    private RedisTemplate<String, String> redisTemplate;
 
    @Resource
    private OrderService orderService;
 
    @RequestMapping("printPayForm")
    public void printPayForm(String formId, HttpServletResponse response) {
        String form = redisTemplate.opsForValue().get(formId);
        if (StringUtil.isNullOrEmpty(form)) {
            form = "出错了,请稍后再试";
        }
 
        response.setContentType("text/html;charset=GBK");
        try {
            response.getWriter().write(form);//直接将完整的表单html输出到页面
            response.getWriter().flush();
            response.getWriter().close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
 
    @RequestMapping("pay")
    public void pay(HttpServletRequest request, HttpServletResponse response) {
        try {
            request.setCharacterEncoding("GBK");
            response.setCharacterEncoding("GBK");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
 
        Map<String, String[]> params = request.getParameterMap();
        Map<String, String> map = new HashMap<>();
        for (Iterator<String> its = params.keySet().iterator(); its.hasNext(); ) {
            String key = its.next();
            map.put(key, params.get(key)[0]);
        }
        String outTradeNo = map.get("out_trade_no") + "";
        String tradeStatus = map.get("trade_status") + "";
 
 
        logger.info("支付回调:" + new Gson().toJson(map));
        AlipayAppInfo app = VipUtil.getAlipayApp();
 
        try {
            boolean right = AlipaySignature.rsaCheckV1(map, app.getAlipayPublicKey(), "GBK", map.get("sign_type"));
            if (right) {
                //支付成功
                if ("TRADE_SUCCESS".equalsIgnoreCase(tradeStatus)) {
                    Long id = VIPOrderUtil.getIdFromOutOrderNo(outTradeNo);
                    logger.info("订单ID:{}", id);
                    orderService.checkOrderPayState(id);
                }
                response.getWriter().print("success");
                response.getWriter().close();
            }
            logger.info("签名是否正确:" + right);
        } catch (AlipayApiException | IOException e) {
            e.printStackTrace();
        }
 
 
    }
 
 
}