浦发银行前置机配置很像工商银行。
来回请求的XML居然要加密和解密。。。。。太不人性,太啰嗦了。
调试了一下,终于OK了。
记录几个过程:
//浦发银行签名及解签名public static InputStream send_sign(byte[] content,//<body>String contentType,//INFOSEC_SIGN/1.0String url//ip:port)throws IOException {URL urll = new URL(url);HttpURLConnection con1 = (HttpURLConnection) urll.openConnection();con1.setDoInput(true);con1.setDoOutput(true);con1.setRequestMethod("POST");con1.setRequestProperty("Content-Type", contentType);con1.setRequestProperty("Content-Length",String.valueOf(content.length));t();OutputStream().write(content);OutputStream().flush();InputStream in = InputStream();return in;}
乱码转换,注意GB2312
//InputStream 转为Stringpublic String convertStreamToString(InputStream is) throws Exception {BufferedReader reader = new BufferedReader(new InputStreamReader(is,"GB2312"));StringBuilder sb = new StringBuilder();String line = null;try {while ((line = adLine()) != null) {
// sb.append(line + "/n");sb.append(line );}} catch (IOException e) {e.printStackTrace();} finally {try {is.close();} catch (IOException e) {e.printStackTrace();}}String();}
String xml_send = String.format("%-6s%s", xml_real.length()+6, xml_real);//3508 <?xml version="1.0" 右侧补充空格
// String xml_send1 = String.format("%6s%s", xml_request.length()+6, xml_request);// 3508<?xml version="1.0"
// String xml_send2 = String.format("%06d%s", Bytes().length+6, xml_request);//003508<?xml version= //文档这个方式不对!!!
JAVA对象转为XML对象:
//拼接完整请求XML 以取余额为例,测试前置机private String getxml(String tcode,String xml_body) {SimpleDateFormat format_date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String str_date = format_date.format(new Date());SimpleDateFormat format_date1 = new SimpleDateFormat("yyyy-MM-dd");String str_d = format_date1.format(new Date()).replace("-","");SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss:SSS");String str_t = format.format(new Date()).replace(":","");System.out.println("Time is:"+str_date);String packetID = (str_d+str_t).substring(0,16);//System.out.println("packetID is:"+packetID);String masterID = "2000040752";//企业号String accno = "952A9997220008092";//Blow 请求形成XML 测试 Req_Balance_4402 实际未来需要修改,并抽象,body部分不同,其他head都一致String transCode = "4402";Req_Balance_4402 req = new Req_Balance_4402();Req_Balance_4402.Head head = new Req_Balance_4402.Head();head.setTransCode(transCode);head.setSignFlag(1);head.setMasterID(masterID);head.setPacketID(packetID);head.setTimeStamp(str_date);req.setHead(head);Req_Balance_4402.Rq rq = new Req_Balance_4402.Rq();Req_Balance_4402.ALists lists = new Req_Balance_4402.ALists();List<String> acntNo = new ArrayList();acntNo.add(accno);Req_Balance_4402.AList list = new Req_Balance_4402.AList(acntNo);lists.setList(list);rq.setLists(lists);req.setRq(rq);XStreamUtil xStreamUtil = new XStreamUtil();XStream xs = xStreamUtil.buildCOMBHINAXStream();Map aliases = new HashMap();aliases.put("packet", Req_Balance_4402.class);XStreamMarshaller unmarshaller = xStreamUtil.buildXStreamMarshaller();unmarshaller.setAliases(aliases);String xml_test = "<?xml version='1.0' encoding='GB2312'?>" + xs.toXML(req); //System.out.println(xml_test);//按照单个功能代码的说明,形成如下格式,实际上是不能用的!!!!//因为实际上要先形成body内容,而后body去签名,取得sign字段,再形成发送格式的XML 放到signature字段
// <?xml version='1.0' encoding='GB2312'?><packet>
// <head>
// <transCode>4402</transCode>
// <signFlag>1</signFlag>
// <packetID>2018011517255396</packetID>
// <masterID>2000040752</masterID>
// <timeStamp>2018-01-15 17:25:53</timeStamp>
// </head>
// <body>
// <lists name="acctList">
// <list>
// <acctNo>952A9997220008092</acctNo>
// </list>
// </lists>
// </body>
// </packet>//Up 请求形成XML 测试//BLow 修改后的,JAVA对象转XMLReq_sign_in re = new Req_sign_in();Req_sign_in.Head he = new Req_sign_in.Head();he.setTransCode(tcode);he.setSignFlag(1);he.setMasterID(masterID);he.setPacketID(packetID);he.setTimeStamp(str_date);re.setHead(he);Req_sign_in.Body bo = new Req_sign_in.Body();bo.setSignature(xml_body);re.setBody(bo);XStreamUtil xStrUtil = new XStreamUtil();XStream xst = xStrUtil.buildXStream();Map alis = new HashMap();aliases.put("packet", Req_sign_in.class);XStreamMarshaller unmarshaller1 = xStrUtil.buildXStreamMarshaller();unmarshaller1.setAliases(alis);String xml_temp = XML(re);xml_temp = place("n","");xml_temp = place(" ","");String xml_real = "<?xml version='1.0' encoding='GB2312'?>" + xml_temp; //System.out.println(xml_real);//Up 修改后的,JAVA对象转XML//BLow 旧测试
// String xml_request = "<?xml version='1.0' encoding='GB2312'?>" +
// "<packet>" +
// "<head>" +
// "<transCode>"+tcode+"</transCode>" +
// "<signFlag>1</signFlag>" +
// "<masterID>"+masterID+"</masterID>" +
// "<packetID>"+packetID+"</packetID>" +
// "<timeStamp>"+str_date+"</timeStamp>" +
// "</head>" +
// "<body><signature>" +
// xml_body +
// "</signature></body>"+
// "</packet>";//Up 旧测试String xml_send = String.format("%-6s%s", xml_real.length()+6, xml_real);//3508 <?xml version="1.0" 右侧补充空格
// String xml_send1 = String.format("%6s%s", xml_request.length()+6, xml_request);// 3508<?xml version="1.0"
// String xml_send2 = String.format("%06d%s", Bytes().length+6, xml_request);//003508<?xml version= //文档这个方式不对!!!return xml_send;}
//Step3.解签名 XML除去前面6位,然后用jsoup解析return_code为6个A时,读取signature;发送去解签postResult = postResult.substring(6);//去除前6个字符Document doc_result = Jsoup.parse(postResult);Element e_return_code = doc_result.select("returnCode").first();//返回结果String return_code = e_();if(!return_code.equals("AAAAAAA")){System.out.println("调用失败!");return;}Element e_sign = doc_result.select("signature").first();//查找第一个a元素String str_sign_re = ();byte[] srtbyte_result = str_Bytes();Integer postResult_len = srtbyte_result.length;String conType = "INFOSEC_VERIFY_SIGN/1.0; Content-Length/"+String()+";";InputStream in_result = send_sign(srtbyte_result,conType,http_sign_url);String xml_request_result = convertStreamToString(in_result);System.out.println("*****************************2:服务器解析结果******************************n");System.out.println(xml_request_result);System.out.println("*****************************3:中文乱码处理结果******************************n");String newStr1 = new String(xml_Bytes("GB2312"), "GB2312");System.out.println(newStr1);
// String newStr2 = String(entity1 , "GBK").trim();//Step4.解析html结果// Document doc_real = Jsoup.parse(xml_request_result,"utf-8");Document doc_real = Jsoup.parse(xml_request_result,"GB2312");
// System.out.println(doc_real.body());Elements elementList = ElementsByTag("list");
// System.out.println(elementList.size());if(ztype==2){Elements ele_totalCount = ElementsByTag("totalCount");Integer totalCount = 0;//总记录数totalCount = Integer.parseInt(ele_totalCount.select("totalCount").first().text().toString());//System.out.println("总记录数:"String());}for (Element element : elementList) {if(ztype==1){//4402余额结果// <sic>// <body>// <lists name="acctBalanceList">// <list>// <acctNo>952A9997220008092</acctNo>// <masterID>2489675304</masterID>// <reserveBalance>0.00</reserveBalance>// <freezeBalance>0.00</freezeBalance>// <cortrolBalance>0.00</cortrolBalance>// <canUseBalance>22259150.38</canUseBalance>// <overdraftBalance>0.00</overdraftBalance>// <balance>22259150.38</balance>// </list>// </lists>// </body>// </sic>String acctNo = "";String balance = "";String canUseBalance = "";//可用余额acctNo = element.select("acctNo").first().text().toString();//balance = element.select("balance").first().text().toString();//canUseBalance = element.select("canUseBalance").first().text().toString();//System.out.println("acctNo:"+acctNo+" balance :"+balance+" ");System.out.println("acctNo:"+acctNo+" canUseBalance :"+canUseBalance+" ");}else if(ztype==2){
// <lists name="HistoryList">
// <list>
// <voucherNo></voucherNo>
// <seqNo>999701700001</seqNo>
// <txAmount>2.13</txAmount>
// <balance>51827714.57</balance>
// <tranFlag>0</tranFlag>
// <transDate>20180102</transDate>
// <transTime>165952</transTime>
// <note>KM����0102170005</note>
// <remark>֧�����루���ʣ�</remark>
// <payeeBankNo>9520</payeeBankNo>
// <payeeBankName>�ַ����ݷ���Ӫҵ��</payeeBankName>
// <payeeAcctNo>952A9997220008349</payeeAcctNo>
// <payeeName>�ַ�2878487587</payeeName>
// <transCode>8801</transCode>
// <branchId>9520</branchId>
// <customerAcctNo></customerAcctNo>
// <payeeAcctType></payeeAcctType>
// <transCounter>99970170</transCounter>
// <authCounter></authCounter>
// <otherChar10></otherChar10>
// <otherChar40></otherChar40>
// <seqNum>1</seqNum>
// <revFlag>0</revFlag>
// </list>
// <list>
// <voucherNo></voucherNo>
// <seqNo>999701000001</seqNo>String seqNo = "";//唯一标识IDInteger tranFlag = 0;//借贷标志 0借 1贷Double txAmount = 0.00;//交易金额seqNo = element.select("seqNo").first().text().toString();//tranFlag=Integer.parseInt(element.select("tranFlag").first().text().toString());//txAmount = Double.parseDouble(element.select("txAmount").first().text().toString());System.out.println("seqNo:"+seqNo+" tranFlag :"String()+" txAmount: "String());}}} catch (Exception e) {e.printStackTrace();}}
本文发布于:2024-02-04 15:30:30,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170710576356713.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |