Java 微信支付通知处理思路
Java 微信支付通知处理思路
一、前言
在做微信支付时,根据微信文档可知,支付完成后,微信会把相关支付结果及用户信息通过数据流的形式发送给商户,商户需要接收处理,并按文档规范返回应答。那么该如何处理微信支付通知呢?
二、解决思路
1、读取微信通知 , 处理通知 , 根据结果,返回对应的应答情况。
2、notify2 方法,处理微信通知:
@RequestMapping(value = {"/notify2"})@ResponseBodypublic String notify2(HttpServletRequest request) throws IOException {// 1、读取微信通知 --- xml 格式字符串BufferedReader reader = request.getReader();String line ; StringBuilder sb = new StringBuilder();while((line = reader.readLine()) != null) {sb.append(line);}logger.debug("accept wechat pay return message , {}" , sb.toString());// 2、xml字符串 转换为 map对象Map<String, Object> map = XmlUtil.xmlToMap(sb.toString());// 3、尝试从缓存中获取,判断是否已经接收过通知String out_trade_no = map.get("out_trade_no") == null ?"":map.get("out_trade_no").toString();Object cache = WechatCacheUtils.get(WechatConstant.NOTIFY_CACHE_PREFIX.concat(out_trade_no));if(null != cache) {logger.debug("from cache time ,{} , cache ",DateUtils.getDate("yyyyMMddHHmmss") ,cache);@SuppressWarnings("unchecked")Map<String, Object> cacheMap = (Map<String, Object>)cache;if(WechatConstant.PAY_STATUS_SUCCESS.equals(cacheMap.get("result_code")) && WechatConstant.PAY_STATUS_SUCCESS.equals(cacheMap.get("return_code"))){return WechatConstant.NOTIFY_SUCCESS; }}if(WechatConstant.PAY_STATUS_SUCCESS.equals(map.get("result_code")) && WechatConstant.PAY_STATUS_SUCCESS.equals(map.get("return_code"))){// 4、 支付成功通知,存储到数据库中WechatPayNotify wechatPayNotify = new WechatPayNotify();wechatPayNotify.mapToBean(map);try {wechatPayNotifyService.save(wechatPayNotify);} catch (Exception e) {logger.error(e.getMessage());}// 存入到缓存中WechatCacheUtils.put(WechatConstant.NOTIFY_CACHE_PREFIX.concat(out_trade_no), map);// 5、成功处理后,同步返回给微信参数return WechatConstant.NOTIFY_SUCCESS;}logger.error("nofity error , {}" , sb.toString());// 5、若处理失败,返回为微信的参数return WechatConstant.NOTIFY_FAIL;}
3、成功返回给微信的参数
/*** 微信支付,通知----成功结果*/public static String NOTIFY_SUCCESS = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
4、失败返回为微信的参数
/*** 微信支付,通知--- 失败结果*/public static String NOTIFY_FAIL = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文为空]]></return_msg></xml>";
参考资料:支付回调和查单实现指引
支付结果通知
Java 微信支付通知处理思路相关推荐
- java微信支付v3系列——1.微信支付准备工作
目录 java微信支付v3系列--1.微信支付准备工作 java微信支付v3系列--2.微信支付基本配置 java微信支付v3系列--3.订单创建准备操作 java微信支付v3系列--4.创建订单的封 ...
- java微信支付v3系列——8.微信支付之退款成功回调
目录 java微信支付v3系列--1.微信支付准备工作 java微信支付v3系列--2.微信支付基本配置 java微信支付v3系列--3.订单创建准备操作 java微信支付v3系列--4.创建订单的封 ...
- java微信支付v3系列——5.微信支付成功回调
目录 java微信支付v3系列--1.微信支付准备工作 java微信支付v3系列--2.微信支付基本配置 java微信支付v3系列--3.订单创建准备操作 java微信支付v3系列--4.创建订单的封 ...
- java微信支付v3系列——3.订单创建准备操作
目录 java微信支付v3系列--1.微信支付准备工作 java微信支付v3系列--2.微信支付基本配置 java微信支付v3系列--3.订单创建准备操作 java微信支付v3系列--4.创建订单的封 ...
- Java微信支付-支付成功异步回调验签
接上一篇Java微信支付-统一下单API,本篇在上篇文章的基础上讲述调用统一下单API用户支付成功之后微信异步回调通知 下文中所需配置.类都在以请查看以上链接内容. 在调用微信支付-统一下单API时, ...
- php内部通知机制,PHP_浅析PHP微信支付通知的处理方式,通知机制的实现,官方只有文 - phpStudy...
浅析PHP微信支付通知的处理方式 通知机制的实现,官方只有文档没有demo代码,对没搞过的人来说,需要花大量时间来做测试. 从文档上说的来看,微信每次通知过来的数据,结构比较复杂,是一个多段数据,除了 ...
- Java 微信支付之APP支付服务端 (一)
Java 微信支付之APP支付服务端 (一) 如图所示,这是服务端要集成的所有微信接口.至于在开放平台申请就不做赘述了.主要流程,1.下单,2.异步通知,3.查询. 一.微信统一下单请求交易 /*** ...
- java 微信支付实现
一.业务需求 实现app微信支付,后端需要做生成预支付单,响应支付结果 二.业务流程 查看官方文档 https://pay.weixin.qq.com/wiki/doc/api/app/app.php ...
- java微信支付代码_Java微信支付之服务号支付代码示例
Java微信支付之服务号支付实现,网上的java微信支付sdk和Demo基本上是水的,看着头疼所以我决心自己开始写Java微信支付之公众号支付,多的不说见下面源码,为了方便使用我分别用了两个Servl ...
最新文章
- 重新编号_武汉黄陂公交线路PW、PG、PZ……分不清?别急,就要重新编号啦
- 【关注】人类的智力是如何发展起来的?《自然》发布三大科学假说
- 推荐:介绍一个UndoFramework
- [Android Traffic] 使用缓存来避免重复的下载
- 云数据库MongoDB全面支持3.4版本,支持多存储引擎
- 快速入门人工智能,这波福利不能错过!
- 安装eclipse的JRebel6.4.3的插件
- 左右布局图文排版设计灵感案例
- Windows修改hosts
- 滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(3月21日)...
- 基于极限学习机的自编码器(ELM-AE)
- 新增收货地址html,客户收货地址列表、添加地址、选择地址
- python爬虫设计背景_Python网络爬虫(增量式爬虫)
- Ant Design Vue表格序号递增问题
- Quartus-II入门(全加器)
- 图神经网络(GNN)必读论文及最新进展跟踪
- 可水解盐类pH值的计算
- 什么是苏黎士投机定律(Zurich Axiom)
- 第四代语言计算机语言,第四代程序设计语言是什么程序语言
- 【C】一些简单的编程