App支付java后台使用EBS5_外联平台对账
2019-02-18 17:04
417 查看
手机支付也称为移动支付,因为有支付功能,所以相应的也需要有支付对账功能。
这里介绍的是以建设银行为主账号,在window上使用EBS5_外联平台中的5W1002商户支付流水查询对支付订单进行对账。
外联平台通过https通讯方式与网银系统后台进行通讯。
企业财务软件接口与外联平台采用两种通讯方式,一是TCP/IP的Socket通讯方式,二是http通讯方式。
我们选择方式一,使用Socket方式从本地连接外联平台
按操作文档启动外联平台
- 获取商户号,操作员号,密码
private static final String CUST_ID = "商户号";//商户号 private static final String USER_ID = "操作员号";//操作员号 private static final String PASSWORD = "密码";//密码
注意:需要把上面代码中的中文替换为自己的账号密码
- 建立socket服务器
public String go(String xmlInfo) throws IOException { // 向服务器端发送请求,服务器IP地址和服务器监听的端口号 Socket client = new Socket("服务器IP地址", "端口号"); client.setSoTimeout(10000); // 通过printWriter 来向服务器发送消息 //此处添加连接时长,超时结束 PrintWriter printWriter = new PrintWriter(client.getOutputStream()); System.out.println("连接已建立..."); // 发送消息 printWriter.println(xmlInfo); printWriter.flush(); InputStreamReader streamReader = new InputStreamReader( client.getInputStream(),"GB18030"); // 链接数据串流,建立BufferedReader来读取,将BufferReader链接到InputStreamReder BufferedReader reader = new BufferedReader(streamReader); StringBuffer content = new StringBuffer(); int ch; while ((ch = reader.read()) != -1) { content.append((char) ch); } printWriter.close(); reader.close(); client.close(); return content.toString(); }
注意:需要填入自己的服务器ip地址与端口号,来替换掉上面代码中的中文
- 设置请求序列码,必须要纯数字,这里用当前时间的毫秒数作为序列码
private String makeOrderNum(){ Date date=new Date(); return String.valueOf(date.getTime()); }
- 拼接xml报文,这里选用5W1002接口
public String selectOrder(String order) throws IOException { // 拼接xml报文 StringBuilder sb = new StringBuilder(); String num = makeOrderNum(); sb.append("<?xml version='1.0' encoding='GB2312' standalone='yes' ?>"); sb.append("<TX>"); sb.append("<REQUEST_SN>" + num + "</REQUEST_SN>");// 请求序列码 sb.append("<CUST_ID>" + CUST_ID + "</CUST_ID>");// 客户号 sb.append("<USER_ID>" + USER_ID + "</USER_ID>");// 操作员号 sb.append("<PASSWORD>" + PASSWORD + "</PASSWORD>");// 密码 sb.append("<TX_CODE>5W1002</TX_CODE>");// 交易请求码 sb.append("<LANGUAGE>CN</LANGUAGE>");// 语言 sb.append("<TX_INFO>"); sb.append("<START></START>"); sb.append("<STARTHOUR></STARTHOUR>"); sb.append("<STARTMIN></STARTMIN>"); sb.append("<END></END>"); sb.append("<ENDHOUR></ENDHOUR>"); sb.append("<ENDMIN></ENDMIN>"); sb.append("<KIND>1</KIND>");//流水类型,0:未结流水 1:已结流水 sb.append("<ORDER>"+order+"</ORDER>"); sb.append("<ACCOUNT></ACCOUNT>"); sb.append("<DEXCEL>2</DEXCEL>"); sb.append("<MONEY></MONEY> "); sb.append("<NORDERBY>1</NORDERBY>"); sb.append("<PAGE></PAGE>"); sb.append(" <POS_CODE></POS_CODE>"); sb.append("<STATUS>3</STATUS>"); sb.append("<Mrch_No></Mrch_No>"); sb.append("</TX_INFO>"); sb.append("</TX>"); // } PayUtil c = new PayUtil(); String advice = c.go(sb.toString()); System.out.println("接收到服务器的消息 :" + advice); return advice; }
- 调用方法
@RequestMapping(value = "/doSearchAccountByOrder",method = RequestMethod.POST) @ResponseBody @ApiOperation("按订单号查询流水详情") @IgnoreClientToken @IgnoreUserToken public ObjectRestResponse<String> doSearchAccountByOrder( String order){ PayUtil c = null; String result=""; try { c = new PayUtil(); result= c.selectOrder(order); } catch (IOException e) { e.printStackTrace(); return new ObjectRestResponse<>(500,"获取失败"); }catch (DocumentException e){ e.printStackTrace(); return new ObjectRestResponse<>(500,"解析失败"); }catch (Exception e){ e.printStackTrace(); return new ObjectRestResponse<>(500,"服务异常"); } return new ObjectRestResponse<>(200,"获取成功").data(result); }
最终获取到的result是一段xml字段。解析这个字段,即可进行对账。
相关文章推荐
- 支付宝APP支付之Java后台生成签名具体步骤
- 支付宝APP支付(Java后台生成签名具体步骤)
- 微信APP支付(Java后台生成签名具体步骤)
- 移动App后台Java开发银联支付后台接口
- java后台实现支付宝支付接口和支付宝订单查询接口(前端为APP)
- 手把手教你完成App支付JAVA后台-支付宝支付JAVA
- 微信APP支付-Java后台实现
- Java后台使用支付宝进行支付实现---使用阿里提供的对应服务的支付宝接口
- 微信APP支付(IOS手机端+java后台)版
- 支付宝APP支付(Java后台生成签名具体步骤)
- 支付宝app支付java后台流程
- 微信app支付java后台流程、原理分析及nei网穿透 转载自(http://www.cnblogs.com/MrRightZhao/p/7930916.html)
- 手把手教你完成App支付JAVA后台-微信支付JAVA
- 微信APP支付(Java后台生成签名具体步骤)
- 支付宝APP支付之Java后台生成签名具体步骤
- 微信APP支付(Java后台生成签名具体步骤)
- 微信APP支付-Java后台实现
- 微信APP支付-Java后台实现
- 支付宝APP支付(IOS手机端+java后台)版
- android 集成支付宝app支付(原生态)-包括android前端与java后台