Java 微信支付通知处理思路

news/2024/11/7 3:21:06/

                            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>";

 

 

 

参考资料:支付回调和查单实现指引

         支付结果通知

 

 


http://www.ppmy.cn/news/764524.html

相关文章

企业微信邀请通知在哪里设置?如何关闭?

企业微信会给相关的个人微信发邀请通知&#xff0c;如果不需要可以关闭&#xff0c;减少不必要的打扰。 您是不是经常收到企业微信邀请通知&#xff1f; 企业微信有邀请通知的功能&#xff0c;会自动对通讯录内的微信发送邀请加入的通知。然后&#xff0c;当员工离职后&#x…

java微信支付通知接口_java实现微信支付结果通知

支付完成后&#xff0c;微信会把相关支付结果和用户信息发送给商户&#xff0c;商户需要接收处理&#xff0c;并返回应答。 对后台通知交互时&#xff0c;如果微信收到商户的应答不是成功或超时&#xff0c;微信认为通知失败&#xff0c;微信会通过一定的策略定期重新发起通知&…

使用企业微信做微信消息通知

前言&#xff1a;有时候运行脚本的时候希望定期或者触发某个事件的时候往我微信推送通知&#xff0c;这个时候可以选择企业微信推送&#xff0c;原理是创建一个企业然后把要通知的账号都加进去。 一.前期准备 1.扫码进入企业微信后台&#xff0c;获取企业id https://work.weix…

微信服务通知消息找回_微信鲜为人知的4个冷知识,小技巧却有大用处

微信发展到现在已经走过了快9个年头&#xff0c;大版本已经升级到了7.0&#xff0c;陆陆续续推出的各种功能可以用“不计其数”来形容。在微信拥有的超过10亿用户当中&#xff0c;很多用户除了常用的聊天、朋友圈、微信支付等&#xff0c;可能很少用到微信的其他功能&#xff0…

微信小程序——服务通知,发送订阅消息

一、什么是消息推送 二、整体效果 三、实现步骤 1 小程序开通订阅消息 2 postApi测试效果 三、uniapp配置 这里有个需要特别注意的点&#xff0c;我们要给用户发送消息&#xff0c;就必须引导用户授权&#xff0c;如下 因为用户不点击允许&#xff0c;你是没有办法给用户推送…

服务器发送 微信通知,方糖,使用微信通知的小接口

最近碰到一个好玩的通知接口&#xff0c;可以使用接口来触发微信通知&#xff0c;特别适合一些需要触发通知的任务。 比如说最近很多服务器都被墙了&#xff0c;什么时候解封是个问题&#xff0c;总不能每天去看一下吧……这个时候就可以在国内的没被强的服务器上定时一个脚本&…

java实现微信订阅消息(服务通知)

1. 首先定义自己小程序中APPID以及SECRET public static final String APPID "自己的appid"; public static final String SECRET "自己的secret"; 2. 获得session_key public static String getAccessToken() throws Exception {String accessTokenUr…

服务器推送微信订阅消息,微信小程序-订阅消息服务通知

微信小程序目前支持一次性订阅模板消息,也就是首先在微信客户端用户允许订阅消息后,服务端可以按照指定模板推送消息给微信客服端,具体会在微信客户端的 服务通知 通知用户,可以快速跳转至微信小程序页面 在我之前文章 微信小程序-活动抽奖 中也有这种场景,用户使用抽奖小…