diff --git a/src/main/java/com/win/bank/domain/BankDO.java b/src/main/java/com/win/bank/domain/BankDO.java
index cd04e61..1046b5c 100644
--- a/src/main/java/com/win/bank/domain/BankDO.java
+++ b/src/main/java/com/win/bank/domain/BankDO.java
@@ -37,6 +37,10 @@ public class BankDO extends BaseDO {
* 付款账号
*/
private String payAccount;
+ /**
+ * 付款人户名
+ */
+ private String payUserName;
/**
* 收款账号
*/
diff --git a/src/main/java/com/win/bank/service/bocom/BocomServiceImpl.java b/src/main/java/com/win/bank/service/bocom/BocomServiceImpl.java
index 6c6cf87..f8c3812 100644
--- a/src/main/java/com/win/bank/service/bocom/BocomServiceImpl.java
+++ b/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.append("").append(bankDO.getPayAccount().replaceAll("\\s+", "")).append("");
+ body.append("").append(bankDO.getPayUserName()).append("");
+ body.append("").append(bankDO.getRcvBankName()).append("");
+ body.append("").append(bankDO.getRcvAccount().replaceAll("\\s+", "")).append("");
+ body.append("").append(bankDO.getRcvUserName()).append("");
+ if (StringUtils.isNotEmpty(bankDO.getRcvBankNumber())) {
+ body.append("").append(bankDO.getRcvBankNumber()).append("");
+ }
+ body.append("CNY");
+ body.append("").append(bankDO.getAmount()).append("");
+ body.append("").append(bankDO.getId()).append("");
+ if (StringUtils.isNotEmpty(bankDO.getPurpose())) {
+ body.append("").append(bankDO.getPurpose()).append("");
+ }
+ String bankFlag = "0";
+ if (StringUtils.isNotEmpty(bankDO.getRcvBankName()) && !bankDO.getRcvBankName().contains("交通银行")) {
+ bankFlag = "1";
+ }
+ body.append("").append(bankFlag).append("");
+ body.append("");
+
+ 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("").append(trCode).append("").append(corpNo).append("").append(userNo).append("").append(reqNo)
+ .append("").append(sdfd.format(date)).append("").append(sdft.format(date))
+ .append("10");
+ return head.toString();
+ }
+
+ private String sendRequest(String head, String body) {
+ String message = "" + head + body + "";
+ 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;
+ }
+
}
diff --git a/src/main/java/com/win/bank/service/demo/Student.java b/src/main/java/com/win/bank/service/demo/Student.java
deleted file mode 100644
index d7650ca..0000000
--- a/src/main/java/com/win/bank/service/demo/Student.java
+++ /dev/null
@@ -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;
- }
-
-}
\ No newline at end of file
diff --git a/src/main/java/com/win/bank/service/demo/XStreamUtil.java b/src/main/java/com/win/bank/service/demo/XStreamUtil.java
deleted file mode 100644
index a81fd87..0000000
--- a/src/main/java/com/win/bank/service/demo/XStreamUtil.java
+++ /dev/null
@@ -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();
- }
-
-}
diff --git a/src/main/java/com/win/bank/service/demo/Test.java b/src/main/java/com/win/bank/utils/XmlUtil.java
similarity index 58%
rename from src/main/java/com/win/bank/service/demo/Test.java
rename to src/main/java/com/win/bank/utils/XmlUtil.java
index 3be63fc..78cd4fc 100644
--- a/src/main/java/com/win/bank/service/demo/Test.java
+++ b/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);
}
-
}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 128deac..e2d6cae 100644
--- a/src/main/resources/application-dev.yml
+++ b/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
\ No newline at end of file
+ # 业务模式,前置机查看
+ busMod: "00002"
+ url: http://192.168.0.142:8080/cdcserver/api/v2
+
+# 交通银行
+bocom:
+ ip: 192.168.0.142
+ port: 30010
+ # 企业代码
+ corpNo: "0020005695"
+ # 企业用户号
+ userNo: "00003"