休息食客

          隨心而動

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            16 隨筆 :: 7 文章 :: 2 評論 :: 0 Trackbacks
          第一節講了怎么準備所有的參數,這里講怎么將這些參數組成xml(即要通過HTTPS發送的數據)
          大家可以先在網上了解一下java bean轉xml的相關知識
          1、我建了里一個請求參數類
          public class WechatCashHongbaoSendReq {
           
           private String nonce_str;             //隨機字符串
           private String sign;                  //簽名
           private String mch_billno;            //商戶訂單號
           private String mch_id;                //商戶號
           private String wxappid;               //公眾賬號appid
           private String send_name;             //商戶名稱
           private String re_openid;             //用戶openid
           private int total_amount;          //付款金額
           private int total_num;             //紅包發放總人數
           private String wishing;               //紅包祝福語
           private String client_ip;             //Ip地址
           private String act_name;              //活動名稱
           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個參數都set進去
          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、將請求類轉為xml
          String data = Util.bean2XML(req).replaceAll("__", "_");    //為什么要加一個replaceAll("__", "_"),如果不加,會有什么情況,大家可以試試
          寫一個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用
              /**
               * 通過反射的方式遍歷對象的屬性和屬性值,方便調試
               *
               * @param o 要遍歷的對象
               * @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數據映射到Java對象
               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數據,一般用來自測用
               * @param localPath 本地xml文件路徑
               * @return 讀到的xml字符串
               */
              public static String getLocalXMLString(String localPath) throws IOException {
                  return Util.inputStreamToString(Util.class.getResourceAsStream(localPath));
              }
             
              /**
               * 將java對象轉為xml字符串
               * @param clazz
               * @return
               */
              public static String bean2XML(Object o){
               xstream.alias("xml", o.getClass());
               return xstream.toXML(o);
              }
             
              /**
            * 擴展xstream,使其支持CDATA塊
            *  
            * @date 2013-05-19
            */  
           private static XStream xstream = new XStream(new XppDriver() {  
               public HierarchicalStreamWriter createWriter(Writer out) {  
                   return new PrettyPrintWriter(out) {  
                       // 對所有xml節點的轉換都增加CDATA標記  
                       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);  
                           }  
                       }  
                   };  
               }  
           });  
             
          }
          到這一步,已經完成了最終要發送出去的數據,然后是寫http請求方法。
          聲明:工具類代碼參考微信支付開發的demo,有些自己做了小改動。
          PS:需要引入xstream-1.3.1.jar包,大家可以去apache中央倉庫找https://repository.sonatype.org,輸入xstream就可以搜索到,并下載出來,如果你的項目是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) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 北海市| 资溪县| 蒲江县| 同德县| 凉山| 大荔县| 东源县| 峨山| 江陵县| 安陆市| 丹凤县| 房山区| 和龙市| 南靖县| 聊城市| 资兴市| 周口市| 南岸区| 郧西县| 泗水县| 德惠市| 银川市| 博白县| 苏尼特左旗| 通化县| 曲阳县| 宁强县| 安徽省| 扶风县| 修武县| 体育| 吉首市| 龙井市| 株洲县| 澳门| 凭祥市| 安阳市| 巍山| 四平市| 郯城县| 湘阴县|