休息食客

          隨心而動(dòng)

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            16 隨筆 :: 7 文章 :: 2 評(píng)論 :: 0 Trackbacks
          第一節(jié)講了怎么準(zhǔn)備所有的參數(shù),這里講怎么將這些參數(shù)組成xml(即要通過(guò)HTTPS發(fā)送的數(shù)據(jù))
          大家可以先在網(wǎng)上了解一下java bean轉(zhuǎn)xml的相關(guān)知識(shí)
          1、我建了里一個(gè)請(qǐng)求參數(shù)類
          public class WechatCashHongbaoSendReq {
           
           private String nonce_str;             //隨機(jī)字符串
           private String sign;                  //簽名
           private String mch_billno;            //商戶訂單號(hào)
           private String mch_id;                //商戶號(hào)
           private String wxappid;               //公眾賬號(hào)appid
           private String send_name;             //商戶名稱
           private String re_openid;             //用戶openid
           private int total_amount;          //付款金額
           private int total_num;             //紅包發(fā)放總?cè)藬?shù)
           private String wishing;               //紅包祝福語(yǔ)
           private String client_ip;             //Ip地址
           private String act_name;              //活動(dòng)名稱
           private String remark;                //備注
           
           public String getNonce_str() {
            return nonce_str;
           }
           public void setNonce_str(String nonce_str) {
            this.nonce_str = nonce_str;
           }
           public String getSign() {
            return sign;
           }
           public void setSign(String sign) {
            this.sign = sign;
           }
           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 getSend_name() {
            return send_name;
           }
           public void setSend_name(String send_name) {
            this.send_name = send_name;
           }
           public String getRe_openid() {
            return re_openid;
           }
           public void setRe_openid(String re_openid) {
            this.re_openid = re_openid;
           }
           public int getTotal_amount() {
            return total_amount;
           }
           public void setTotal_amount(int total_amount) {
            this.total_amount = total_amount;
           }
           public int getTotal_num() {
            return total_num;
           }
           public void setTotal_num(int total_num) {
            this.total_num = total_num;
           }
           public String getWishing() {
            return wishing;
           }
           public void setWishing(String wishing) {
            this.wishing = wishing;
           }
           public String getClient_ip() {
            return client_ip;
           }
           public void setClient_ip(String client_ip) {
            this.client_ip = client_ip;
           }
           public String getAct_name() {
            return act_name;
           }
           public void setAct_name(String act_name) {
            this.act_name = act_name;
           }
           public String getRemark() {
            return remark;
           }
           public void setRemark(String remark) {
            this.remark = remark;
           }
          }

          2、然后把13個(gè)參數(shù)都set進(jìn)去
          WechatCashHongbaoSendReq sendReq = new WechatCashHongbaoSendReq();
            sendReq.setNonce_str(nonce_str);
            sendReq.setSign(sign);
            sendReq.setMch_billno(mch_billno);
            sendReq.setMch_id(mch_id);
            sendReq.setWxappid(wxappid);
            sendReq.setSend_name(send_name);
            sendReq.setRe_openid(re_openid);
            sendReq.setTotal_amount(total_amount);
            sendReq.setTotal_num(total_num);
            sendReq.setWishing(wishing);
            sendReq.setClient_ip(client_ip);
            sendReq.setAct_name(act_name);
            sendReq.setRemark(remark);
          3、將請(qǐng)求類轉(zhuǎn)為xml
          String data = Util.bean2XML(req).replaceAll("__", "_");    //為什么要加一個(gè)replaceAll("__", "_"),如果不加,會(huì)有什么情況,大家可以試試
          寫(xiě)一個(gè)Util類,代碼如下:
          import com.thoughtworks.xstream.XStream;
          import com.thoughtworks.xstream.core.util.QuickWriter;
          import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
          import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
          import com.thoughtworks.xstream.io.xml.XppDriver;
          import java.io.*;
          import java.lang.reflect.Field;
          import java.util.Map;
          /**
           * User: rizenguo
           * Date: 2014/10/23
           * Time: 14:59
           */
          public class Util {
              //打log用
              /**
               * 通過(guò)反射的方式遍歷對(duì)象的屬性和屬性值,方便調(diào)試
               *
               * @param o 要遍歷的對(duì)象
               * @throws Exception
               */
              public static void reflect(Object o) throws Exception {
                  Class cls = o.getClass();
                  Field[] fields = cls.getDeclaredFields();
                  for (int i = 0; i < fields.length; i++) {
                      Field f = fields[i];
                      f.setAccessible(true);
                      Util.log(f.getName() + " -> " + f.get(o));
                  }
              }
              public static byte[] readInput(InputStream in) throws IOException {
                  ByteArrayOutputStream out = new ByteArrayOutputStream();
                  int len = 0;
                  byte[] buffer = new byte[1024];
                  while ((len = in.read(buffer)) > 0) {
                      out.write(buffer, 0, len);
                  }
                  out.close();
                  in.close();
                  return out.toByteArray();
              }
              public static String inputStreamToString(InputStream is) throws IOException {
                  ByteArrayOutputStream baos = new ByteArrayOutputStream();
                  int i;
                  while ((i = is.read()) != -1) {
                      baos.write(i);
                  }
                  return baos.toString();
              }
              public static InputStream getStringStream(String sInputString) throws UnsupportedEncodingException {
                  ByteArrayInputStream tInputStringStream = null;
                  if (sInputString != null && !sInputString.trim().equals("")) {
                      tInputStringStream = new ByteArrayInputStream(sInputString.getBytes("UTF-8"));
                  }
                  return tInputStringStream;
              }
              public static Object getObjectFromXML(String xml, Class tClass) {
                  //將從API返回的XML數(shù)據(jù)映射到Java對(duì)象
               xstream.alias("xml", tClass);
                  return xstream.fromXML(xml);
              }
              public static String getStringFromMap(Map<String, Object> map, String key, String defaultValue) {
                  if (key == "" || key == null) {
                      return defaultValue;
                  }
                  String result = (String) map.get(key);
                  if (result == null) {
                      return defaultValue;
                  } else {
                      return result;
                  }
              }
              public static int getIntFromMap(Map<String, Object> map, String key) {
                  if (key == "" || key == null) {
                      return 0;
                  }
                  if (map.get(key) == null) {
                      return 0;
                  }
                  return Integer.parseInt((String) map.get(key));
              }
              /**
               * 打log接口
               * @param log 要打印的log字符串
               * @return 返回log
               */
              public static String log(Object log){
                  return log.toString();
              }
              /**
               * 讀取本地的xml數(shù)據(jù),一般用來(lái)自測(cè)用
               * @param localPath 本地xml文件路徑
               * @return 讀到的xml字符串
               */
              public static String getLocalXMLString(String localPath) throws IOException {
                  return Util.inputStreamToString(Util.class.getResourceAsStream(localPath));
              }
             
              /**
               * 將java對(duì)象轉(zhuǎn)為xml字符串
               * @param clazz
               * @return
               */
              public static String bean2XML(Object o){
               xstream.alias("xml", o.getClass());
               return xstream.toXML(o);
              }
             
              /**
            * 擴(kuò)展xstream,使其支持CDATA塊
            *  
            * @date 2013-05-19
            */  
           private static XStream xstream = new XStream(new XppDriver() {  
               public HierarchicalStreamWriter createWriter(Writer out) {  
                   return new PrettyPrintWriter(out) {  
                       // 對(duì)所有xml節(jié)點(diǎn)的轉(zhuǎn)換都增加CDATA標(biāo)記  
                       boolean cdata = true;  
             
                       @SuppressWarnings("unchecked")  
                       public void startNode(String name, Class clazz) {  
                           super.startNode(name, clazz);  
                       }  
             
                       protected void writeText(QuickWriter writer, String text) {  
                           if (cdata) {  
                               writer.write("<![CDATA[");  
                               writer.write(text);  
                               writer.write("]]>");  
                           } else {  
                               writer.write(text);  
                           }  
                       }  
                   };  
               }  
           });  
             
          }
          到這一步,已經(jīng)完成了最終要發(fā)送出去的數(shù)據(jù),然后是寫(xiě)http請(qǐng)求方法。
          聲明:工具類代碼參考微信支付開(kāi)發(fā)的demo,有些自己做了小改動(dòng)。
          PS:需要引入xstream-1.3.1.jar包,大家可以去apache中央倉(cāng)庫(kù)找https://repository.sonatype.org,輸入xstream就可以搜索到,并下載出來(lái),如果你的項(xiàng)目是maven建立的,直接在pom.xml里面加上就行
          <dependency>
               <groupId>com.thoughtworks.xstream</groupId>
               <artifactId>xstream</artifactId>
               <version>1.3.1</version>
          </dependency>
          posted on 2015-09-11 15:46 休息食客 閱讀(331) 評(píng)論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 成安县| 垣曲县| 嘉鱼县| 泗水县| 聊城市| 玉环县| 中阳县| 沅江市| 阿鲁科尔沁旗| 河池市| 都昌县| 蓝山县| 宜宾市| 嘉峪关市| 嘉鱼县| 汝阳县| 英山县| 湖口县| 石首市| 鹤壁市| 舒兰市| 武乡县| 喀什市| 西宁市| 连江县| 家居| 叶城县| 龙井市| 宁晋县| 革吉县| 石城县| 永胜县| 齐齐哈尔市| 吴川市| 大名县| 阿克苏市| 诸城市| 崇仁县| 五大连池市| 元阳县| 水富县|