微信支付notify_url回调

未到犯罪年龄 2015-04-29 10:36:39
package com.tra.action;

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.StringReader;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.json.annotations.JSON;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;

import com.tra.entity.WxPayResult;




public class NotifyServlet extends HttpServlet {


private static final long serialVersionUID = -5643904721190761064L;

private String forward;

@JSON(serialize = false)
public String getForward() {
return forward;
}

public void setForward(String forward) {
this.forward = forward;
}
/**
* description: 解析微信通知xml
*
* @param xml
* @return
* @author zhaotianfeng
* @see
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
private Map parseXmlToList2(String xml) {
Map retMap = new HashMap();
try {
StringReader read = new StringReader(xml);
// 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
InputSource source = new InputSource(read);
// 创建一个新的SAXBuilder
SAXBuilder sb = new SAXBuilder();
// 通过输入源构造一个Document
org.jdom.Document doc = sb.build(source);
Element root = (Element) doc.getRootElement();// 指向根节点
List<Element> es = root.getChildren();
if (es != null && es.size() != 0) {
for (Element element : es) {
retMap.put(element.getName(), element.getValue());
}
}
} catch (Exception e) {
e.printStackTrace();
}
return retMap;
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.print("微信支付回调数据开始");
//示例报文
// String xml = "<xml><appid><![CDATA[wxb4dc385f953b356e]]></appid><bank_type><![CDATA[CCB_CREDIT]]></bank_type><cash_fee><![CDATA[1]]></cash_fee><fee_type><![CDATA[CNY]]></fee_type><is_subscribe><![CDATA[Y]]></is_subscribe><mch_id><![CDATA[1228442802]]></mch_id><nonce_str><![CDATA[1002477130]]></nonce_str><openid><![CDATA[o-HREuJzRr3moMvv990VdfnQ8x4k]]></openid><out_trade_no><![CDATA[1000000000051249]]></out_trade_no><result_code><![CDATA[SUCCESS]]></result_code><return_code><![CDATA[SUCCESS]]></return_code><sign><![CDATA[1269E03E43F2B8C388A414EDAE185CEE]]></sign><time_end><![CDATA[20150324100405]]></time_end><total_fee>1</total_fee><trade_type><![CDATA[JSAPI]]></trade_type><transaction_id><![CDATA[1009530574201503240036299496]]></transaction_id></xml>";
String inputLine;
String notityXml = "";
String resXml = "";

try {
while ((inputLine = request.getReader().readLine()) != null) {
notityXml += inputLine;
}
request.getReader().close();
} catch (Exception e) {
e.printStackTrace();
}



System.out.println("接收到的报文:" + notityXml);

Map m = parseXmlToList2(notityXml);
WxPayResult wpr = new WxPayResult();
wpr.setAppid(m.get("appid").toString());
wpr.setBankType(m.get("bank_type").toString());
wpr.setCashFee(m.get("cash_fee").toString());
wpr.setFeeType(m.get("fee_type").toString());
wpr.setIsSubscribe(m.get("is_subscribe").toString());
wpr.setMchId(m.get("mch_id").toString());
wpr.setNonceStr(m.get("nonce_str").toString());
wpr.setOpenid(m.get("openid").toString());
wpr.setOutTradeNo(m.get("out_trade_no").toString());
wpr.setResultCode(m.get("result_code").toString());
wpr.setReturnCode(m.get("return_code").toString());
wpr.setSign(m.get("sign").toString());
wpr.setTimeEnd(m.get("time_end").toString());
wpr.setTotalFee(m.get("total_fee").toString());
wpr.setTradeType(m.get("trade_type").toString());
wpr.setTransactionId(m.get("transaction_id").toString());

if("SUCCESS".equals(wpr.getResultCode())){
//支付成功
resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>"
+ "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";
}else{
resXml = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>"
+ "<return_msg><![CDATA[报文为空]]></return_msg>" + "</xml> ";
}
System.out.println("微信支付回调数据结束");

BufferedOutputStream out = new BufferedOutputStream(
response.getOutputStream());
out.write(resXml.getBytes());
out.flush();
out.close();
forward = "/index/weChatPayTable.jsp";
}

/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);

}
}
求大神告知哪里有问题,一直访问不到该servlet。
...全文
51496 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
frank_passion 2016-10-26
  • 打赏
  • 举报
回复
微信无法回调: 1.确认你提供的回调地址是公网可访问的。 2.确认你提供的回调地址是POST。 3.接收回调的信息,请用流的方式来处理。
鸿花粉 2016-10-11
  • 打赏
  • 举报
回复
首先确定回调的url是正确的,区分大小写。后台是MVC架构的,URL 需要以斜杠“/”结尾,如:http://www.yuming.com/controller/action/
低头灬阳光下 2016-06-25
  • 打赏
  • 举报
回复
我按照网上的xml解析方法解析 返回的都是空空的 没一点数据
多么不容易 2016-03-14
  • 打赏
  • 举报
回复
我也遇到了这种问题,我可以确定微信对回调地址进行了访问通知,但是不知道该如何获取数据,请问各位前辈解决了没有?能不能指点一下后进? ps:我在微信异步通知那个方法里,写了推送,支付成功后,跳转到微信的支付成功页面的时候,的确接收到了多次通知。
码无边 2015-12-17
  • 打赏
  • 举报
回复
请求的回调地址,有没在config文件配置呢? 另外还需要回调处理的方法,比如更新订单的状态等。
qq_33380734 2015-12-16
  • 打赏
  • 举报
回复
先搞清楚微信是没有给这个接口发请求还是发了请求你没处理好。如果是接口没有收到微信的请求,可能是你配置的回调地址错误,回调地址需要完整的,比如:http://www.xxxx.com/xxxx/xxxx/xxxxx 先确定好问题出在哪里才好解决。你先确定下是微信没有给接口发请求,还是接口处理请求信息没有处理好
米迷 2015-12-15
  • 打赏
  • 举报
回复
同求啊。。谁解决了吗
sinat_25445703 2015-12-02
  • 打赏
  • 举报
回复
这个问题现在我也遇到了,大家的都解决了么?
飞天巨龙 2015-11-12
  • 打赏
  • 举报
回复
微信支付无法调用回调的notify_url?
yunlong0 2015-07-17
  • 打赏
  • 举报
回复
要 类似于 http://meiyilife.com/SWTServer/wxnotify.do 这样的请求地址,还有,你调用统一下单接口的时候有没有把这个地址塞进去啊
梁小超 2015-07-14
  • 打赏
  • 举报
回复
要部署到公网,才能访问,只是我访问到了,不会解析
ruts888 2015-06-29
  • 打赏
  • 举报
回复
同样的,支付成功没有回调notify_url,谁知道说下
JavinLu 2015-06-09
  • 打赏
  • 举报
回复
我也在弄微信支付。notify_url都没给我回调。。。
Mr_Monotony 2015-06-02
  • 打赏
  • 举报
回复
楼主,你的问题解决没有啊? 我现在也在做微信支付, notify_url回调也是无法访问。 但是支付是成功了的。 如果解决了,麻烦说下怎么解决的啊。。
conqweal 2015-05-06
  • 打赏
  • 举报
回复
接收通知的文件,要仍在根目录下,然后测试看看。

3,156

社区成员

发帖
与我相关
我的任务
社区描述
微信开发即微信公众平台开发,将企业信息、服务、活动等内容通过微信网页的方式进行表现,通过二次开发可以将公众账号由一个媒体型营销工具转化成提供服务的产品。
社区管理员
  • 微信开发
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧