Android微信支付,通知回调方法
2015-08-19 17:00
771 查看
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.ServletInputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.xml.sax.InputSource; import com.tenpay.ResponseHandler; import com.tenpay.util.TenpayUtil; /** * 微信回调Servlet * */ public class WXPayRspServlet extends HttpServlet { private static final long serialVersionUID = -3523419191502630036L; private final static Logger log = Logger.getLogger(<span style="font-family: Arial, Helvetica, sans-serif;">WXPayRspServlet</span><span style="font-family: Arial, Helvetica, sans-serif;">.class);</span> @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletInputStream in = req.getInputStream(); ResponseHandler resHandler = new ResponseHandler(req, resp); String resXml = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>" + "<return_msg><![CDATA[报文为空]]></return_msg>" + "</xml> "; try{ int size = req.getContentLength(); byte[] bdata = new byte[size]; in.read(bdata); String xmlstring = new String(bdata,TenpayUtil.getCharacterEncoding(req, resp)); log.info("****** back data xml *******\n"); log.info(xmlstring); if(!StringUtils.isEmpty(xmlstring)){ Map paramMap = parseXmlToMap(xmlstring); /* 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()); */ String result_code = paramMap.get("result_code").toString(); if("SUCCESS".equals(result_code.toUpperCase())){ //根据自身业务编写代码 } }else{ resXml = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>" + "<return_msg><![CDATA[报文为空]]></return_msg>" + "</xml> "; log.error("微信返回报文为空"); } }catch(Exception e){ log.error(e.getMessage(), e); e.printStackTrace(); } log.info(resXml); resHandler.sendToCFT(resXml); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } private Map parseXmlToMap(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; } }
tenpay的方法如下:
public void sendToCFT(String msg) throws IOException { String strHtml = msg; PrintWriter out = this.getHttpServletResponse().getWriter(); out.println(strHtml); out.flush(); out.close(); }
其中:
<span style="white-space:pre"> </span>WxPayResult wpr = new WxPayResult();
注解部分为微信返回的信息。
sendToCFT方法为响应微信方法,即<pre name="code" class="java"><return_code><![CDATA[SUCCESS]]></return_code>是告诉微信已经可以了,不用再发通知(微信一般会发4次通知)。
相关文章推荐
- 火狐浏览器伪装微信内核自带浏览器的两种方法
- 微信浏览器打开 点击下载app 无需提示使用浏览器打开--代码分享
- 【微信】网页授权,获取CODE,OPENID,
- 微信营销不可随便套用微博模式的原因
- Android集成友盟分享SDK出现的 "微信发送被拒绝"" 的错误的处理方法
- 微信公众号开发之微信JSSDK
- PHP 调用微信JS-SDK 开发详解 [网摘]
- 微信企业红包设计案例
- nodejs 调取微信收货地址
- HTML CSS微信CSS显示一些总结
- 更为出色的微信商城要如何实现
- 100条超实用微信营销技巧:公众号、朋友圈和微信营销
- CC254x(cc2540/cc2541)的微信AirSync调试笔记
- 微信的redirect_uri参数错误解决办法
- 一段小程序(2)
- 转:js-sdk探索之微信网页分享
- 苹果手机微信记录恢复最简单的恢复方法
- 微信支付又下一城:可以缴税了
- 自定义微信图文模板注意事项整理
- IOS开发第三方语音-微信语音