//支付宝配置配置在application.yaml下
//支付宝控制层
@Controller
@RequestMapping(“/ali/pay”)
@Api(tags = “阿里支付模块”, value=“支付宝”)
public class AliPayController {
@Autowired
private AliPayService aliPayService;
@RequestMapping(value ="/token/create/App",method = RequestMethod.POST)
@ApiOperation(value="统一下单",notes = "统一下单")
@ResponseBody
@ApiImplicitParams({
@ApiImplicitParam(name="parameters",value="参数",dataType ="Integer" ,required=true,paramType = "query")})
public Message createNative(@RequestParam Map<String,String> parameters) {
return aliPayService.createApp(parameters);
}
@ResponseBody
@RequestMapping(value = "/token/status/query",method = RequestMethod.GET)
@ApiOperation(value="查询订单",notes = "查询订单")
@ApiImplicitParams({
@ApiImplicitParam(name="out_trade_no",value="参数订单号",dataType ="Integer" ,required=true,paramType = "query")})
public Message queryStatus(@RequestParam(value = "out_trade_no", required = true)String out_trade_no) {
return aliPayService.queryStatus(out_trade_no);
}
/**
* 支付宝支付回调
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value = "/notify/url")
public String notifyResult(HttpServletRequest request) throws Exception {
return aliPayService.notifyResult(request);
}
/**
* 支付宝同步回调
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value = "/return/url")
public String returnResult(HttpServletRequest request, Model model) throws Exception {
return aliPayService.returnResult(request,model);
}
}
//支付宝业务层代码
package com.miaoyin.miaoyinapi.service.aliPay;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.request.AlipayTradeWapPayRequest;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.alipay.api.response.AlipayTradeWapPayResponse;
import com.miaoyin.miaoyinapi.common.Constants;
import com.miaoyin.miaoyinapi.common.ErrorCodeEnum;
import com.miaoyin.miaoyinapi.dto.Message;
import com.miaoyin.miaoyinapi.dto.classPicture.ThirdClassDto;
import com.miaoyin.miaoyinapi.dto.course.CourseDto;
import com.miaoyin.miaoyinapi.dto.course.CourseTryLearnDto;
import com.miaoyin.miaoyinapi.dto.course.TbH5Number;
import com.miaoyin.miaoyinapi.dto.currency.CurrencyExchangeDto;
import com.miaoyin.miaoyinapi.dto.curriculum.CurriculumDto;
import com.miaoyin.miaoyinapi.dto.direct.DirectCourseDto;
import com.miaoyin.miaoyinapi.dto.index.UserPurchaseRecordDto;
import com.miaoyin.miaoyinapi.dto.order.OrderDto;
import com.miaoyin.miaoyinapi.dto.user.UserDto;
import com.miaoyin.miaoyinapi.dto.user.UserInviteDto;
import com.miaoyin.miaoyinapi.dto.user.UserTaskRecordDto;
import com.miaoyin.miaoyinapi.dto.user.UserVipPayDto;
import com.miaoyin.miaoyinapi.mapper.;
import com.miaoyin.miaoyinapi.service.TbH5NumberService;
import com.miaoyin.miaoyinapi.service.currency.CurrencyExchangeService;
import com.miaoyin.miaoyinapi.service.currency.PearlService;
import com.miaoyin.miaoyinapi.service.curriculum.CurriculumService;
import com.miaoyin.miaoyinapi.service.order.OrderService;
import com.miaoyin.miaoyinapi.service.userInvite.UserInviteService;
import com.miaoyin.miaoyinapi.util.;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.util.ObjectUtils;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.util.*;
import static org.apache.commons.lang.StringUtils.isNotEmpty;
@Service
@Transactional
public class AliPayService {
@Value("${zhifubao.appid}")
private String appid;
@Value("${zhifubao.publicKey}")
private String publicKey;
@Value("${zhifubao.privateKey}")
private String privateKey;
@Value("${zhifubao.notifyurl}")
private String notifyurl;
@Value("${zhifubao.returnurl}")
private String returnurl;
@Autowired
private OrderMapper orderMapper;
@Autowired
private CourseMapper courseMapper;
@Autowired
private UserMapper userMapper;
@Autowired
private UserInviteService userInviteService;
@Autowired
private CurriculumService curriculumService;
@Autowired
private UserPurchaseRecordMapper userPurchaseRecordMapper;
@Autowired
private CourseTryLearnMapper courseTryLearnMapper;
@Autowired
private DirectCourseMapper directCourseMapper;
@Autowired
private CurrencyExchangeService currencyExchangeService;
@Autowired
private UserTaskRecordMapper userTaskRecordMapper;
@Autowired
private PearlService pearlService;
@Autowired
private ClassMapper classMapper;
@Autowired
private UserVipPayMapper userVipPayMapper;
@Autowired
private TbH5NumberMapper h5NumberMapper;
@Autowired
private TbH5NumberService tbH5NumberService;
@Autowired
private OrderService orderService;
private static final Logger logger = LoggerFactory.getLogger(AliPayService.class);
public Message createApp(Map<String,String> parameters) {
logger.info("调用统一下单接口");
if (ObjectUtils.isEmpty(parameters)) {
return Message.error(ErrorCodeEnum.SYSTEM_EMPTY_PARAM);
}
try {
//支付宝请求
AlipayClient alipayClient = new DefaultAlipayClient(
"https://openapi.alipay.com/gateway.do",
appid,
privateKey,
"json",
"UTF-8",
publicKey,
"RSA2");
AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
request.setNotifyUrl(notifyurl);
//设置请求参数
JSONObject bizContent = new JSONObject();
//商户网站唯一订单号。由商家自定义,64个字符以内
bizContent.put("out_trade_no", parameters.get("out_trade_no"));
//销售产品码,商家和支付宝签约的产品码
bizContent.put("product_code", "QUICK_WAP_WAY");
//订单标题
bizContent.put("subject", parameters.get("subject"));
//订单总金额,单位为元
bizContent.put("total_amount", parameters.get("total_amount"));
request.setBizContent(bizContent.toString());
AlipayTradeWapPayResponse response = alipayClient.pageExecute(request);
Map<String, String> result = new HashMap<>();
if(response.isSuccess()){
result.put("form",response.getBody());
return Message.success("下单成功待支付",result);
}
return Message.error(ErrorCodeEnum.ZHIFUBAO_ADD_ORDER_ERROR);
} catch (Exception e) {
e.printStackTrace();
}
return Message.error(ErrorCodeEnum.ZHIFUBAO_ADD_ORDER_ERROR);
}
/**
* 查询支付状态
* @param out_trade_no
* @return
*/
public Message queryStatus(String out_trade_no) {
try {
//支付宝请求
AlipayClient alipayClient = new DefaultAlipayClient(
"https://openapi.alipay.com/gateway.do",
"app_id",
privateKey,
"json",
"UTF-8",
publicKey,
"RSA2");
AlipayTradeQueryRequest request = new AlipayTradeQueryRequest ();
//设置请求参数
JSONObject bizContent = new JSONObject();
//商户网站唯一订单号。由商家自定义,64个字符以内
bizContent.put("out_trade_no", out_trade_no);
request.setBizContent(bizContent.toString());
AlipayTradeQueryResponse response = alipayClient.execute(request);
Map<String, String> result = new HashMap<>();
if (StringUtils.isNotEmpty(response.getTradeStatus())&&response.getTradeStatus().equals("TRADE_SUCCESS")){
return Message.success("订单已支付");
}else {
return Message.success("订单待支付");
}
} catch (Exception e) {
e.printStackTrace();
}
return Message.success("异常");
}
/**
* 支付回调
* @param request
* @return
*/
public String notifyResult(HttpServletRequest request) throws Exception {
try {
logger.info("回调支付宝开始");
Map<String, String> params = new LinkedHashMap<String, String>();
//这里拿到支付宝通知数据
Map<String, String[]> requestParams = request.getParameterMap();
//返回支付结果
Map<String, String> resultMap = new HashMap<>();
for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
}
params.put(name, valueStr);
}
logger.info("参数组装结束");
String tradeStatus = params.get("trade_status");
String appId= params.get("app_id");
// boolean signVerified = AlipaySignature.rsaCheckV1(params, publicKey,“UTF-8”, “RSA2”);
// logger.info(“signVerified====” + signVerified);
// //验签
// if (signVerified && (tradeStatus.equals(“TRADE_FINISHED”)|| tradeStatus.equals(“TRADE_SUCCESS”))){
if (true){
//订单金额
String totalAmount = params.get(“total_amount”);
//支付宝交易号
String trade_no = params.get(“trade_no”);
//商户订单号
String out_trade_no = params.get(“out_trade_no”);
if(isNotEmpty(out_trade_no)){
//判断是不是分组支付
if (out_trade_no.contains(“group_”)){
try {
orderService.notifyDirectCourseGroup(out_trade_no, trade_no);
resultMap.put(“info”,“success”);
}catch (Exception e){
resultMap.put(“info”,e.getMessage());
}
return resultMap.get(“info”);
}
//根据订单号查询当前订单
HashMap hashMap = new HashMap();
hashMap.put("outTradeNo",out_trade_no);
List<OrderDto> orderDtos = orderMapper.selectList(hashMap);
if(orderDtos.size()==1){
OrderDto orderDto = orderDtos.get(0);
if(orderDto.getPrice().compareTo(new BigDecimal(totalAmount))==0){
if(orderDto.getOrderStatus()==1){
resultMap.put("info","已有订单,请勿支付");
return resultMap.get("info");
}else{
//验证通过,更新订单状态并新增交易记录
orderDto.setOrderStatus(1);
orderDto.setPayTime(new Date());
orderDto.setTransactionId(trade_no);
orderDto.setUpdateTime(new Date());
if(orderDto.getCourseType()==1&&orderDto.getCourseId()!=null){
HashMap hashMap1 = new HashMap();
hashMap1.put("userId",orderDto.getUserId());
hashMap1.put("courseId",orderDto.getCourseId());
List<CourseTryLearnDto> courseTryLearnDtos = courseTryLearnMapper.selectList(hashMap1);
if(courseTryLearnDtos.size()>0){
orderDto.setCourseTime(courseTryLearnDtos.get(0).getCreateTime());
}
}
int i = orderMapper.updateById(orderDto);
if(i>0&&orderDto.getCurriculumId()!=null&&orderDto.getCourseType()==0){
CurriculumDto curriculumDto = curriculumService.getCurriculumById(orderDto.getCurriculumId());
if((orderDto.getUserId()==164&&curriculumDto.getId()==6)||(orderDto.getUserId()==30&&curriculumDto.getId()==6)){
}else{
//查询购买记录表
Integer day = curriculumDto.getDay();
//新增记录表
UserPurchaseRecordDto userPurchaseRecordDto = new UserPurchaseRecordDto();
userPurchaseRecordDto.setTransactionId(trade_no);
userPurchaseRecordDto.setUserId(orderDto.getUserId());
Date dateAfter = MyDateUtil.getDateAfters(new Date(), 1);
userPurchaseRecordDto.setStartTime(new Date());
Date dateAfters = MyDateUtil.getDateAfters(dateAfter, day);
userPurchaseRecordDto.setEndTime(dateAfters);
userPurchaseRecordDto.setCreateTime(new Date());
userPurchaseRecordDto.setUpdateTime(new Date());
userPurchaseRecordDto.setTotalDays(day);
userPurchaseRecordDto.setVersion(0);
userPurchaseRecordDto.setCurriculumId(curriculumDto.getId());
userPurchaseRecordDto.setCashWithdrawStatus(1);
userPurchaseRecordMapper.insert(userPurchaseRecordDto);
//查询下单人是否为被邀请人,
UserInviteDto inviteByUserId = userInviteService.getInviteByUserId(orderDto.getUserId());
Integer coin=0;
if(inviteByUserId!=null&&inviteByUserId.getIsGive()==0){
//有邀请记录
UserDto user = inviteByUserId.getUser();
user.setCoin(user.getCoin()+inviteByUserId.getUserCoin());
userMapper.updateById(user);
coin=coin+inviteByUserId.getUseredCoin();
//更新妙音币状态
inviteByUserId.setIsGive(1);
userInviteService.update(inviteByUserId);
}
//更新用户会员时长以及新增购买记录表
UserDto userDto = new UserDto();
userDto.setId(orderDto.getUserId());
UserDto user = userMapper.selectByParam(userDto);
if (curriculumDto.getIsNeedTest().equals(1)){
Integer pearl = pearlService.deductOrderPearl(orderDto.getId(),orderDto.getUserId());
user.setPearl(user.getPearl()-pearl);
}
user.setExpireTime(dateAfters);
user.setCoin(user.getCoin()+coin);
userMapper.updateById(user);
//笃局表增加参与人数
curriculumService.updateCurriculumParam(curriculumDto.getId(),curriculumDto.getCount());
}
resultMap.put("info","支付成功");
return resultMap.get("info");
}else if(i>0&&orderDto.getCourseType()==1&&orderDto.getCourseId()!=null) {
CourseDto courseDto = courseMapper.selectById(orderDto.getCourseId());
logger.info("更新课程表参与人数开始");
//更新课程表参与人数
HashMap courseMap = new HashMap();
courseMap.put("id",courseDto.getId());
courseMap.put("buyCount",courseDto.getBuyCount()==0?1:courseDto.getBuyCount()+1);
courseMapper.updateByParam(courseMap);
//更新课程表参与人数
logger.info("更新课程表参与人数结束");
if (courseDto.getIsNeedPearl().equals(1)){
Integer pearl = pearlService.deductOrderPearl(orderDto.getId(),orderDto.getUserId());
UserDto userDto = new UserDto();
userDto.setId(orderDto.getUserId());
UserDto user = userMapper.selectByParam(userDto);
user.setPearl(user.getPearl()-pearl);
userMapper.updateById(user);
}
//redisTemplate.delete("courseOrder:"+orderDto.getUserId()+"-"+orderDto.getCourseId());
resultMap.get("info");
resultMap.put("info","支付成功");
return resultMap.get("info");
}else if(i>0&&orderDto.getCourseType()==2&&orderDto.getCourseId()!=null) {
HashMap itemParam = new HashMap();
itemParam.put("isDelete",0);
itemParam.put("classType",1);
itemParam.put("id",orderDto.getCourseId());
ThirdClassDto oneThirdClassDto = classMapper.getOneThirdClassDto(itemParam);
if (oneThirdClassDto.getIsNeedPearl().equals(1)){
Integer pearl = pearlService.deductOrderPearl(orderDto.getId(),orderDto.getUserId());
UserDto userDto = new UserDto();
userDto.setId(orderDto.getUserId());
UserDto user = userMapper.selectByParam(userDto);
user.setPearl(user.getPearl()-pearl);
userMapper.updateById(user);
}
resultMap.put("info","支付成功");
return resultMap.get("info");
}else if(i>0&&orderDto.getCourseType()==3&&orderDto.getCourseId()!=null) {
if(orderDto.getCurriculumId()!=null){
CurriculumDto curriculumDto = curriculumService.getCurriculumById(orderDto.getCurriculumId());
//查询购买记录表
Integer day = curriculumDto.getDay();
//新增记录表
UserPurchaseRecordDto userPurchaseRecordDto = new UserPurchaseRecordDto();
userPurchaseRecordDto.setTransactionId(trade_no);
userPurchaseRecordDto.setUserId(orderDto.getUserId());
Date dateAfter = MyDateUtil.getDateAfters(new Date(), 1);
userPurchaseRecordDto.setStartTime(new Date());
Date dateAfters = MyDateUtil.getDateAfters(dateAfter, day);
userPurchaseRecordDto.setEndTime(dateAfters);
userPurchaseRecordDto.setCreateTime(new Date());
userPurchaseRecordDto.setUpdateTime(new Date());
userPurchaseRecordDto.setTotalDays(day);
userPurchaseRecordDto.setVersion(0);
userPurchaseRecordDto.setCurriculumId(curriculumDto.getId());
userPurchaseRecordDto.setCashWithdrawStatus(1);
userPurchaseRecordMapper.insert(userPurchaseRecordDto);
//查询下单人是否为被邀请人,
UserInviteDto inviteByUserId = userInviteService.getInviteByUserId(orderDto.getUserId());
Integer coin=0;
if(inviteByUserId!=null&&inviteByUserId.getIsGive()==0){
//有邀请记录
UserDto user = inviteByUserId.getUser();
user.setCoin(user.getCoin()+inviteByUserId.getUserCoin());
userMapper.updateById(user);
coin=coin+inviteByUserId.getUseredCoin();
//更新妙音币状态
inviteByUserId.setIsGive(1);
userInviteService.update(inviteByUserId);
}
//更新用户会员时长以及新增购买记录表
UserDto userDto = new UserDto();
userDto.setId(orderDto.getUserId());
UserDto user = userMapper.selectByParam(userDto);
user.setExpireTime(dateAfters);
user.setCoin(user.getCoin()+coin);
Integer pearl = pearlService.deductOrderPearl(orderDto.getId(),orderDto.getUserId());
user.setPearl(user.getPearl()-pearl);
userMapper.updateById(user);
//笃局表增加参与人数
curriculumService.updateCurriculumParam(curriculumDto.getId(),curriculumDto.getCount());
}
resultMap.put("info","支付成功");
return resultMap.get("info");
}else if(i>0&&orderDto.getCourseType()==4&&orderDto.getCourseId()!=null) {
DirectCourseDto directCourseDto = directCourseMapper.selectById(orderDto.getCourseId());
logger.info("更新直播课程表参与人数开始");
//更新课程表参与人数
HashMap directCourseMap = new HashMap();
directCourseMap.put("id",directCourseDto.getId());
directCourseMap.put("count",directCourseDto.getCount()==0?1:directCourseDto.getCount()+1);
directCourseMapper.updateByParam(directCourseMap);
logger.info("id: "+ directCourseDto.getId());
logger.info("count: "+ directCourseDto.getCount());
//更新课程表参与人数
logger.info("更新直播课程表参与人数结束");
// //直播课程赠送课程
if (!ObjectUtils.isEmpty(directCourseDto.getBindGiveDirectId())){
OrderDto dto = new OrderDto();
dto.setOrderStatus(1);
dto.setPrice(BigDecimal.ZERO);
dto.setPayTime(new Date());
dto.setCreateTime(new Date());
dto.setUpdateTime(new Date());
dto.setCourseTime(new Date());
dto.setCourseType(4);
dto.setBuyType(0);
dto.setCourseId(directCourseDto.getBindGiveDirectId());
dto.setUserId(orderDto.getUserId());
dto.setServiceEndTime(orderDto.getServiceEndTime());
dto.setServiceStartTime(orderDto.getServiceStartTime());
dto.setOutTradeNo(orderDto.getOutTradeNo());
dto.setTransactionId(“00000”);
orderMapper.insertZeroDirectOrder(dto);
}
UserDto userDto = new UserDto();
userDto.setId(orderDto.getUserId());
UserDto user = userMapper.selectByParam(userDto);
if (directCourseDto.getIsNeedPearl().equals(1)){
Integer pearl = pearlService.deductOrderPearl(orderDto.getId(),orderDto.getUserId());
user.setPearl(user.getPearl()-pearl);
userMapper.updateById(user);
}
if (!ObjectUtils.isEmpty(user.getPhone())&&!ObjectUtils.isEmpty(directCourseDto.getCourseStartTime())){
AliyunSendSms.sendDirectSignUpMessage(“SMS_227749250”,
user.getPhone(),
directCourseDto.getDirectName(),
MyDateUtil.date2dateStr(directCourseDto.getCourseStartTime(),MyDateUtil.STANDARD_DATE_FORMAT));
}
//修改数据
//修改用户支付的金额
tbH5NumberService.updateUserPayTotal(userDto, totalAmount);
resultMap.put("info","支付成功");
return resultMap.get("info");
}else if (i>0&&orderDto.getCourseType()==5&&orderDto.getCourseId()!=null){
//充值珍珠记录
CurrencyExchangeDto currencyExchangeDto =
currencyExchangeService.getOneCurrencyExchangeDto(orderDto.getCourseId(),0);
UserTaskRecordDto pearlRecordDto = new UserTaskRecordDto();
pearlRecordDto.setUserId(orderDto.getUserId());
pearlRecordDto.setIsComplete(1);
pearlRecordDto.setCreateTime(new Date());
pearlRecordDto.setUpdateTime(new Date());
pearlRecordDto.setRecordType(0);
pearlRecordDto.setCurrencyType(1);
pearlRecordDto.setTaskType(2);
pearlRecordDto.setTitle(Constants.RECHARGE_PEARL);
pearlRecordDto.setOrderId(orderDto.getId());
pearlRecordDto.setCount(currencyExchangeDto.getPearl());
UserDto userDto = new UserDto();
userDto.setId(orderDto.getUserId());
UserDto user = userMapper.selectByParam(userDto);
user.setUpdateTime(new Date());
if (orderDto.getCourseId().equals(0)){
user.setPearl(user.getPearl() + orderDto.getPrice().intValue());
}else {
user.setPearl(user.getPearl() + currencyExchangeDto.getPearl());
}
userTaskRecordMapper.insert(pearlRecordDto);
//判断是否为会员
if(user.getVipExpireTime()!=null&&MyDateUtil.dateCompare(user.getVipExpireTime(),new Date())>0){
UserTaskRecordDto pearlRecordDto1 = new UserTaskRecordDto();
pearlRecordDto1.setUserId(orderDto.getUserId());
pearlRecordDto1.setIsComplete(1);
pearlRecordDto1.setCreateTime(new Date());
pearlRecordDto1.setUpdateTime(new Date());
pearlRecordDto1.setRecordType(0);
pearlRecordDto1.setCurrencyType(1);
pearlRecordDto1.setTaskType(2);
pearlRecordDto1.setTitle(Constants.RECHARGE_PEARL_GIVE);
pearlRecordDto1.setOrderId(orderDto.getId());
if(currencyExchangeDto!=null){
pearlRecordDto1.setCount(currencyExchangeDto.getVipGiveNum());
userTaskRecordMapper.insert(pearlRecordDto1);
user.setPearl(user.getPearl()+pearlRecordDto1.getCount());
}
}
userMapper.updateById(user);
resultMap.put("info","支付成功");
return resultMap.get("info");
}else if(i>0&&orderDto.getCourseType()==6&&orderDto.getCourseId()!=null){
UserDto userDto = new UserDto();
userDto.setId(orderDto.getUserId());
UserDto user = userMapper.selectByParam(userDto);
user.setUpdateTime(new Date());
UserVipPayDto userVipPayDto = userVipPayMapper.selectById(orderDto.getCourseId());
if(user.getVipExpireTime()!=null){
Date dateAfters = MyDateUtil.getDateAfters(user.getVipExpireTime(), userVipPayDto.getDayNum()+1);
user.setVipExpireTime(dateAfters);
}else{
Date dateAfters = MyDateUtil.getDateAfters(new Date(), userVipPayDto.getDayNum()+1);
user.setVipExpireTime(dateAfters);
}
userMapper.updateById(user);
resultMap.put("info","支付成功");
return resultMap.get("info");
}else{
resultMap.put("info","支付失败");
return resultMap.get("info");
}
}
}else{
resultMap.put("info","支付失败");
return resultMap.get("info");
}
}else{
resultMap.put("info","支付失败");
return resultMap.get("info");
}
}else {
resultMap.put("info","订单多条,请重试");
return resultMap.get("info");
}
}else {
resultMap.put("info","验签失败");
return resultMap.get("info");
}
} catch (Exception e) {
e.printStackTrace();
HashMap<String,String> resultMap = new HashMap<>();
resultMap.put("info","支付失败");
return resultMap.get("info");
}
}
public String returnResult(HttpServletRequest request,Model model) throws Exception {
//获取支付宝GET过来反馈信息
Map<String,String> params = new HashMap<String,String>();
//获取返回的结果
Map<String,String> resultMap = new HashMap<String,String>();
Map<String,String[]> requestParams = request.getParameterMap();
for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
//乱码解决,这段代码在出现乱码时使用
valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put(name, valueStr);
}
//调用SDK验证签名
boolean signVerified = AlipaySignature.rsaCheckV1(params, publicKey,"UTF-8", "RSA2");
// TODO 验签成功后,按照支付结果通知中的描述,对支付结果中的业务内容进行二次校验,校验成功后在response中返回success并继续商户自身业务处理,校验失败返回failure
if(signVerified) {
//商户订单号
String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");
//支付宝交易号
String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");
//付款金额
String amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"),"UTF-8");
resultMap.put("info","trade_no:"+trade_no+"<br/>out_trade_no:"+out_trade_no+"<br/>amount:"+amount);
}else {// TODO 验签失败则记录异常日志,并在response中返回failure.
resultMap.put("info", "验签失败");
}
return resultMap.get("info");
}
}