<%@ page language="java" pageEncoding="UTF-8"%>
<%@page contentType="text/html;charset=utf-8" language="java"%>
<%@page session="true" import="java.lang.*" %>
<%@page session="true" import="java.util.*" %>
<%@page session="true" import="com.api.bank.util.CharEncodingUtil" %>
<%@page session="true" import="com.thoughtworks.xstream.XStream" %>
<%@page session="true" import="java.io.*" %>
<%@page session="true" import="com.thoughtworks.xstream.io.xml.DomDriver" %>
<%@page session="true" import="com.api.bank.bos.bean.BOSPayReqRootBean" %>
<%@page session="true" import="com.api.bank.bos.bean.BOSPayReqMessageBean" %>
<%@page session="true" import="com.api.bank.bos.bean.BOSPayTxnReqDataBean" %>
<%@page session="true" import="java.text.SimpleDateFormat" %>
<%
//使用request的getinputStream()接收无参数命的数据流,转换成String类型的xml报文
InputStream in = null;
try{
in = request.getInputStream();
InputStreamReader isr = new InputStreamReader(in);
BufferedReader br = new BufferedReader(isr);
String s = "";
StringBuffer sf = new StringBuffer() ;
while((s = br.readLine()) != null){
sf.append(s);
}
xml = sf.toString();
System.out.println("收到通讯报文:"+ xml);
}catch(Exception e){
e.printStackTrace();
}finally{
in.close();
}
/*
通过参数名称接收数据,已不在使用
Enumeration enu = request.getParameterNames();
boolean hasParam = enu.hasMoreElements();
if(hasParam){
String paraName = (String)enu.nextElement();
xml = request.getParameter(paraName);
} */
//转码,事实上好像并不需要,为了防止风险,做一次检查
String xmlString = CharEncodingUtil.unescape(xml);
//获取交易请求类型
String txnType = xmlString.split("<CSReq")[1].split("<version>")[0].split("\"")[1];
//解析报文
xmlString = xmlString.replaceAll("CSReq", "dataBean");
XStream xs = new XStream(new DomDriver());
xs.setMode(XStream.ID_REFERENCES);
xs.alias("Banksh", BOSPayReqRootBean.class);
xs.alias("Message", BOSPayReqMessageBean.class);
xs.useAttributeFor(BOSPayReqMessageBean.class, "id");
xs.alias("dataBean", BOSPayTxnReqDataBean.class);
BOSPayReqRootBean reqBean = (BOSPayReqRootBean) xs.fromXML(xmlString);
System.out.println(reqBean.toString());
BOSPayReqMessageBean messageBean = reqBean.getMessage();
BOSPayTxnReqDataBean dataBean = reqBean.getMessage().getDataBean();
String id = messageBean.getId();
String version = dataBean.getVersion();
String orderNum = dataBean.getOrderNum();
String cardCode = dataBean.getCardCode();
String amount = dataBean.getAmount();
String charge = dataBean.getCharge();
String instId = dataBean.getInstId();
String cardNo = dataBean.getCardNo();
String cardType = dataBean.getCardType();
String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
String serialNo = new SimpleDateFormat("yyyyMMddHHmmssSS").format(new Date());
StringBuffer str = new StringBuffer("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Banksh>");
str.append("<Message id=\"").append(id).append("\">");
if("CPReq".equals(txnType)){
//支付
str.append("<CSRes id=\"CPRes\">");
str.append("<version>").append(version).append("</version>");
str.append("<instId>").append(instId).append("</instId>");
str.append("<orderNum>").append(orderNum).append("</orderNum>");
str.append("<cardCode>").append(cardCode).append("</cardCode>");
str.append("<serialNo>").append(serialNo).append("</serialNo>");
str.append("<date>").append(date).append("</date>");
}else if("IAReq".equals(txnType)){
//鉴权
str.append("<CSRes id=\"IARRes\">");
str.append("<version>").append(version).append("</version>");
str.append("<instId>").append(instId).append("</instId>");
str.append("<cardNo>").append(cardNo).append("</cardNo>");
str.append("<cardCode>").append(serialNo).append("</cardCode>");
str.append("<date>").append(date).append("</date>");
}else if("SRReq".equals(txnType)){
//单笔退款
str.append("<CSRes id=\"SRRes\">");
str.append("<version>").append(version).append("</version>");
str.append("<instId>").append(instId).append("</instId>");
str.append("<orderNum>").append(orderNum).append("</orderNum>");
str.append("<serialNo>").append(serialNo).append("</serialNo>");
str.append("<date>").append(date).append("</date>");
str.append("<cardCode>").append(cardCode).append("</cardCode>");
}else if("SQReq".equals(txnType)){
//单笔查询
String type = dataBean.getType();
str.append("<CSRes id=\"SQRes\">");
str.append("<version>").append(version).append("</version>");
str.append("<instId>").append(instId).append("</instId>");
str.append("<serialNo>").append(serialNo).append("</serialNo>");
str.append("<date>").append(date).append("</date>");
str.append("<type>").append(type).append("</type>");
str.append("<orderNum>").append(orderNum).append("</orderNum>");
str.append("<status>").append("0000").append("</status>");
}
str.append("<errorCode>").append("SUCC").append("</errorCode>");
str.append("</CSRes><Signature>").append("TEST SUCCESS")
.append("</Signature></Message></Banksh>");
String responseXml = str.toString();
//通过response返回响应报文和服务状态。
response.getWriter().print(responseXml);
response.setStatus(200);
%>
转载于:https://my.oschina.net/dlam/blog/475557