支付宝java代码_支付宝回调JAVA版代码
支付宝回调:
1 //这个是支付宝回调的信息
2 @RequestMapping("alipay_callback.do")
3 @ResponseBody
4 public Object alipayCallback(HttpServletRequest request){
5 Map params = Maps.newHashMap();
6 //getParameterMap()一般多用于接收前台表单多参数传输的数据
7 //支付宝的回调都是把信息放到request里面
8 Map requestParams = request.getParameterMap();
9 //keyset()是获取所有的key值,iterator()是迭代遍历
10 for(Iterator iter = requestParams.keySet().iterator();iter.hasNext();){
11 String name = (String)iter.next();
12 //这里把key放到数组里面
13 String[] values = (String[]) requestParams.get(name);
14 String valueStr = "";
15 //这个for循环的尊用就是把上面那个String中的值都遍历一遍
16 for(int i = 0 ; i
17 //这个是三元运算符
18 valueStr = (i == values.length -1)?valueStr + values[i]:valueStr + values[i]+",";
19 }
20 //把数据全部加进map集合中 name就是key valueStr就是value
21 params.put(name,valueStr);
22 }
23 //sign就是签名 trade_status是交易的状态
24 logger.info("支付宝回调,sign:{},trade_status:{},参数:{}",params.get("sign"),params.get("trade_status"),params.toString());
25
26 //非常重要,验证回调的正确性,是不是支付宝发的.并且呢还要避免重复通知.
27 //这个非常重要,但是不知道这个是什么意思
//这个是签名类型 sign参数已经帮我们删除掉了,在这里我们要把签名类型删除掉
28 params.remove("sign_type");
29 try {
30 //这里是RSA验证签名
31 // Configs.getAlipayPublicKey() 其实就是支付宝的应用公钥(记住不是支付宝的公钥,是支付宝应用公钥)
32 //Configs.getSignType()也就是支付宝文本类型里面的签名类型:RSA2
33 boolean alipayRSACheckedV2 = AlipaySignature.rsaCheckV2(params, Configs.getAlipayPublicKey(),"utf-8",Configs.getSignType());
34 //如果验证上面的boolean为true的话,我们就应该更改下订单的状态,减少下库存这些操作
35 if(!alipayRSACheckedV2){
36 return ServerResponse.createByErrorMessage("非法请求,验证不通过,再恶意请求我就报警找网警了");
37 }
38 } catch (AlipayApiException e) {
39 logger.error("支付宝验证回调异常",e);
40 }
//回调之后修改账单状态
ServerResponse serverResponse = iOrderService.aliCallback(params);if(serverResponse.isSuccess()){return Const.AlipayCallback.RESPONSE_SUCCESS;
}return Const.AlipayCallback.RESPONSE_FAILED;
}
支付宝回调之后修改账单的状态
//这个是回调地址之后更新一些订单状态的方法
public ServerResponse aliCallback(Mapparams){//订单号
Long orderNo = Long.parseLong(params.get("out_trade_no"));//支付宝的交易号
String tradeNo = params.get("trade_no");//支付宝的交易状态
String tradeStatus = params.get("trade_status");//在这个方法里面查询一下,看一下这个订单号码是否存在
Order order = orderMapper.selectByOrderNo(orderNo);if(order == null){return ServerResponse.createByErrorMessage("非快乐慕商城的订单,回调忽略");
}//在这里调用枚举类,判断订单是否已经支付
if(order.getStatus() >= Const.OrderStatusEnum.PAID.getCode()){return ServerResponse.createBySuccess("支付宝重复调用");
}//这里调用的是支付宝官方的枚举
//“TRADE_STATUS_TRADE_SUCCESS”是交易完成的意思
if(Const.AlipayCallback.TRADE_STATUS_TRADE_SUCCESS.equals(tradeStatus)){//记录交易的时间,这个字符串是固定的
order.setPaymentTime(DateTimeUtil.strToDate(params.get("gmt_payment")));
order.setStatus(Const.OrderStatusEnum.PAID.getCode());
orderMapper.updateByPrimaryKeySelective(order);//把订单状态改成已付款
}
PayInfo payInfo= newPayInfo();
payInfo.setUserId(order.getUserId());
payInfo.setOrderNo(order.getOrderNo());
payInfo.setPayPlatform(Const.PayPlatformEnum.ALIPAY.getCode());
payInfo.setPlatformNumber(tradeNo);
payInfo.setPlatformStatus(tradeStatus);
payInfoMapper.insert(payInfo);return ServerResponse.createBySuccess();
}
支付宝通知返回时的交易状态列表
即时到帐接口——交易状态列表
交易状态操作:支付宝有交易记录,没付款
交易状态(trade_status):WAIT_BUYER_PAY
备注:通知不会返回,不能申请修改。
交易状态操作:交易完成
交易状态(trade_status):TRADE_FINISHED
备注:交易结束,不可退款
交易状态操作:交易完成
交易状态(trade_status):TRADE_SUCCESS
备注:高级即时到帐状态下
交易状态操作:交易关闭
交易状态(trade_status):TRADE_CLOSED
备注:默认通知不返回,可申请修改(条件需开通高级即时到帐功能,且非常需要退款的同步)。出现该情况在开通高级即时到帐时的人工操作退款时、买家没付款系统自动或卖家手动关闭了该笔交易
支付宝java代码_支付宝回调JAVA版代码相关推荐
- app支付宝支付java后台_支付宝app支付java后台流程demo
支付宝app支付java后台流程demo 使用ssm框架实现支付宝支付功能. 支付宝测试环境代码测试 源代码 https://github.com/OUYANGSIHAI/sihai-maven-ss ...
- java翻译程序_有没有java代码翻译软件?
展开全部 没有翻译软件,但是能32313133353236313431303231363533e78988e69d8331333365646333编写翻译程序. java 代码翻译实例: 1.输入一个 ...
- kindle版java核心_深入理解java 7 核心技术与最佳实践-成富[6寸pdf mobi epub kindle版].pdf...
深入理解java 7 核心技术与最佳实践-成富[6寸pdf mobi epub kindle版].pdf 还剩 50页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预 ...
- JAVA拳皇_拳皇(Java简单的小程序)代码实例|chu
刚开始学习Java,看完老九君的视频根据他的内容敲的代码,感觉还挺有成就感的,毕竟刚学习Java. package helloasd;import java.util.*; public class ...
- java 中断代码_你的java代码可中断吗?(2)
1.确保提交到线程池的任务可中断 原文:www.securecoding.cert.org,TPS02-J. Ensure thattasks submitted to a thread pool a ...
- 红牛农场java代码_实验题目 Java语言概述.doc
实验题目 Java语言概述 实验一 Java语言概述 [实验目的] 1.掌握开发Java应用程序的三个步骤:编写源文件.编译源文件和运行应用程序. 2.熟悉Java应用程序的基本结构,并能联合编译应用 ...
- java格斗代码_一款Java网络格斗游戏源码JAVA游戏源码下载
一款JAVA网络格斗游戏,分服务端和游戏端,通过这个源代码你能够了解到用JAVA编写网络服务端的实例,还可了解到JAVA游戏的显示类.游戏控制类.游戏界面绘制类和声音调用类等. 一款Java网络格斗游 ...
- 小学数学闯关游戏 java代码_简单的java程序 小学数学闯关游戏 多谢高分
展开全部 有4个类 MainFrame,Question,QuestionPanel,ResultPanel import java.awt.BorderLayout; import java.awt ...
- java学习_都说Java难学,不知道具体的学习内容?全套Java学习路线送上
首先,我个人比较推崇的学习方法是:先学java前段,也就是HTML,css,js,因为学习java以后肯定是往java ee方向发展的,学习完前端,在学习后端很多东西比计较容易理解! 其中J2SE是关 ...
- java 枚举_深入理解Java枚举
所有知识体系文章,[GitHub](https://github.com/Ziphtracks/JavaLearningmanual)已收录,欢迎Star!再次感谢,愿你早日进入大厂! https:/ ...
最新文章
- 一个简单案例,带你看懂GC日志!
- FCN网络训练 SIFTFLOW数据集
- 了解TCP的三次握手和四次挥手
- Microsoft photosynth(图片三维展示)
- Java中List Set Map 是否有序等总结
- 变态的儿童国学教育与孔子真正的教育之道
- ALSA 音频工具 amixer、aplay、arecord
- elastic APM针对java应用的高阶用法(java agent)
- FFmpeg —— 14.示例程序(八):音频编码器(PCM编码为AAC)
- python操作浏览器滚动条_python selenium webdriver处理浏览器滚动条
- 车载颚式移动破碎机让资源重生,刻不容缓
- Linux-Socket实现模拟群聊(多人聊天室)
- 关于windows微软账号登陆不进去的问题
- 卷积、转置卷积、可分离卷积、分组卷积、空洞卷积的理解
- 【科研技巧】Mac下使用SciDavis绘制科研论文图教程(安装及使用)
- app逆向篇之常用命令及刷机
- 微信小程序毕业设计 基于微信化妆品商城小程序系统开题报告
- 如果在做项目时,发现自己在规定的时间内肯定完成不了时,你会怎么办
- vue-video-player视频播放插件
- UEFI 初识(组成和启动过程)
热门文章
- 无法加载安装程序库wbemupgd.dll,或是找不到函数0cEntry。
- MySQL5.6安装教程(修改版)
- 《层层恐惧2》中文免安装版下载 13.5G
- Linux影音专题网站
- 未来社区到底“未来”在哪?
- 轻松学习之Linux教程一 ubuntu14.04+windows双系统安装
- 2022全面屏手机:摩托罗拉edge X30开售,中兴新机成下一个焦点
- 直播回顾 | 图推荐算法在EE问题上的应用
- PHP相关系列 - 蚂蚁变大象:浅谈常规网站是如何从小变大的
- 13亿人的春节流量,谁家扛得住?