package com.yeshi.buwan.controller; import com.alipay.api.AlipayApiException; import com.alipay.api.internal.util.AlipaySignature; import com.yeshi.buwan.service.inter.order.OrderService; import com.yeshi.buwan.util.RedisManager; import com.yeshi.buwan.util.StringUtil; import com.yeshi.buwan.util.log.LoggerUtil; import com.yeshi.buwan.util.user.VipUtil; import com.yeshi.buwan.util.vip.VIPOrderUtil; import org.json.JSONObject; import org.slf4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; 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 = LoggerUtil.getVIPLogger(); @Resource private RedisManager redisManager; @Resource private OrderService orderService; @RequestMapping("printPayForm") public void printPayForm(String formId, HttpServletResponse response) { String form = redisManager.getCommonString(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 params = request.getParameterMap(); Map map = new HashMap<>(); for (Iterator 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 JSONObject(map).toString()); AlipayAppInfo app = VipUtil.getAlipayApp(); try { boolean right = AlipaySignature.rsaCheckV1(map, app.getAlipayPublicKey(), "GBK", map.get("sign_type")); if (right) { //支付成功 if ("TRADE_SUCCESS".equalsIgnoreCase(tradeStatus)) { String 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(); } } }