移動支付開發-項目總結

最近剛開始接觸移動支付(移動支付項目組),對於業務流程還不是很清楚,今天整了一天的渠道接口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 = "[email protected]";	//購買者郵件
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意思就是支付已成功,不需要重複提交(這裏之前已經提交過了,所以會出現這個狀態碼)

 


 

 

 

 


 

 

 

 

 

 


 

 

 

 


 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章