您的位置:首页 > 编程语言 > Java开发

移动支付开发-项目总结

2015-03-16 19:55 197 查看
最近刚开始接触移动支付(移动支付项目组),对于业务流程还不是很清楚,今天整了一天的渠道接口demo,对其中有些流程和问题有了更深入的

理解。这个demo是高阳点卡的网关接入接口,大体流程如下:

 

然后是高阳提供的demo,里面有三个jsp文件,一个md5加密文件夹(里面是md5的相关加密java类),首先是Sctest.jsp文件,里面有一些相关的卡信息

(注意这里千万不能写错,比如商户代码,后台通知url,pmid--支付方式,pcid--支付通道,卡号是没有加密的,在jsp里面实现加密,密码也是没有后加密的

也是在jsp里面实现加密),代码如下:

<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="java.text.*"%>
<%@ page import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>接口1,发送订单</title>
</head>
<%
String randomcode = ""+(int)(100000*Math.random()); //随机数

String version_id = "2.00"; //版本号
String merchant_id = "MX_TEST"; //商户ID, 分配的商户ID号
String order_date="20061101"; //格式yyyyMMdd
String order_id =randomcode; //商户订单号,不要随意填写
String amount = "0.01"; //订单金额
String currency = "RMB"; //大写RMB
String notify_url = ""; //返回URL,支付完成后通知此地址结果
String pm_id = ""; //支付方式ID,非空
String pc_id = ""; //支付方式ID,非空
String order_pdesc = "商品描述"; //商品描述
String user_name = "孙燕姿"; //购买者用户名
String user_phone = "03167907313"; //购买者电话
String user_mobile = "13722644881"; //购买者手机号
String user_email = "sina@sina.com"; //购买者邮件
String order_pname = "魔兽世界点卡"; //订单商品,注:商品列表需向捷迅备份
String merchant_key = "123456789"; //商户密钥, 分配的商户ID号,测试环境默认为:123456789
String retmode = "1";
String cardnum1="";
String cardnum2="";

%>
<body>
<p>模拟商城订单!</p>

<form action="process.jsp" method="post">
<table width="545" border="1">
<tr>
<td width="101">版本号</td>
<td width="175"><input type="text" name="version_id" value="<%=version_id %>"/></td>
<td width="73">商户代码</td>
<td width="168"><input type="text" name="merchant_id" value="<%=merchant_id %>"/></td>
</tr>
<tr>
<td>订单日期</td>
<td><input type="text" name="order_date" value="<%=order_date %>"/></td>
<td>商户订单号</td>
<td><input type="text" name="order_id" value="<%=order_id%>"/></td>
</tr>
<tr>
<td>订单金额</td>
<td><input type="text" name="amount" value="<%=amount%>"/></td>
<td>货币类型</td>
<td><input type="text" name="currency" value="<%=currency %>"/></td>
</tr>
<tr>
<td>后台通知url</td>
<td><input type="text" name="notify_url" value="<%=notify_url %>"/></td>
<td>PMID</td>

<td>
<input type="text" name="pm_id" value="<%=pc_id %>"/>
</select>
</td>
</tr>
<tr>
<td>PCID</td>
<td>
<input type="text" name="pc_id" value="<%=pc_id %>"/>
</td>
<td>商品描述</td>
<td><input type="text" name="order_pdesc" value="<%=order_pdesc %>"/></td>
</tr>
<tr>
<td>订货人姓名</td>
<td><input type="text" name="user_name" value="<%=user_name %>"/></td>
<td>用户电话</td>
<td><input type="text" name="user_phone" value="<%=user_phone %>"/></td>
</tr>
<tr>
<td>用户手机号</td>
<td><input type="text" name="user_mobile" value="<%=user_mobile %>"/></td>
<td>用户EMAIL</td>
<td><input type="text" name="user_email" value="<%=user_email %>"/></td>
</tr>
<tr>
<td></td>
<td><input type="hidden" name="verifystring" value="12v23s90cf4839g29s4"/></td>
<td>商品编码</td>
<td><input type="text" name="order_pname" value="<%=order_pname %>"/></td>
</tr>
<tr>
<td>卡号</td>
<td><input type="text" name="cardnum1" value="<%=cardnum1 %>"/></td>
<td>select_amount</td>
<td><input type="text" name="select_amount" value="50"/></td>
</tr>
<tr>
<td>返回类型</td>
<td><input type="text" name="retmode" value="<%=retmode%>"/></td>
<td></td>
<td><input type="hidden" name="save_loginname" value=""/></td>
</tr>
<tr>
<td>密码</td>
<td><input id="cardnum2" type="text" name="cardnum2" value="<%=cardnum2 %>"/></td>
<td colspan="2"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交"/></td>
<td></td>
<td></td>
</tr>
</table>
</form>
</body>
</html>

注意jsp前面的导入也就是import,一定要导入正确,不然后面无法解析到正确的类,会报无法处理这种类型的错误,这个会将表单数据post到process.jsp,然后这个jsp通过
getparameter方法获取到相应参数。然后由商户对这些参数进行处理,处理完后再将‘Y’返回给高阳服务器就可以了,process.jsp如下:

这是生成的表单截图

 <%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="java.text.*"%>
<%@ page import="java.util.*,java.io.*"%>
<%@ page import="until.*"%>
<%
String version_id = request.getParameter("version_id");
String merchant_id = request.getParameter("merchant_id");
String order_date=request.getParameter("order_date");
String order_id =request.getParameter("order_id");
String amount = request.getParameter("amount");
String currency = request.getParameter("currency");
String pm_id = request.getParameter("pm_id");
String pc_id = request.getParameter("pc_id");
String order_pdesc = request.getParameter("order_pdesc");
String user_name = request.getParameter("user_name");
String user_phone = request.getParameter("user_phone");
String user_mobile =request.getParameter("user_mobile");
String user_email = request.getParameter("user_email");
String order_pname = request.getParameter("order_pname");
String cardnum1=request.getParameter("cardnum1");
String cardnum2=request.getParameter("cardnum2");
String select_amount=request.getParameter("select_amount");
String notify_url = request.getParameter("notify_url");

String url = "http://219.143.36.225/card/pgworder/orderdirect.do";
String key="123456789"; //需要修改为商户自己的密钥

CipherUtil util = new CipherUtil();
cardnum1= util.encryptData(cardnum1,key);
cardnum2=util.encryptData(cardnum2,key);
String verifystring= "version_id="+version_id+"&merchant_id="+merchant_id+"&order_date="+order_date+"&order_id="+order_id+
"&amount="+amount+"¤cy="+currency+"&cardnum1="+cardnum1+"&cardnum2="+cardnum2+"&p
4000
m_id="+pm_id+
"&pc_id="+pc_id+"&merchant_key="+key; //商户代码源串
verifystring = KeyedDigestMD5.getKeyedDigest(verifystring,"");

String paramContent="version_id="+version_id+"&merchant_id="+merchant_id+"&order_date="+order_date+"&order_id="+order_id+
"&amount="+amount+"¤cy="+currency+"&cardnum1="+cardnum1+"&cardnum2="+cardnum2+"&pm_id="+pm_id+
"&pc_id="+pc_id+"&verifystring="+verifystring+"&order_pdesc="+order_pdesc+"&user_name="+user_name
+"&user_phone="+user_phone+"&user_email="+user_email+"&order_pname="+order_pname+"&select_amount="+select_amount+"¬ify_url="+notify_url;

StringBuffer responseMessage = null;
java.net.URLConnection connection = null;
java.net.URL reqUrl = null;
OutputStreamWriter reqOut = null;
InputStream in = null;
BufferedReader br = null;
String param = paramContent;

responseMessage = new StringBuffer();
reqUrl = new java.net.URL(url);
connection = reqUrl.openConnection();
connection.setDoOutput(true);
connection.setConnectTimeout(300*1000);
connection.setReadTimeout(300*1000);

reqOut = new OutputStreamWriter(connection.getOutputStream());

reqOut.write(paramContent);
reqOut.flush();

int charCount = -1;
in = connection.getInputStream();
br = new BufferedReader(new InputStreamReader(in,
"GBK"));
while ( (charCount = br.read()) != -1) {
responseMessage.append( (char) charCount);
}
in.close();
reqOut.close();
String res = responseMessage.toString();
System.out.println(res);

%>
<%=res%>
String url = "http://219.143.36.225/card/pgworder/orderdirect.do";
这个url地址是高阳测试服务器地址,前面表单里面的数据传到这个测试接口地址,和高阳的接口进行比对,打印出res,就是高阳返回给商户服务器的信息,就可以了
<?xml version="1.0" encoding="ISO-8859-1"?><response><version_id>2.00</version_id><merchant_id>220291</merchant_id><verifystring>514ee104b33d1f120e6f9237b6389e81</verifystring><order_date>20061101</order_date><order_id>95607</order_id><amount>0.01</amount><currency>RMB</currency><pay_sq></pay_sq><pay_date></pay_date><pc_id>DXJFK00010001</pc_id><pm_id></pm_id><result>F</result><resultstr>10016</resultstr></response>这就是服务器端接收到的支付信息,10016意思就是支付已成功,不需要重复提交(这里之前已经提交过了,所以会出现这个状态码)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息