Javaは異なる業者に基づいて動的に微信支払コード(モード2)を生成し、スキャン支払い成功ページのジャンプバックグラウンド構想を含む.

33223 ワード

Javaは異なる業者に基づいて動的に微信支払コード(モード2)を生成し、スキャン支払い成功ページのジャンプバックグラウンド構想を含む.
  • 一、動的QRコード
  • を生成する
  • 二、微信自動コールバックインタフェース
  • 三、スキャンコード支払いに成功した後、商戸システムはページジャンプ
  • を実現した.
  • に関連するエンティティクラスとツールクラス
  • 一、動的QRコードの生成
    フロントから必要なパラメータを受け取り、QRコードの短い接続と微信関連パラメータを含むエンティティを返します.
    Controller
    @RequestMapping("/getPayWxqrcode")
    @ResponseBody
    public URLCode wxqrcode(@RequestBody WxCusInfoBean wxCusInfoBean, 	 HttpServletRequest request, HttpServletResponse response, HttpSession session) throws Exception{
        BigDecimal fen = wxCusInfoBean.getPayAmount().multiply(new BigDecimal(100));
        fen = fen.setScale(0, BigDecimal.ROUND_HALF_UP);
        String order_price = fen.toString();
    
        //         ,    
        String out_trade_no = wxCusInfoBean.getOrderId();
    
        //     
        Map param = new HashMap<>();
        param.put("order_price", order_price);
        param.put("body", wxCusInfoBean.getBody());
        param.put("out_trade_no", out_trade_no);
        param.put("attach", wxCusInfoBean.getOrderId());
    
        //            
        Map result = phoneOrderService.doUnifiedOrder(wxCusInfoBean,param, request);
        URLCode urlCode = new URLCode();
        if ("FAIL".equals(result.get("return_code"))){
            urlCode.setErorr("eroor");
            return urlCode;
            //session.setAttribute("create_wx_qrcode_error_msg",  result.get("return_msg"));
        } else {
            String urlcode = result.get("code_url");
            String prepay_id = result.get("prepay_id");
            urlCode.setPrepayId(prepay_id);
            urlCode.setUrlCode(urlcode);
            urlCode.setNonce_str(result.get("nonce_str"));
            urlCode.setSign(result.get("sign"));
            return urlCode;//        
    
        }
    }
    

    Service
        @Override
    public Map doUnifiedOrder(WxCusInfoBean wxCusInfoBean, Map param, HttpServletRequest request) {
        String appid = wxCusInfoBean.getAppId();
        String mch_id = wxCusInfoBean.getMchId();
        String key = wxCusInfoBean.getApiKey();
        String trade_type = "NATIVE";
        String spbill_create_ip = PayCommonUtil.getIpAddress(request);      //        ip
        //String notify_url = PayConfigUtil.NOTIFY_URL+"?key="+wxCusInfoBean.getApiKey();                       //     
        String notify_url = PayConfigUtil.NOTIFY_URL;
        String currTime = PayCommonUtil.getCurrTime();
        String strTime = currTime.substring(8, currTime.length());
        String strRandom = PayCommonUtil.buildRandom(4) + "";
        String nonce_str = strTime + strRandom;                             //      
        String order_price = (String) param.get("order_price");             //        :       
        String body = (String) param.get("body");                           //     
        String out_trade_no = (String) param.get("out_trade_no");           //    
    
        String attach = (String) param.get("attach");                       //     ,           orderId
    
        SortedMap packageParams = new TreeMap<>();
        packageParams.put("appid", appid);
        packageParams.put("mch_id", mch_id);
        packageParams.put("nonce_str", nonce_str);
        packageParams.put("body", body);
        packageParams.put("out_trade_no", out_trade_no);
        packageParams.put("total_fee", order_price);
        packageParams.put("spbill_create_ip", spbill_create_ip);
        packageParams.put("notify_url", notify_url);
        packageParams.put("trade_type", trade_type);
        packageParams.put("attach", attach);
    
        //   
        String sign = PayCommonUtil.createSign("UTF-8", packageParams, key);
        packageParams.put("sign", sign);
        //             xml     ,        xml
        // map --> xml
        String requestXML = PayCommonUtil.getRequestXml(packageParams);
        System.out.println("---------- Request XML: " + requestXML);
        String resXml = HttpUtil.postData(PayConfigUtil.UFDODER_URL, requestXML);
        System.out.println("---------- Response XML: " + resXml);
    
        // xml --> map
        try {
            return XMLUtil4jdom.doXMLParse(resXml);
        } catch (JDOMException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    

    二、微信自動コールバックインタフェース
    QRコードを生成した後、誰かがQRコードをスキャンして支払いに成功した場合、微信は次のインタフェースにコールバックします.もちろん、コールバックアドレスは自分で構成する必要があります.後のコードは(注意:コールバックアドレスは公網でアクセスできる必要があります)、このコールバックインタフェースは自分のビジネスロジックを処理するために使用できます.このインタフェースは微信側が生成したこの取引注文番号を格納するために使用します.後ろのページにジャンプするためのマット
    Controller
    @RequestMapping("/wxnotify")
    @ResponseBody
    public String wxnotify(HttpServletRequest request, HttpServletResponse response) throws Exception{
        String te = t1.get();
        //    
        String str = "";
        InputStream inputStream ;
        StringBuffer sb = new StringBuffer();
        inputStream = request.getInputStream();
        String s ;
        BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
        while ((s = in.readLine()) != null){
            sb.append(s);
        }
        in.close();
        inputStream.close();
        //  xml map
        Map m = new HashMap();
        m = XMLUtil4jdom.doXMLParse(sb.toString());
    
        //       TreeMap
        SortedMap packageParams = new TreeMap();
        Iterator it = m.keySet().iterator();
        while (it.hasNext()) {
            String parameter = (String) it.next();
            String parameterValue = m.get(parameter);
    
            String v = "";
            if(null != parameterValue) {
                v = parameterValue.trim();
            }
            packageParams.put(parameter, v);
        }
    	//    AppID     APIKey(        ),         
        String appid = (String)packageParams.get("appid");
        String key = phoneOrderService.getKeyByMchId(appid);
        System.out.println(key);
        //        
        if(PayCommonUtil.isTenpaySign("UTF-8", packageParams,key)) {
            //------------------------------
            //      
            //------------------------------
            String resXml = "";
            if("SUCCESS".equals((String)packageParams.get("result_code"))){
                //        
                //////////         ////////////////
                String mch_id = (String)packageParams.get("mch_id");
                String openid = (String)packageParams.get("openid");
                String is_subscribe = (String)packageParams.get("is_subscribe");
                String out_trade_no = (String)packageParams.get("out_trade_no");
    
                BigDecimal total_fee = new BigDecimal((String)packageParams.get("total_fee"));
                String transaction_id = (String)packageParams.get("transaction_id");
                String sydid = phoneOrderService.getSydIdByOid(out_trade_no);
                System.out.println("sydid+"+sydid);
                String hyjlId = phoneOrderService.getHyjlIdByOid(out_trade_no);
                System.out.println("hyjlid+"+hyjlId);
                if (sydid != null && !"".equals(sydid)) {
                    System.out.println("         ");
                    phoneOrderService.updateSydTranId(transaction_id,out_trade_no);
                } else if(hyjlId != null && !"".equals(hyjlId)) {
                    phoneOrderService.updateHyjlTranId(transaction_id,out_trade_no);
                }
    
                System.out.println("     ="+transaction_id);
    
                //    .      .  .         .            .
                resXml = "" + ""
                        + "" + " ";
                str =  "    "+total_fee+" ";
                System.out.println(str+"mch_id="+mch_id+"openid="+openid+"is_subscribe="+is_subscribe+"out_trade_no="+out_trade_no);
    
            } else {
    
                resXml = "" + ""
                        + "" + " ";
                str =  "    ";
            }
            BufferedOutputStream out = new BufferedOutputStream(
                    response.getOutputStream());
            out.write(resXml.getBytes());
            out.flush();
            out.close();
        } else{
            str = "      ";
        }
        System.out.println(str);
        return  str;
    }
    

    三、スキャンコードの支払いに成功した後、商戸システムはページのジャンプを実現する
    ここで、私は微信システムの注文状態を照会して、この注文が支払いに成功したかどうかを判断します.具体的には、前に保存した微信の注文番号を手に入れて微信に行く統一注文照会アドレスとして使用します.https://api.mch.weixin.qq.com/pay/orderquery 支払い情報を交換し、QRコードを生成するとフロントでAjaxのローテーションの下のインタフェースが開始され、正常な支払いに戻るまでローテーションを停止し、ページをジャンプするController
    @RequestMapping("/getOrderCode")
        @ResponseBody
        public returnOrderCode getOrderCode(@RequestBody getOrderCode getOrderCode){
        //                  
            String transaction_id = phoneOrderService.getTransactionIdBySydId(getOrderCode.getOrderId());
            String transaction_idCopy = phoneOrderService.getTransactionIdByHyjlId(getOrderCode.getOrderId());
            if(transaction_id != null && !"".equals(transaction_id)) {
                getOrderCode.setOrderId(transaction_id);
            } else if (transaction_idCopy != null && !"".equals(transaction_idCopy)) {
                getOrderCode.setOrderId(transaction_idCopy);
            }
            Map result = phoneOrderService.getOrderCode(getOrderCode);
            String return_code = result.get("return_code");
            String return_msg = result.get("return_msg");
            String err_code = result.get("err_code");
            String err_code_des = result.get("err_code_des");
            String trade_state_desc = result.get("trade_state_desc");
            returnOrderCode returnOrderCode = new returnOrderCode();
            returnOrderCode.setErr_code(err_code);
            returnOrderCode.setErr_code_des(err_code_des);
            returnOrderCode.setReturn_code(return_code);
            returnOrderCode.setReturn_msg(return_msg);
            returnOrderCode.setTrade_state_desc(trade_state_desc);
            return returnOrderCode;
        }
    

    Service
     @Override
        public Map getOrderCode(getOrderCode getOrderCode) {
            String appid = getOrderCode.getAppId();
            String mch_id = getOrderCode.getMchId();
            String orderId = getOrderCode.getOrderId();
            String nonce_str = getOrderCode.getNonce_str();
            String sign = "";
            SortedMap packageParams = new TreeMap<>();
            packageParams.put("appid", appid);
            packageParams.put("mch_id", mch_id);
            packageParams.put("nonce_str", nonce_str);
            packageParams.put("transaction_id", orderId);
            sign = PayCommonUtil.createSign("UTF-8", packageParams, getOrderCode.getApiKey());
            packageParams.put("sign", sign);
            String requestXML = PayCommonUtil.getRequestXml(packageParams);
            System.out.println("---------- Request XML: " + requestXML);
            String resXml = HttpUtil.postData(PayConfigUtil.WXORDER_URL, requestXML);
            System.out.println("---------- Response XML: " + resXml);
    
            // xml --> map
            try {
                return XMLUtil4jdom.doXMLParse(resXml);
            } catch (JDOMException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    

    関連するエンティティークラスとツールクラス
    PayConfigUtil
    package com.sj.Utils;
    
    public class PayConfigUtil {
    
        //         ,   WXPayController             
    
    
        public static final String NOTIFY_URL = "http://***/PhoneOrder/wxnotify";
    
        public static final String UFDODER_URL = "https://api.mch.weixin.qq.com/pay/unifiedorder";
    
        //      
        public  static final String WXORDER_URL="https://api.mch.weixin.qq.com/pay/orderquery";
    }
    
    

    PayCommonUtil
    package com.sj.Utils;
    
    import javax.servlet.http.HttpServletRequest;
    import java.security.MessageDigest;
    import java.text.SimpleDateFormat;
    import java.util.*;
    
    public class PayCommonUtil {
    
        /**
         * @Description:        xml   string
         * @param parameters
         *                
         * @return
         */
        public static String getRequestXml(SortedMap parameters) {
            StringBuffer sb = new StringBuffer();
            sb.append("");
            Set es = parameters.entrySet();
            Iterator it = es.iterator();
            while (it.hasNext()) {
                Map.Entry entry = (Map.Entry) it.next();
                String k = (String) entry.getKey();
                String v = (String) entry.getValue();
                if ("attach".equalsIgnoreCase(k) || "body".equalsIgnoreCase(k) || "sign".equalsIgnoreCase(k)) {
                    sb.append("" + "" + k + ">");
                } else {
                    sb.append("" + v + "" + k + ">");
                }
            }
            sb.append("");
            return sb.toString();
        }
        /**
         *         sign
         * @param characterEncoding
         * @param parameters
         * @return
         */
        @SuppressWarnings("unchecked")
        public static String createSign(String characterEncoding, SortedMap parameters, String API_KEY){
    
            StringBuffer sb = new StringBuffer();
            Set es = parameters.entrySet();//           accsii  (  )
            Iterator it = es.iterator();
            while(it.hasNext()) {
                Map.Entry entry = (Map.Entry)it.next();
                String k = (String)entry.getKey();
                Object v = entry.getValue();
                if(null != v && !"".equals(v)
                        && !"sign".equals(k) && !"key".equals(k)) {
                    sb.append(k + "=" + v + "&");
                }
            }
            sb.append("key=" + API_KEY);
            String sign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toUpperCase();
    
            return sign;
        }
        /**
         *        yyyyMMddHHmmss
         *
         * @return String
         */
        public static String getCurrTime() {
            Date now = new Date();
            SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss");
            String s = outFormat.format(now);
            return s;
        }
    
        /**
         *                 .
         *
         * @param length
         *            int            。length  11
         * @return int         。
         */
        public static int buildRandom(int length) {
            int num = 1;
            double random = Math.random();
            if (random < 0.1) {
                random = random + 0.1;
            }
            for (int i = 0; i < length; i++) {
                num = num * 10;
            }
            return (int) ((random * num));
        }
    
        /**
         *   IP  
         *
         * @param request
         * @return
         */
        public static String getIpAddress(HttpServletRequest request) {
            String ip = request.getHeader("x-forwarded-for");
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_CLIENT_IP");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
            }
            return ip;
        }
    
    
    
        /**
         *       ,   :     a-z  ,            。
         * @return boolean
         */
        public static boolean isTenpaySign(String characterEncoding, SortedMap packageParams, String API_KEY) {
            StringBuffer sb = new StringBuffer();
            Set es = packageParams.entrySet();
            Iterator it = es.iterator();
            while(it.hasNext()) {
                Map.Entry entry = (Map.Entry)it.next();
                String k = (String)entry.getKey();
                String v = (String)entry.getValue();
                if(!"sign".equals(k) && null != v && !"".equals(v)) {
                    sb.append(k + "=" + v + "&");
                }
            }
    
            sb.append("key=" + API_KEY);
    
            //    
            String mysign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toLowerCase();
            String tenpaySign = ((String)packageParams.get("sign")).toLowerCase();
    
            //System.out.println(tenpaySign + "    " + mysign);
            return tenpaySign.equals(mysign);
        }
    
        private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
                "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
    }
    
    
    

    MD5Util
    package com.sj.Utils;
    
    import java.security.MessageDigest;
    
    public class MD5Util {
        private static String byteArrayToHexString(byte b[]) {
            StringBuffer resultSb = new StringBuffer();
            for (int i = 0; i < b.length; i++)
                resultSb.append(byteToHexString(b[i]));
    
            return resultSb.toString();
        }
    
        private static String byteToHexString(byte b) {
            int n = b;
            if (n < 0)
                n += 256;
            int d1 = n / 16;
            int d2 = n % 16;
            return hexDigits[d1] + hexDigits[d2];
        }
    
        public static String MD5Encode(String origin, String charsetname) {
            String resultString = null;
            try {
                resultString = new String(origin);
                MessageDigest md = MessageDigest.getInstance("MD5");
                if (charsetname == null || "".equals(charsetname))
                    resultString = byteArrayToHexString(md.digest(resultString
                            .getBytes()));
                else
                    resultString = byteArrayToHexString(md.digest(resultString
                            .getBytes(charsetname)));
            } catch (Exception exception) {
            }
            return resultString;
        }
    
        private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
                "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
    
    }
    
    

    HttpUtil
    package com.sj.Utils;
    
    import sun.rmi.runtime.Log;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.URL;
    import java.net.URLConnection;
    
    public class HttpUtil {
        private final static int CONNECT_TIMEOUT = 5000; // in milliseconds
        private final static String DEFAULT_ENCODING = "UTF-8";
    
        public static String postData(String urlStr, String data){
            return postData(urlStr, data, null);
        }
    
        public static String postData(String urlStr, String data, String contentType){
            BufferedReader reader = null;
            try {
                URL url = new URL(urlStr);
                URLConnection conn = url.openConnection();
                conn.setDoOutput(true);
                conn.setConnectTimeout(CONNECT_TIMEOUT);
                conn.setReadTimeout(CONNECT_TIMEOUT);
                if(contentType != null)
                    conn.setRequestProperty("content-type", contentType);
                OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream(), DEFAULT_ENCODING);
                if(data == null)
                    data = "";
                writer.write(data);
                writer.flush();
                writer.close();
    
                reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), DEFAULT_ENCODING));
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line);
                    sb.append("\r
    "); } return sb.toString(); } catch (IOException e) { return "eroor"; } finally { try { if (reader != null) reader.close(); } catch (IOException e) { } } } }

    PayCommonUtil
    package com.sj.Utils;
    
    import javax.servlet.http.HttpServletRequest;
    import java.security.MessageDigest;
    import java.text.SimpleDateFormat;
    import java.util.*;
    
    public class PayCommonUtil {
    
        /**
         * @Description:        xml   string
         * @param parameters
         *                
         * @return
         */
        public static String getRequestXml(SortedMap parameters) {
            StringBuffer sb = new StringBuffer();
            sb.append("");
            Set es = parameters.entrySet();
            Iterator it = es.iterator();
            while (it.hasNext()) {
                Map.Entry entry = (Map.Entry) it.next();
                String k = (String) entry.getKey();
                String v = (String) entry.getValue();
                if ("attach".equalsIgnoreCase(k) || "body".equalsIgnoreCase(k) || "sign".equalsIgnoreCase(k)) {
                    sb.append("" + "" + k + ">");
                } else {
                    sb.append("" + v + "" + k + ">");
                }
            }
            sb.append("");
            return sb.toString();
        }
        /**
         *         sign
         * @param characterEncoding
         * @param parameters
         * @return
         */
        @SuppressWarnings("unchecked")
        public static String createSign(String characterEncoding, SortedMap parameters, String API_KEY){
    
            StringBuffer sb = new StringBuffer();
            Set es = parameters.entrySet();//           accsii  (  )
            Iterator it = es.iterator();
            while(it.hasNext()) {
                Map.Entry entry = (Map.Entry)it.next();
                String k = (String)entry.getKey();
                Object v = entry.getValue();
                if(null != v && !"".equals(v)
                        && !"sign".equals(k) && !"key".equals(k)) {
                    sb.append(k + "=" + v + "&");
                }
            }
            sb.append("key=" + API_KEY);
            String sign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toUpperCase();
    
            return sign;
        }
        /**
         *        yyyyMMddHHmmss
         *
         * @return String
         */
        public static String getCurrTime() {
            Date now = new Date();
            SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss");
            String s = outFormat.format(now);
            return s;
        }
    
        /**
         *                 .
         *
         * @param length
         *            int            。length  11
         * @return int         。
         */
        public static int buildRandom(int length) {
            int num = 1;
            double random = Math.random();
            if (random < 0.1) {
                random = random + 0.1;
            }
            for (int i = 0; i < length; i++) {
                num = num * 10;
            }
            return (int) ((random * num));
        }
    
        /**
         *   IP  
         *
         * @param request
         * @return
         */
        public static String getIpAddress(HttpServletRequest request) {
            String ip = request.getHeader("x-forwarded-for");
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_CLIENT_IP");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
            }
            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
            }
            return ip;
        }
    
    
    
        /**
         *       ,   :     a-z  ,            。
         * @return boolean
         */
        public static boolean isTenpaySign(String characterEncoding, SortedMap packageParams, String API_KEY) {
            StringBuffer sb = new StringBuffer();
            Set es = packageParams.entrySet();
            Iterator it = es.iterator();
            while(it.hasNext()) {
                Map.Entry entry = (Map.Entry)it.next();
                String k = (String)entry.getKey();
                String v = (String)entry.getValue();
                if(!"sign".equals(k) && null != v && !"".equals(v)) {
                    sb.append(k + "=" + v + "&");
                }
            }
    
            sb.append("key=" + API_KEY);
    
            //    
            String mysign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toLowerCase();
            String tenpaySign = ((String)packageParams.get("sign")).toLowerCase();
    
            //System.out.println(tenpaySign + "    " + mysign);
            return tenpaySign.equals(mysign);
        }
    
        private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
                "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
    }
    
    
    

    XMLUtil4jdom
    package com.sj.Utils;
    
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.input.SAXBuilder;
    
    import java.io.ByteArrayInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    
    public class XMLUtil4jdom {
        /**
         *   xml,          。           ,           xml  。
         * @param strxml
         * @return
         * @throws JDOMException
         * @throws IOException
         */
        public static Map doXMLParse(String strxml) throws JDOMException, IOException {
            strxml = strxml.replaceFirst("encoding=\".*\"", "encoding=\"UTF-8\"");
    
            if(null == strxml || "".equals(strxml)) {
                return null;
            }
    
            Map m = new HashMap();
            InputStream in = new ByteArrayInputStream(strxml.getBytes("UTF-8"));
            SAXBuilder builder = new SAXBuilder();
            Document doc = builder.build(in);
            Element root = doc.getRootElement();
            List list = root.getChildren();
            Iterator it = list.iterator();
            while(it.hasNext()) {
                Element e = (Element) it.next();
                String k = e.getName();
                String v = "";
                List children = e.getChildren();
                if(children.isEmpty()) {
                    v = e.getTextNormalize();
                } else {
                    v = XMLUtil4jdom.getChildrenText(children);
                }
    
                m.put(k, v);
            }
    
            //   
            in.close();
    
            return m;
        }
    
        /**
         *       xml
         * @param children
         * @return String
         */
        public static String getChildrenText(List children) {
            StringBuffer sb = new StringBuffer();
            if(!children.isEmpty()) {
                Iterator it = children.iterator();
                while(it.hasNext()) {
                    Element e = (Element) it.next();
                    String name = e.getName();
                    String value = e.getTextNormalize();
                    List list = e.getChildren();
                    sb.append("");
                    if(!list.isEmpty()) {
                        sb.append(XMLUtil4jdom.getChildrenText(list));
                    }
                    sb.append(value);
                    sb.append("" + name + ">");
                }
            }
    
            return sb.toString();
        }
    
    }
    
    

    WxCusInfoBean
    package com.sj.bean;
    
    import java.math.BigDecimal;
    
    public class WxCusInfoBean {
        private String appId;
        private String apiKey;//  
        private String orderId;
        private BigDecimal payAmount;// 
        private  String body;//    
        private String mchId;
    
        public String getMchId() {
            return mchId;
        }
    
        public void setMchId(String mchId) {
            this.mchId = mchId;
        }
    
        public String getAppId() {
            return appId;
        }
    
        public void setAppId(String appId) {
            this.appId = appId;
        }
    
        public String getApiKey() {
            return apiKey;
        }
    
        public void setApiKey(String apiKey) {
            this.apiKey = apiKey;
        }
    
        public BigDecimal getPayAmount() {
            return payAmount;
        }
    
        public void setPayAmount(BigDecimal payAmount) {
            this.payAmount = payAmount;
        }
    
        public String getBody() {
            return body;
        }
    
        public void setBody(String body) {
            this.body = body;
        }
    
    
    
        public String getOrderId() {
            return orderId;
        }
    
        public void setOrderId(String orderId) {
            this.orderId = orderId;
        }
    }
    
    

    URLCode
    package com.sj.bean;
    
    public class URLCode {
        private String urlCode;
        private String Erorr;
        private  String prepayId;
        private String nonce_str;
        private String sign;
    
        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 getUrlCode() {
            return urlCode;
        }
    
        public void setUrlCode(String urlCode) {
            this.urlCode = urlCode;
        }
    
        public String getErorr() {
            return Erorr;
        }
    
        public void setErorr(String erorr) {
            Erorr = erorr;
        }
    
        public String getPrepayId() {
            return prepayId;
        }
    
        public void setPrepayId(String prepayId) {
            this.prepayId = prepayId;
        }
    }
    
    

    getOrderCode
    package com.sj.model;
    
    public class getOrderCode {
        private String nonce_str;
        private String sign;
        private String appId;
        private String orderId;
        private String mchId;
        private String apiKey;
    
        public String getApiKey() {
            return apiKey;
        }
    
        public void setApiKey(String apiKey) {
            this.apiKey = apiKey;
        }
    
        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 getAppId() {
            return appId;
        }
    
        public void setAppId(String appId) {
            this.appId = appId;
        }
    
        public String getOrderId() {
            return orderId;
        }
    
        public void setOrderId(String orderId) {
            this.orderId = orderId;
        }
    
        public String getMchId() {
            return mchId;
        }
    
        public void setMchId(String mchId) {
            this.mchId = mchId;
        }
    }
    
    

    returnOrderCode
    package com.sj.bean;
    
    public class returnOrderCode {
        private String return_code;
        private String return_msg;
        private String err_code;
        private  String err_code_des;
        private String trade_state_desc;
    
        public String getTrade_state_desc() {
            return trade_state_desc;
        }
    
        public void setTrade_state_desc(String trade_state_desc) {
            this.trade_state_desc = trade_state_desc;
        }
    
        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 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;
        }
    }