Пример #1
0
  private static MsgBean decryptANDverify(String res) {

    String msg_sign_enc = res.split("\\|")[0];
    String key_3des_enc = res.split("\\|")[1];

    // 解密密钥
    String key_3des = RSA.decrypt(key_3des_enc, mer_pfx_key, mer_pfx_pass);

    // 解密报文
    String msg_sign = TripleDes.decrypt(key_3des, msg_sign_enc);
    MsgBean res_bean = new MsgBean();
    res_bean.toBean(msg_sign);
    System.out.println("res:" + res_bean.toXml());

    // 验签
    String dna_sign_msg = res_bean.getMSG_SIGN();
    res_bean.setMSG_SIGN("");
    String verify =
        Strings.isNullOrEmpty(res_bean.getVERSION()) ? res_bean.toXml() : res_bean.toSign();
    System.out.println("verify:" + verify);
    if (!RSA.verify(dna_sign_msg, dna_pub_key, verify)) {
      logger.error("验签失败");
      res_bean.setTRANS_STATE("00A0");
    }
    return res_bean;
  }
Пример #2
0
  // 代收查询
  public static void gather_query() {

    MsgBean req_bean = new MsgBean();
    req_bean.setVERSION("2.0");
    req_bean.setMSG_TYPE("200002");
    req_bean.setBATCH_NO("A43A424B50D87B"); // 同代收交易请求的批次号
    req_bean.setUSER_NAME("13728096874"); // 系统后台登录名

    /*MsgBody body1 = new MsgBody();
    body1.setQUERY_NO_FLAG("1");
    body1.setMER_ORDER_NO("");
    body1.setMER_SEQ_NO("");
    body1.setRETURN_URL("http://10.123.18.44:8080/notifyasyn?beanName=PayEcoNotifyHome&ENCODING=utf-8");
    req_bean.getBODYS().add(body1);*/

    //		MsgBody body2 = new MsgBody();
    //		body2.setQUERY_NO_FLAG("1");
    //		body2.setMER_ORDER_NO("MONBE932A83421E6C");//KK78965421354
    //		req_bean.getBODYS().add(body2);

    String res = sendAndRead(signANDencrypt(req_bean));

    MsgBean res_bean = decryptANDverify(res);

    if ("0000".equals(res_bean.getTRANS_STATE())) {
      System.out.println("请求成功");
    }
    System.out.println(res_bean.toXml());
  }
Пример #3
0
  // 认证
  public static void verify() throws Exception {

    MsgBean req_bean = new MsgBean();
    req_bean.setVERSION("2.0");
    req_bean.setMSG_TYPE("300001");
    String batch_no =
        new String(Base64.decode(Util.generateKey(99999, 14))); // 每笔订单不可重复,建议:公司简称缩写+yymmdd+流水号
    req_bean.setBATCH_NO(batch_no);
    req_bean.setUSER_NAME("13728096874"); // 系统后台登录名

    MsgBody body = new MsgBody();
    body.setSN("101000001"); // 流水号,同一批次不重复即可
    body.setACC_NO("6222023602076055577"); // 必填
    body.setACC_NAME("李四123"); // 必填
    //		body.setACC_PROVINCE("广东");
    //		body.setACC_CITY("广州");
    body.setAMOUNT("1"); // 不必填:填写一个(0,5)之间的数值;不填写时随机取(0,5)之间的数值
    body.setCNY("CNY");
    body.setREMARK("批量接口2 Test");
    body.setMOBILE_NO("13316818027"); // 支付手机号,必填
    body.setID_NO(""); // 必填
    body.setID_TYPE("0"); // 必填
    body.setRETURN_URL("");
    body.setMER_ORDER_NO("MON" + batch_no);
    body.setTRANS_DESC("认证测试"); // 首笔外呼播报语音内容
    req_bean.getBODYS().add(body);

    /*	MsgBody body2 = new MsgBody();
    body2.setSN("101000002");
    body2.setACC_NO("6222023602076096878");
    body2.setACC_NAME("李是");
    body2.setAMOUNT("2");
    req_bean.getBODYS().add(body2);

    MsgBody body3 = new MsgBody();
    body3.setSN("0000000000000003");
    body3.setACC_NO("6225887800100101");
    body3.setACC_NAME("王午");
    body3.setAMOUNT("2.2");
    req_bean.getBODYS().add(body3);*/

    String res = sendAndRead(signANDencrypt(req_bean));

    MsgBean res_bean = decryptANDverify(res);

    if ("0000".equals(res_bean.getTRANS_STATE())) {
      System.out.println("请求成功");
    }
    System.out.println(res_bean.toXml());
  }
Пример #4
0
  // 代付
  public static void pay() throws Exception {

    MsgBean req_bean = new MsgBean();
    req_bean.setVERSION("2.1");
    req_bean.setMSG_TYPE("100001");
    req_bean.setBATCH_NO(
        new String(Base64.decode(Util.generateKey(99999, 8)))); // 每笔订单不可重复,建议:公司简称缩写+yymmdd+流水号
    req_bean.setUSER_NAME("13728096874"); // 系统后台登录名

    MsgBody body = new MsgBody();
    body.setSN("0000000001"); // 流水号,同一批次不重复即可
    body.setACC_NO("6222023602076055577");
    body.setACC_NAME("李四");
    body.setAMOUNT("1");
    /*body.setACC_PROVINCE("上海市");
    body.setACC_CITY("上海市");*/
    body.setBANK_NAME("交通银行");
    body.setACC_PROP("0");
    body.setMER_ORDER_NO("DF1234567811");
    req_bean.getBODYS().add(body);

    /*MsgBody body2 = new MsgBody();
    body2.setSN("0000000000000002");
    body2.setACC_NO("6013821900046267618");
    body2.setACC_NAME("李氏2");
    body2.setAMOUNT("256.58");
    body2.setBANK_NAME("中国银行股份有限公司广州天文苑支行");
    req_bean.getBODYS().add(body2);

    MsgBody body3 = new MsgBody();
    body3.setSN("0000000000000003");
    body3.setACC_NO("6228480082238310112");
    body3.setACC_NAME("王午3");
    body3.setAMOUNT("11.2");
    body3.setBANK_NAME("农业银行同福东路支行");
    req_bean.getBODYS().add(body3);*/

    String res = sendAndRead(signANDencrypt(req_bean));

    MsgBean res_bean = decryptANDverify(res);

    if ("0000".equals(res_bean.getTRANS_STATE())) {
      System.out.println("请求成功");
    }
    System.out.println(res_bean.toXml());
  }
Пример #5
0
  // 认证查询
  public static void verify_query() throws Exception {

    MsgBean req_bean = new MsgBean();
    req_bean.setVERSION("2.0");
    req_bean.setMSG_TYPE("300002");
    String batch_no = new String(Base64.decode(Util.generateKey(99999, 14)));
    req_bean.setBATCH_NO(batch_no);
    req_bean.setUSER_NAME("13728096874"); // 系统后台登录名

    MsgBody body = new MsgBody();
    body.setSN("101000001");
    body.setACC_NO("6222023602076055577");
    body.setACC_NAME("李四123");
    //		body.setACC_PROVINCE("广东");
    //		body.setACC_CITY("广州");

    body.setID_NO("");
    body.setID_TYPE("0");
    body.setRESERVE("Y");
    req_bean.getBODYS().add(body);

    /*	MsgBody body2 = new MsgBody();
    body2.setSN("101000002");
    body2.setACC_NO("6222023602076096878");
    body2.setACC_NAME("李是");
    body2.setAMOUNT("2");
    req_bean.getBODYS().add(body2);

    MsgBody body3 = new MsgBody();
    body3.setSN("0000000000000003");
    body3.setACC_NO("6225887800100101");
    body3.setACC_NAME("王午");
    body3.setAMOUNT("2.2");
    req_bean.getBODYS().add(body3);*/

    String res = sendAndRead(signANDencrypt(req_bean));

    MsgBean res_bean = decryptANDverify(res);

    if ("0000".equals(res_bean.getTRANS_STATE())) {
      System.out.println("请求成功");
    }
    System.out.println(res_bean.toXml());
  }
Пример #6
0
  // 查询银行卡所属银行
  public static void queryAccountInfo() {

    MsgBean req_bean = new MsgBean();
    req_bean.setVERSION("2.0");
    req_bean.setMSG_TYPE("400001");
    req_bean.setBATCH_NO("99EE936559D864");
    req_bean.setUSER_NAME("13728096874"); // 系统后台登录名

    MsgBody body = new MsgBody();
    body.setSN("101000004");
    body.setACC_NO("6225380048403812");
    req_bean.getBODYS().add(body);

    String res = sendAndRead(signANDencrypt(req_bean));

    MsgBean res_bean = decryptANDverify(res);

    if ("0000".equals(res_bean.getTRANS_STATE())) {
      System.out.println("请求成功");
    }
    System.out.println(res_bean.toXml());
  }
Пример #7
0
  // 发送短信验证码
  public static void send_message() throws Exception {
    MsgBean req_bean = new MsgBean();
    req_bean.setVERSION("2.0");
    req_bean.setMSG_TYPE("500001"); // 发送短信
    req_bean.setBATCH_NO(
        new String(Base64.decode(Util.generateKey(99999, 14)))); // 每笔订单不可重复,建议:公司简称缩写+yymmdd+流水号
    req_bean.setUSER_NAME("13728096874"); // 系统后台登录名

    MsgBody body = new MsgBody();
    body.setACC_NO("6222023602076055577"); // 必填
    body.setMOBILE_NO("13800138000"); // 系统默认发送短信验证码到用户外呼验密绑定的手机号
    body.setTRANS_DESC("短信内容发送"); // 短信内容不超过40字
    req_bean.getBODYS().add(body);

    String res = sendAndRead(signANDencrypt(req_bean));

    MsgBean res_bean = decryptANDverify(res);

    if ("0000".equals(res_bean.getTRANS_STATE())) {
      System.out.println("请求成功");
    }
    System.out.println(res_bean.toXml());
  }
Пример #8
0
  // 代付查询
  public static void pay_query() {

    MsgBean req_bean = new MsgBean();
    req_bean.setVERSION("2.1");
    req_bean.setMSG_TYPE("100002");
    req_bean.setBATCH_NO("A7762217"); // 同代付交易请求批次号
    req_bean.setUSER_NAME("13728096874"); // 系统后台登录名

    //		MsgBody body = new MsgBody();
    //		body.setQUERY_NO_FLAG("0");
    //		body.setMER_ORDER_NO("DF123456789");
    //		req_bean.getBODYS().add(body);
    String res = sendAndRead(signANDencrypt(req_bean));

    MsgBean res_bean = decryptANDverify(res);

    if ("0000".equals(res_bean.getTRANS_STATE())) {
      System.out.println("请求成功");
    }
    System.out.println(res_bean.toXml());
  }
Пример #9
0
  private static String signANDencrypt(MsgBean req_bean) {

    // 商户签名

    System.out.println("before sign xml ==" + req_bean.toSign());
    System.out.println("msg sign = " + RSA.sign(req_bean.toSign(), mer_pfx_key, mer_pfx_pass));
    req_bean.setMSG_SIGN(RSA.sign(req_bean.toSign(), mer_pfx_key, mer_pfx_pass));
    System.out.println("req:" + req_bean.toXml());

    // 加密报文
    String key = Util.generateKey(9999, 24);
    System.out.println("key:" + key);
    String req_body_enc = TripleDes.encrypt(key, req_bean.toXml());
    System.out.println("req_body_enc:" + req_body_enc);
    // 加密密钥
    String req_key_enc = RSA.encrypt(key, dna_pub_key);
    System.out.println("req_key_enc:" + req_key_enc);
    System.out.println("signANDencrypt:" + req_body_enc + "|" + req_key_enc);
    return req_body_enc + "|" + req_key_enc;
  }
Пример #10
0
  // 代收
  public static void gather() throws Exception {

    MsgBean req_bean = new MsgBean();
    req_bean.setVERSION("2.0");
    req_bean.setMSG_TYPE("200001");
    req_bean.setBATCH_NO(
        "D023D92EBC6CBA"); // 1.与send_message接口的BATCH_NO一致;2.每笔订单不可重复,建议:公司简称缩写+yymmdd+流水号
    req_bean.setUSER_NAME("13728096874"); // 系统后台登录名

    MsgBody body = new MsgBody();
    body.setSN("101000001"); // 流水号,同一批次不重复即可
    body.setACC_NO("6222023602076055577"); // 必填
    body.setACC_NAME("李四"); // 必填
    body.setID_NO(""); // 开户证件号
    body.setID_TYPE("0"); // 证件类型
    body.setAMOUNT("1"); // 必填
    body.setCNY("CNY");
    body.setREMARK("测试2");
    body.setMOBILE_NO(""); // 支付手机号
    body.setRETURN_URL(""); // 异步通知地址
    body.setMER_ORDER_NO("");
    body.setMER_SEQ_NO("");
    body.setTRANS_DESC("批量接口 交易描述"); // 首笔外呼播报语音内容
    body.setSMS_CODE("123456"); // 短信码
    req_bean.getBODYS().add(body);

    /*	MsgBody body2 = new MsgBody();
    body2.setSN("101000002");
    body2.setACC_NO("6222023602076096878");
    body2.setACC_NAME("李是");
    body2.setAMOUNT("2");
    req_bean.getBODYS().add(body2);

    MsgBody body3 = new MsgBody();
    body3.setSN("0000000000000003");
    body3.setACC_NO("6225887800100101");
    body3.setACC_NAME("王午");
    body3.setAMOUNT("2.2");
    req_bean.getBODYS().add(body3);*/

    String res = sendAndRead(signANDencrypt(req_bean));

    MsgBean res_bean = decryptANDverify(res);

    if ("0000".equals(res_bean.getTRANS_STATE())) {
      System.out.println("请求成功");
    }
    System.out.println(
        "请求结果:"
            + res_bean.getBODYS().get(0).getPAY_STATE()
            + "-"
            + res_bean.getBODYS().get(0).getREMARK());
    System.out.println(res_bean.toXml());
  }