package com.yeshi.buwan.controller;
|
|
import com.alipay.api.AlipayApiException;
|
import com.alipay.api.internal.util.AlipaySignature;
|
import com.alipay.api.response.AlipayTradeQueryResponse;
|
import com.yeshi.buwan.domain.vip.VIPOrderRecord;
|
import com.yeshi.buwan.exception.vip.VIPException;
|
import com.yeshi.buwan.service.inter.vip.VIPService;
|
import com.yeshi.buwan.util.RedisManager;
|
import com.yeshi.buwan.util.StringUtil;
|
import com.yeshi.buwan.util.user.VipUtil;
|
import com.yeshi.buwan.util.vip.VIPOrderUtil;
|
import org.json.JSONObject;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.yeshi.utils.alipay.AlipayH5PayUtil;
|
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.math.BigDecimal;
|
import java.util.Date;
|
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 RedisManager redisManager;
|
|
@Resource
|
private VIPService vipService;
|
|
@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<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 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)) {
|
AlipayTradeQueryResponse res = AlipayH5PayUtil.queryOrder(app, outTradeNo, null);
|
//支付成功
|
if (res.isSuccess() && "TRADE_SUCCESS".equalsIgnoreCase(res.getTradeStatus())) {
|
String id = VIPOrderUtil.getIdFromOutOrderNo(outTradeNo);
|
try {
|
vipService.paySuccess(id, VIPOrderRecord.PAY_WAY_ALIPAY, new BigDecimal(res.getPayAmount()), new Date());
|
} catch (VIPException e) {
|
e.printStackTrace();
|
logger.error("支付成功回调出错 id:{}", id, e);
|
}
|
}
|
}
|
response.getWriter().print("success");
|
response.getWriter().close();
|
}
|
logger.info("签名是否正确:" + right);
|
} catch (AlipayApiException | IOException e) {
|
e.printStackTrace();
|
}
|
|
|
}
|
|
|
}
|