當(dāng)請(qǐng)求結(jié)束后,會(huì)受到微信服務(wù)器返回給我們的結(jié)果處理第三節(jié)中的reback
//將接收到的返回信息
Map<String,Object> mso = new HashMap<String,Object>();
mso = XMLParser.getMapFromXML(reback);
需要抓取異常
寫(xiě)一個(gè)XMLParser類
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
/**
* User: rizenguo
* Date: 2014/11/1
* Time: 14:06
*/
public class XMLParser {
public static Map<String,Object> getMapFromXML(String xmlString) throws ParserConfigurationException, IOException, SAXException {
//這里用Dom的方式解析回包的最主要目的是防止API新增回包字段
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputStream is = Util.getStringStream(xmlString);
Document document = builder.parse(is);
//獲取到document里面的全部結(jié)點(diǎn)
NodeList allNodes = document.getFirstChild().getChildNodes();
Node node;
Map<String, Object> map = new HashMap<String, Object>();
int i=0;
while (i < allNodes.getLength()) {
node = allNodes.item(i);
if(node instanceof Element){
map.put(node.getNodeName(),node.getTextContent());
}
i++;
}
return map;
}
}
好吧,到這里,已經(jīng)將結(jié)果都放入一個(gè)map里面去了,,筆者自己寫(xiě)了一個(gè)返回類,把map里的結(jié)果都set到返回類中,
最終都返回給調(diào)用這個(gè)現(xiàn)金紅包接口的其他業(yè)務(wù)。
大家可以參考一下
寫(xiě)一個(gè)WechatCashHongbaoSendRsp類
public class WechatCashHongbaoSendRsp {
private String return_code; //返回狀態(tài)碼
private String return_msg; //返回信息
//以下字段在return_code為SUCCESS的時(shí)候有返回
private String sign; //簽名
private String result_code; //業(yè)務(wù)結(jié)果
private String err_code; //錯(cuò)誤代碼
private String err_code_des; //錯(cuò)誤代碼描述
//以下字段在return_code和result_code都為SUCCESS的時(shí)候有返回
private String mch_billno; //商戶訂單號(hào)
private String mch_id; //商戶號(hào)
private String wxappid; //公眾賬號(hào)appid
private String re_openid; //用戶openid
private String total_amount; //付款金額
private String send_time; //發(fā)放成功時(shí)間
private String send_listid; //微信單號(hào)
public String getReturn_code() {
return return_code;
}
public void setReturn_code(String return_code) {
this.return_code = return_code;
}
public String getReturn_msg() {
return return_msg;
}
public void setReturn_msg(String return_msg) {
this.return_msg = return_msg;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getResult_code() {
return result_code;
}
public void setResult_code(String result_code) {
this.result_code = result_code;
}
public String getErr_code() {
return err_code;
}
public void setErr_code(String err_code) {
this.err_code = err_code;
}
public String getErr_code_des() {
return err_code_des;
}
public void setErr_code_des(String err_code_des) {
this.err_code_des = err_code_des;
}
public String getMch_billno() {
return mch_billno;
}
public void setMch_billno(String mch_billno) {
this.mch_billno = mch_billno;
}
public String getMch_id() {
return mch_id;
}
public void setMch_id(String mch_id) {
this.mch_id = mch_id;
}
public String getWxappid() {
return wxappid;
}
public void setWxappid(String wxappid) {
this.wxappid = wxappid;
}
public String getRe_openid() {
return re_openid;
}
public void setRe_openid(String re_openid) {
this.re_openid = re_openid;
}
public String getTotal_amount() {
return total_amount;
}
public void setTotal_amount(String total_amount) {
this.total_amount = total_amount;
}
public String getSend_time() {
return send_time;
}
public void setSend_time(String send_time) {
this.send_time = send_time;
}
public String getSend_listid() {
return send_listid;
}
public void setSend_listid(String send_listid) {
this.send_listid = send_listid;
}
}
將map里的值都set進(jìn)來(lái)
WechatCashHongbaoSendRsp rsp = new WechatCashHongbaoSendRsp();
rsp.setReturn_code(String.valueOf(mso.get("return_code")));
rsp.setReturn_msg(String.valueOf(mso.get("return_msg")));
//以下字段在return_code為SUCCESS的時(shí)候有返回
if(String.valueOf(mso.get("return_code")).equals("SUCCESS")){
rsp.setSign(String.valueOf(mso.get("sign")));
rsp.setResult_code(String.valueOf(mso.get("result_code")));
rsp.setErr_code(String.valueOf(mso.get("err_code")));
rsp.setErr_code_des(String.valueOf(mso.get("err_code_des")));
//以下字段在return_code為SUCCESS的時(shí)候有返回
if(String.valueOf(mso.get("result_code")).equals("SUCCESS")) {
rsp.setMch_billno(String.valueOf(mso.get("mch_billno")));
rsp.setMch_id(String.valueOf(mso.get("mch_id")));
rsp.setWxappid(String.valueOf(mso.get("wxappid")));
rsp.setRe_openid(String.valueOf(mso.get("re_openid")));
rsp.setTotal_amount(String.valueOf(mso.get("total_amount")));
rsp.setSend_time(String.valueOf(mso.get("send_time")));
rsp.setSend_listid(String.valueOf(mso.get("send_listid")));
}
}
將此結(jié)果返回出去吧!
聲明:工具類代碼參考微信支付開(kāi)發(fā)的demo,有些自己做了小改動(dòng)。
最后說(shuō)一點(diǎn)點(diǎn),開(kāi)發(fā)這個(gè)應(yīng)用接口,除了在加載證書(shū)那里遇到困難,其他地方還是比較順利的,然后筆者寫(xiě)這篇博客,希望將
自己的研究的東西分享出去,有哪些不對(duì)的地方,或者不好的地方,請(qǐng)指教,畢竟當(dāng)局者迷旁觀者清。