关于对接农业银行支付的问题

发表于:2020-3-04 14:23

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:累人猿    来源:博客园

  农业银行对接会给一个银企通平台的安装程序,然后找一台window系统的服务器安装作为前置机。
  附录:银企通的配置(本地服务器配置银行会提供给,默认TCP协议,HTTP协议虽然有选项但是不支持,默认占用前置机的15999端口,ERP模式下可以自己修改)


  然后对接支付的主要问题就是给前置机的IP地址的15999端口发送要求格式的报文就行了,端口会根据报文中的交易码自动判断当前属于什么交易。
  报文就不贴了,对接的时候跟银行技术人员多沟通下,问问他们报文的一些注意事项。
//报文拼接可以选择dom4j
Element root = DocumentHelper.createElement("ap"); //根节点
root.addElement("CCTransCode").addText("CFRT02");//交易代码
root.addElement("ProductID").addText("ICC");//产品标志
root.addElement("ChannelType").addText("ERP");//渠道标志
return root.asXML();

/**
* 请求数据:加密标识(1加密,0不加密) + 请求xml数据的长度(默认7位,不够补空格) + 请求的xml
public static String genRequestData(String s) throws Exception {
return "0" + String.format("%1$-6s", s.getBytes("gbk").length) + s;
}
  //报文发送时前面会有一个 2-6位的加密标志作为报文头,这个和银行确认下是否加密,要以gbk编码发送给前置机,从网上找的材料意思是前置机是gbk编码的,utf8加密应该会报错
/**
* TCP报文发送
* @param url
* @param port
* @param data
* @return
* @throws Exception
*/
public static String socketSendAndReceive(String url, int port, String data) throws Exception {
System.out.println("请求数据:" + data);
Socket socket = new Socket(url, port);
OutputStream bw = socket.getOutputStream();
bw.write(data.getBytes("gbk"));
bw.flush();
InputStream ips = socket.getInputStream();
StringBuffer sb = new StringBuffer();
int len = 0;
byte[] buf = new byte[1024];
while ((len = ips.read(buf)) != -1) {
sb.append(new String(buf, 0, len, "gbk"));
}
bw.close();
ips.close();
socket.close();
return sb.toString();
}
 
/**
* 把XML无脑解析为MAP
*
* @param msg
* @author jieYW
* @date 2018/5/29
* @return com.mind.pay.abc.ap.ApXmlBuilder
*/
public static Map<String,Object> parseXml(String msg)throws Exception {
Map<String,Object> resultMap=new HashMap<>();
msg=msg.substring(msg.indexOf("<"));
InputStream inputStream = new ByteArrayInputStream(msg.getBytes("UTF-8"));
SAXReader reader = new SAXReader();
Document document = reader.read(inputStream);
Element root = document.getRootElement();
List<Element> elementList = root.elements();
// 遍历所有子节点
resultMap=getAllElements(elementList,resultMap);
// 释放资源
inputStream.close();
inputStream = null;
return resultMap;
}
private static Map<String, Object> getAllElements(List<Element> childElements,Map<String,Object> mapEle) {
for (Element ele : childElements) {
mapEle.put(ele.getName(), ele.getText());
if(ele.elements().size()>0){
mapEle = getAllElements(ele.elements(), mapEle);
}
}
return mapEle;
}

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号