App支付java后台使用EBS5_外联平台对账

手机支付也称为移动支付,因为有支付功能,所以相应的也需要有支付对账功能。
这里介绍的是以建设银行为主账号,在window上使用EBS5_外联平台中的5W1002商户支付流水查询对支付订单进行对账。

外联平台通过https通讯方式与网银系统后台进行通讯。

企业财务软件接口与外联平台采用两种通讯方式,一是TCP/IP的Socket通讯方式,二是http通讯方式。
我们选择方式一,使用Socket方式从本地连接外联平台

按操作文档启动外联平台

  1. 获取商户号,操作员号,密码
    private static final String CUST_ID = "商户号";//商户号
    private static final String USER_ID = "操作员号";//操作员号
    private static final String PASSWORD = "密码";//密码

注意:需要把上面代码中的中文替换为自己的账号密码

  1. 建立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地址与端口号,来替换掉上面代码中的中文

  1. 设置请求序列码,必须要纯数字,这里用当前时间的毫秒数作为序列码
private String makeOrderNum(){
        Date date=new Date();
        return String.valueOf(date.getTime());
    }
  1. 拼接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;
    }
  1. 调用方法
@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字段。解析这个字段,即可进行对账。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值