JAVA全系列 教程
3762个小节阅读:7095.4k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
下载花生壳,配置回调地址
xxxxxxxxxx
import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayApiException;
import com.alipay.api.internal.util.AlipaySignature;
import com.bjsxt.pay.AlipayConfig;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
/**
* @Author:
*/
@RestController
@RequestMapping("pay")
public class PayController {
//输出日志
static Log log = LogFactory.getLog("PayController");
@PostMapping("callback/{orderId}")
public void callback(@PathVariable String orderId, HttpServletRequest request) {
Map<String, String> parameterMap = this.getParameterMap(request);
String trade_status = parameterMap.get("trade_status");
if ("TRADE_SUCCESS".equals(trade_status)) {
try {
//验证是否为支付宝发来的信息
boolean singVerified = AlipaySignature.rsaCheckV1(parameterMap, AlipayConfig.alipay_public_key, AlipayConfig.charset, AlipayConfig.sign_type);
System.out.println(singVerified);//只有支付宝调用我们系统的接口才能去更新系统订单状态
log.info("验证签名结果{}:" + singVerified);
String refund_fee = parameterMap.get("refund_fee");
if (StringUtils.isNotBlank(refund_fee)) {
//说明是退费
System.out.println("退费成功:退费的子订单ID为:" + parameterMap.get("out_biz_no"));
//更新订单状态
} else {
//说明支付
System.out.println("收费成功,平台ID" + parameterMap.get("trade_no"));
}
System.out.println(JSON.toJSON(parameterMap));
} catch (AlipayApiException e) {
e.printStackTrace();
log.error(orderId + "验证签名出现异常");
}
}else if("WAIT_BUYER_PAY".equals(trade_status)){
System.out.println("二维码已扫描,等待支付");
}
}
/**
* 获取request中的参数集合转Map
* Map<String,String> parameterMap = RequestUtil.getParameterMap(request)
*
* @param request
* @return
*/
public Map<String, String> getParameterMap(HttpServletRequest request) {
Map<String, String> map = new HashMap<>();
Enumeration<String> paramNames = request.getParameterNames();
while (paramNames.hasMoreElements()) {
String paramName = paramNames.nextElement();
String[] paramValues = request.getParameterValues(paramName);
if (paramValues.length == 1) {
String paramValue = paramValues[0];
if (paramValue.length() != 0) {
map.put(paramName, paramValue);
}
}
}
return map;
}
}
当用户扫码之后会回调一次,支付成功之后会回调一次