java之微信支付通知
微信支付,是现在大多数平台都需要接入的一个支付方式,没办法,谁让现在的用户都习惯了这种消费方式呢
我今天只说说微信支付通知,我们后台怎么接收通知,并把我们的订单的状态改为已支付,
至于为什么不说支付的那部分,微信的文档还算是比较清晰的,但是,只有支付通知那里,文档就几个字,对于我这种小白来说,看着就像天书,哈哈哈哈哈哈
统一下单这一块,我给大家推荐一个 jar 里面对于微信支付的功能基本都封装了,这个 jar 是在一个叫做 nutz 的框架里面,发现的,有兴趣的话,可以研究一下这个框架,挺不错的一个框架
引入下面的 jar 之后使用也是非常简单的,只需要
WxApi2Impl wxApi = new WxApi2Impl();
然后进去看看里面的方法,微信的,基本都有,参数里面的对象,这个 jar 都封装了,要是这样还不会用,我就没办法了
<dependency>
<groupId>org.nutz</groupId>
<artifactId>nutzwx</artifactId>
<version>1.r.63.r3</version>
</dependency>
好了,扯远了,回来看支付通知:------------------------------------------------------------------------------------------------------------------------------------
方法也很简单
看这里,下面代码红色字体那里,貌似是一定要这种方式把这段写回去,其他方法好像不行,不知道为毛,我还没有那个水平????????
下面那个验证签名那里,看你怎么去生成签名的,就怎么去验证了,上面的 jar 有生成签名的方法,可以用那个方法再生成一次,再对比就行
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
</xml>
/**
* 微信支付回调
* @author XJB、
* @date 2018年3月27日 上午9:58:04
* @param req
* @return
* @throws Exception
*/
@At("/payCallBack")
@Ok("raw")
public void payCallBack (HttpServletRequest req, HttpServletResponse response) throws Exception { log.info("\n\n\n\n\n>>>>>>>>>>>>>>>>>>>>>>>>微信回调开始>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n\n\n\n"); String xmlStr = WxUtil.getXmlString(req);
Map<String, Object> map = WxUtil.xmlToMap(xmlStr); // 验证返回是否成功
if (map.get("return_code").equals("SUCCESS")) {
log.info("通信成功>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
// 验证签名是否正确
if (WxPaySign.createSign(PropertiesUtil.readProperty("wxpay_key"), map).equals(map.get("sign"))) {
// 修改订单支付状态
System.out.println(map.get("out_trade_no").toString());
wbCarOrderService.updateOrderPayStatus(map.get("out_trade_no").toString());
}
}
String str = WxUtil.returnXML(map.get("return_code").toString());
response.getWriter().write(str);
response.getWriter().flush(); log.info("\n\n\n\n\n>>>>>>>>>>>>>>>>>>>>>>>>微信回调结束>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n\n\n\n");
}
这是WxUtil 的方法,都给大伙送上了,基本的流程就这样了
public class WxUtil {
/**
* XML格式字符串转换为Map
*
* @param strXML
* XML字符串
* @return XML数据转换后的Map
* @throws Exception
*/
public static Map<String, Object> xmlToMap(String strXML) throws Exception {
Map<String, Object> data = new HashMap<String, Object>();
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
InputStream stream = new ByteArrayInputStream(strXML.getBytes("UTF-8"));
org.w3c.dom.Document doc = documentBuilder.parse(stream);
doc.getDocumentElement().normalize();
NodeList nodeList = doc.getDocumentElement().getChildNodes();
for (int idx = 0; idx < nodeList.getLength(); ++idx) {
Node node = nodeList.item(idx);
if (node.getNodeType() == Node.ELEMENT_NODE) {
org.w3c.dom.Element element = (org.w3c.dom.Element) node;
data.put(element.getNodeName(), element.getTextContent());
}
}
try {
stream.close();
} catch (Exception ex) {
}
return data;
}
/**
* IO解析获取微信的数据
*
* @param request
* @return
*/
public static String getXmlString(HttpServletRequest request) {
BufferedReader reader = null;
String line = "";
String xmlString = null;
try {
reader = request.getReader();
StringBuffer inputString = new StringBuffer();
while ((line = reader.readLine()) != null) {
inputString.append(line);
}
xmlString = inputString.toString();
} catch (Exception e) {
}
return xmlString;
}
/**
* 返回给微信服务端的xml
* @param return_code
* @return
*/
public static String returnXML(String return_code) {
return "<xml><return_code><![CDATA["
+ return_code
+ "]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
}
}
大神请绕道,小白可留言,哈哈哈哈哈哈哈哈~~~~~~~~~~~~~~~~~~~~~~~
java之微信支付通知的更多相关文章
- Java 后端微信支付demo
Java 后端微信支付demo 一.导入微信SDK 二.在微信商户平台下载证书放在项目的resources目录下的cert文件夹下(cert文件夹需要自己建) 三.实现微信的WXPayConfig接口 ...
- java实现微信支付
java实现微信支付 package com.hk.wx.pay.service.impl; @Service public class PayServiceImpl implements PaySe ...
- ASP.NET WEB API微信支付通知接口,返回xml数据,微信服务器不识别问题
原文:ASP.NET WEB API微信支付通知接口,返回xml数据,微信服务器不识别问题 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/MrTra ...
- java做微信支付notify_url异步通知服务端的写法
最近团队在接入微信支付,APP和JSAPI的接口都需要填写一个notify_url回调地址,但是坑爹的官方文档并没有找到JSAPI模式的java版的demo,所以不得不自己看文档写了一个接受微信异步通 ...
- JAVA开发微信支付-公众号支付/微信浏览器支付(JSAPI)
写这篇文章的目的有2个,一是自己的项目刚开发完微信支付功能,趁热回个炉温习一下,二也是帮助像我这样对微信支付不熟悉,反复看了多天文档还是一知半解,原理都没摸清,更不要说实现了.本以为网上的微信开发教程 ...
- java对接微信支付
对接微信扫码支付(模式2),前端使用velocity技术 (1)调用微信支付接口(view层) 此部分业务逻辑部分可以省略 @RequestMapping("/wxpay.htm" ...
- Java之微信支付(扫码支付模式二)案例实战
摘要:最近的一个项目中涉及到了支付业务,其中用到了微信支付和支付宝支付,在做的过程中也遇到些问题,所以现在总结梳理一下,分享给有需要的人,也为自己以后回顾留个思路. 一:微信支付接入准备工作: 首先, ...
- JAVA实现微信支付V3
喜欢的朋友可以关注下,粉丝也缺. 相信很多的码友在项目中都需要接入微信支付,虽说微信支付已成为一个普遍的现象,但是接入的过程中难免会遇到各种各样的坑,这一点支付宝的SDK就做的很好,已经完成的都知道了 ...
- 微信支付和微信支付通知基于sdk的说明
前提是,有微信服务号(必须开通了支付功能,也就是说有了商户后台) (注意商户后台 安全目录 的设置,不然即使你写的没错误,也调用不成功) 公众号h5页面写法: (购物车提交--我们上一步已经生成了订 ...
随机推荐
- jmeter笔记(3)--响应结果中文乱码的解决方式
1.举例 新建HTTP请求访问百度首页,响应结果如下: 2.原因 Jmeter安装目录/bin/jmeter.properties中sampleresult.default.encoding默认为IS ...
- 川普和习G-20会面为缓和中美贸易战提供了很大的机会
川普和习将于这周在Buenos Aires(阿根廷首都)会面,互相商讨虚弱经济全球化的最大威胁. 自从川普在今年七月第一次开始提高中国商品关税之后,对全球的投资者和逐渐削弱的经济活动来说,两位领导人可 ...
- python之路day01--变量
一.变量 变量就是将一些运算的中间结果暂存到内存中,以便后续代码块调用. 规范: 1.必须由数字.字母.下划线任意组合,且不能数字开头. 2.不能是python中的关键字.如:‘print’ 'and ...
- 通过crontab调度java -jar任务提示"nohup: failed to run command `java': No such file or directory"
通过crontab无法运行,提示如标题的信息: 但直接在终端控制台执行sh和java -jar都可以: 网上给的提示解决方法,在.sh文件开始上面加上 source /etc/profile 然后cr ...
- NLP相关问题中文本数据特征表达初探
1. NLP问题简介 0x1:NLP问题都包括哪些内涵 人们对真实世界的感知被成为感知世界,而人们用语言表达出自己的感知视为文本数据.那么反过来,NLP,或者更精确地表达为文本挖掘,则是从文本数据出发 ...
- ZooKeeper 概述
ZooKeeper:分布式应用程序的分布式协调服务 ZooKeeper:是用于分布式应用程序的分布式开源协调服务 可以简单理解:ZooKeeper = 文件系统 + 通知机制 从设计模式角度理解:Zo ...
- checkbox,三种状态设置
多选按钮的 选中.未选中.半选中(常用于子项有选中,未全选) <input id="ckeckbox" type="checkbox"> $('# ...
- JWT入门简介
官网:https://jwt.io/ 文档:https://jwt.io/introduction/ 目录 什么是JWT 头部(Header) 载荷(Payload) 签名(Signature) JW ...
- MyBatis # $区别
方式一: <select id="getUserById" resultType="User" parameterType=”int”> SELEC ...
- $L^p$ 调和函数恒为零
设 $u$ 是 $\bbR^n$ 上的调和函数, 且 $$\bex \sen{u}_{L^p}=\sex{\int_{\bbR^n}|u(y)|^p\rd y}^{1/p}<\infty. \e ...