Browse Source

交通银行

master
zhaoyiran 1 year ago
parent
commit
9bd451ac93
  1. 4
      src/main/java/com/win/bank/domain/BankDO.java
  2. 132
      src/main/java/com/win/bank/service/bocom/BocomServiceImpl.java
  3. 56
      src/main/java/com/win/bank/service/demo/Student.java
  4. 20
      src/main/java/com/win/bank/service/demo/XStreamUtil.java
  5. 35
      src/main/java/com/win/bank/utils/XmlUtil.java
  6. 15
      src/main/resources/application-dev.yml

4
src/main/java/com/win/bank/domain/BankDO.java

@ -37,6 +37,10 @@ public class BankDO extends BaseDO {
* 付款账号
*/
private String payAccount;
/**
* 付款人户名
*/
private String payUserName;
/**
* 收款账号
*/

132
src/main/java/com/win/bank/service/bocom/BocomServiceImpl.java

@ -1,28 +1,156 @@
package com.win.bank.service.bocom;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;
import com.win.bank.domain.BankDO;
import com.win.bank.enums.PaymentStatusEnum;
import com.win.bank.service.BaseBankService;
import com.win.bank.utils.XmlUtil;
/**
* 交通银行
*/
@Service
public class BocomServiceImpl implements BaseBankService {
@Value("${bocom.corpNo}")
private String corpNo;
@Value("${bocom.userNo}")
private String userNo;
@Value("${bocom.ip}")
private String ip;
@Value("${bocom.port}")
private String port;
private static final int CONNECT_TIMEOUT = 15000;
public static final String DEFAULT_CHARSET = "GBK";
private static final String SUCCESS_CODE = "0000";
private static final Logger logger = LoggerFactory.getLogger(BocomServiceImpl.class);
@Override
public BankDO payment(BankDO bankDO) {
logger.debug("交通银行 payment");
String trCode = "210201";
String head = generateHeadMessage(trCode, bankDO.getId().toString());
StringBuilder body = new StringBuilder();
body.append("<body>");
body.append("<pay_acno>").append(bankDO.getPayAccount().replaceAll("\\s+", "")).append("</pay_acno>");
body.append("<pay_acname>").append(bankDO.getPayUserName()).append("</pay_acname>");
body.append("<rcv_bank_name>").append(bankDO.getRcvBankName()).append("</rcv_bank_name>");
body.append("<rcv_acno>").append(bankDO.getRcvAccount().replaceAll("\\s+", "")).append("</rcv_acno>");
body.append("<rcv_acname>").append(bankDO.getRcvUserName()).append("</rcv_acname>");
if (StringUtils.isNotEmpty(bankDO.getRcvBankNumber())) {
body.append("<rcv_bank_no>").append(bankDO.getRcvBankNumber()).append("</rcv_bank_no>");
}
body.append("<cur_code>CNY</cur_code>");
body.append("<amt>").append(bankDO.getAmount()).append("</amt>");
body.append("<cert_no>").append(bankDO.getId()).append("</cert_no>");
if (StringUtils.isNotEmpty(bankDO.getPurpose())) {
body.append("<summary>").append(bankDO.getPurpose()).append("</summary>");
}
String bankFlag = "0";
if (StringUtils.isNotEmpty(bankDO.getRcvBankName()) && !bankDO.getRcvBankName().contains("交通银行")) {
bankFlag = "1";
}
body.append("<bank_flag>").append(bankFlag).append("</bank_flag>");
body.append("</body>");
String response = sendRequest(head, body.toString());
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new StringReader(response)));
Element headElement = (Element)document.getDocumentElement().getElementsByTagName("head").item(0);
String particularCode = headElement.getElementsByTagName("particular_code").item(0).getTextContent();
if (SUCCESS_CODE.equals(particularCode)) {
bankDO.setStatus(PaymentStatusEnum.SUCCESS.getCode());
String serialNumber = headElement.getElementsByTagName("serial_no").item(0).getTextContent();
bankDO.setSerialNumber(serialNumber);
} else {
bankDO.setStatus(PaymentStatusEnum.FAILED.getCode());
}
String message = headElement.getElementsByTagName("particular_info").item(0).getTextContent();
bankDO.setMessage(message);
} catch (Exception e) {
e.printStackTrace();
}
return bankDO;
}
@Override
public BankDO queryPaymentResult(BankDO bankDO) {
logger.debug("交通银行 queryPaymentResult");
return bankDO;
}
private String generateHeadMessage(String trCode, String reqNo) {
SimpleDateFormat sdfd = new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat sdft = new SimpleDateFormat("HHmmss");
Date date = new Date();
StringBuilder head = new StringBuilder();
head.append("<head><tr_code>").append(trCode).append("</tr_code><corp_no>").append(corpNo).append("</corp_no><user_no>").append(userNo).append("</user_no><req_no>").append(reqNo)
.append("</req_no><tr_acdt>").append(sdfd.format(date)).append("</tr_acdt><tr_time>").append(sdft.format(date))
.append("</tr_time><atom_tr_count>1</atom_tr_count><channel>0</channel></head>");
return head.toString();
}
private String sendRequest(String head, String body) {
String message = "<ap>" + head + body + "</ap>";
logger.debug("发给银行的数据:" + XmlUtil.formatXML(message));
String response = "";
try {
int soTimeOut = CONNECT_TIMEOUT;
Socket socket = new Socket(ip, Integer.parseInt(port));
socket.setSoTimeout(soTimeOut);
byte[] messageByte = message.getBytes(DEFAULT_CHARSET);
// 7位头
String length = "0" + messageByte.length + " ";
length = length.substring(0, 7);
message = length + message;
messageByte = message.getBytes(DEFAULT_CHARSET);
BufferedOutputStream wr = new BufferedOutputStream(socket.getOutputStream());
wr.write(messageByte);
wr.flush();
BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream(), DEFAULT_CHARSET));
String line = null;
StringBuffer sb = new StringBuffer();
while ((line = rd.readLine()) != null) {
sb.append(line);
}
response = new String(sb.toString().getBytes());
wr.close();
rd.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
if (StringUtils.isNotEmpty(response)) {
response = response.substring(response.indexOf("<"));
logger.debug("收到银行返回的数据:" + XmlUtil.formatXML(response));
return response;
}
return response;
}
}

56
src/main/java/com/win/bank/service/demo/Student.java

@ -1,56 +0,0 @@
package com.win.bank.service.demo;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Student {
private String name; // 姓名
private String sex; // 性别
private int number; // 学号
private String className; // 班级
public Student(){}
public Student(String string, String string2, int i, String string3) {
this.name = string;
this.sex = string2;
this.className = string3;
}
@XmlElement(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement(name = "sex")
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@XmlElement(name = "number")
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
@XmlElement(name = "className")
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
}

20
src/main/java/com/win/bank/service/demo/XStreamUtil.java

@ -1,20 +0,0 @@
package com.win.bank.service.demo;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
public class XStreamUtil {
public static String marshal(Object object, Class<?> clazz) throws JAXBException {
JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter writer = new StringWriter();
marshaller.marshal(object, writer);
return writer.toString();
}
}

35
src/main/java/com/win/bank/service/demo/Test.java → src/main/java/com/win/bank/utils/XmlUtil.java

@ -1,28 +1,24 @@
package com.win.bank.service.demo;
package com.win.bank.utils;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
* @author admin
*/
public class Test {
public static void main(String[] args) throws Exception {
Student st = new Student("张三", "男", 10001, "尖");
String xml = XStreamUtil.marshal(st, Student.class);
System.out.println(xml);
// System.out.println(formatXML(xml));
}
public static String formatXML(String inputXML) throws Exception {
public class XmlUtil {
public static String formatXML(String inputXML) {
SAXReader reader = new SAXReader();
Document document = reader.read(new StringReader(inputXML));
Document document = null;
try {
document = reader.read(new StringReader(inputXML));
} catch (DocumentException e) {
throw new RuntimeException(e);
}
String requestXML = null;
XMLWriter writer = null;
if (document != null) {
@ -30,8 +26,12 @@ public class Test {
StringWriter stringWriter = new StringWriter();
OutputFormat format = new OutputFormat(" ", true);
writer = new XMLWriter(stringWriter, format);
writer.write(document);
writer.flush();
try {
writer.write(document);
writer.flush();
} catch (IOException e) {
throw new RuntimeException(e);
}
requestXML = stringWriter.getBuffer().toString();
} finally {
if (writer != null) {
@ -42,7 +42,6 @@ public class Test {
}
}
}
return requestXML;
return requestXML.substring(requestXML.indexOf(">") + 1);
}
}

15
src/main/resources/application-dev.yml

@ -41,6 +41,17 @@ logging:
# 招商银行
cmb:
# 用户ID,前置机查看
uid: N002986522
busMod: 00002
url: http://192.168.0.142:8080/cdcserver/api/v2
# 业务模式,前置机查看
busMod: "00002"
url: http://192.168.0.142:8080/cdcserver/api/v2
# 交通银行
bocom:
ip: 192.168.0.142
port: 30010
# 企业代码
corpNo: "0020005695"
# 企业用户号
userNo: "00003"

Loading…
Cancel
Save