微信支付,是现在大多数平台都需要接入的一个支付方式,没办法,谁让现在的用户都习惯了这种消费方式呢

我今天只说说微信支付通知,我们后台怎么接收通知,并把我们的订单的状态改为已支付,

至于为什么不说支付的那部分,微信的文档还算是比较清晰的,但是,只有支付通知那里,文档就几个字,对于我这种小白来说,看着就像天书,哈哈哈哈哈哈

统一下单这一块,我给大家推荐一个 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之微信支付通知的更多相关文章

  1. Java 后端微信支付demo

    Java 后端微信支付demo 一.导入微信SDK 二.在微信商户平台下载证书放在项目的resources目录下的cert文件夹下(cert文件夹需要自己建) 三.实现微信的WXPayConfig接口 ...

  2. java实现微信支付

    java实现微信支付 package com.hk.wx.pay.service.impl; @Service public class PayServiceImpl implements PaySe ...

  3. ASP.NET WEB API微信支付通知接口,返回xml数据,微信服务器不识别问题

    原文:ASP.NET WEB API微信支付通知接口,返回xml数据,微信服务器不识别问题 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/MrTra ...

  4. java做微信支付notify_url异步通知服务端的写法

    最近团队在接入微信支付,APP和JSAPI的接口都需要填写一个notify_url回调地址,但是坑爹的官方文档并没有找到JSAPI模式的java版的demo,所以不得不自己看文档写了一个接受微信异步通 ...

  5. JAVA开发微信支付-公众号支付/微信浏览器支付(JSAPI)

    写这篇文章的目的有2个,一是自己的项目刚开发完微信支付功能,趁热回个炉温习一下,二也是帮助像我这样对微信支付不熟悉,反复看了多天文档还是一知半解,原理都没摸清,更不要说实现了.本以为网上的微信开发教程 ...

  6. java对接微信支付

    对接微信扫码支付(模式2),前端使用velocity技术 (1)调用微信支付接口(view层)  此部分业务逻辑部分可以省略 @RequestMapping("/wxpay.htm" ...

  7. Java之微信支付(扫码支付模式二)案例实战

    摘要:最近的一个项目中涉及到了支付业务,其中用到了微信支付和支付宝支付,在做的过程中也遇到些问题,所以现在总结梳理一下,分享给有需要的人,也为自己以后回顾留个思路. 一:微信支付接入准备工作: 首先, ...

  8. JAVA实现微信支付V3

    喜欢的朋友可以关注下,粉丝也缺. 相信很多的码友在项目中都需要接入微信支付,虽说微信支付已成为一个普遍的现象,但是接入的过程中难免会遇到各种各样的坑,这一点支付宝的SDK就做的很好,已经完成的都知道了 ...

  9. 微信支付和微信支付通知基于sdk的说明

    前提是,有微信服务号(必须开通了支付功能,也就是说有了商户后台) (注意商户后台 安全目录 的设置,不然即使你写的没错误,也调用不成功) 公众号h5页面写法:  (购物车提交--我们上一步已经生成了订 ...

随机推荐

  1. java 发送 mail 纯文本发送和html格式发送

    一:需要引入mail maven jar包 <!--邮件发送包--> <dependency> <groupId>javax.mail</groupId> ...

  2. 一个故事讲清楚BIO NIO 异步

    转载请引用:一个故事讲清楚NIO 假设某银行只有10个职员.该银行的业务流程分为以下4个步骤: 1) 顾客填申请表(5分钟): 2) 职员审核(1分钟): 3) 职员叫保安去金库取钱(3分钟): 4) ...

  3. Mock7 moco框架重定向

    新建一个startupWithRedirect.json [ { "description": "重定向到百度", "request": { ...

  4. Pandas系列(十四)- 实战案例

    一.series import pandas as pd import string #创建Series的两种方式 #方式一 t = pd.Series([1,2,3,4,43],index=list ...

  5. zabbix Server 4.0 部署及之内置item使用案例

    zabbix Server 4.0 部署及之内置item使用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.zabbix组件架构概述(图片摘自网络) 1>.zabbi ...

  6. 目前的.NET(C#)世界里,主流的ORM框架

    推荐一些常用的asp.net ORM框架 SqlSugar (国内) Dos.ORM (国内) Chloe (国内) StackExchange/Dapper (国外) Entity Framewor ...

  7. CSS margin负值学习及实际应用

    前言 margin属性在实际中非常常用,也是平时踩坑较多的地方.margin折叠部分相信不少人都因为这样那样的原因中过招.margin负值也是很常用的功能,很多特殊的布局方法都依赖于它. 表现 虽然m ...

  8. [物理学与PDEs]第3章第2节 磁流体力学方程组 2.2 考虑到电磁场的存在对流体力学方程组的修正

    1.  连续性方程 $$\bex \cfrac{\p \rho}{\p t}+\Div(\rho{\bf u})=0.  \eex$$ 2.  动量守恒方程 $$\bex \cfrac{\p }{\p ...

  9. ccse(CountDownLatch,CycliBarrier,Semaplore,Exchanger)

    关于等待状态的线程调用interrupt方法报异常:InterruptedException 当线程被阻塞,比如wait,join,sleep等,在调用interrupt方法,没有占用cpu运行的线程 ...

  10. Codeforces 1100F(线性基+贪心)

    题目链接 题意 给定序列,$q(1\leq q \leq 100000) $次询问,每次查询给定区间内的最大异或子集. 思路 涉及到最大异或子集肯定从线性基角度入手.将询问按右端点排序后离线处理询问, ...