移动支付开发-项目总结

最近刚开始接触移动支付(移动支付项目组),对于业务流程还不是很清楚,今天整了一天的渠道接口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+"&pm_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意思就是支付已成功,不需要重复提交(这里之前已经提交过了,所以会出现这个状态码)

 


 

 

 

 


 

 

 

 

 

 


 

 

 

 


 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值