一、支付寶開放平台設置
1、首先登陸支付寶開放平台
網址:https://openhome.alipay.com/platform/home.htm
2、使用手機支付寶掃碼登錄
登錄后選擇沙箱操作頁面
3、進入沙箱應用選項后設置沙箱的基本信息。
不能使用safari瀏覽器,看不到右側詳情頁,建議使用chrome瀏覽器。
4、設置應用公鑰
公鑰生成器下載地址,下載對應版本的程序。
下載地址:https://alipay.open.taobao.com/docs/doc.htm?treeId=291&articleId=106097&docType=1
使用程序生成私鑰和公鑰。並將公鑰添加到沙箱中。(上圖所示位置)
5、下載安卓手機支付寶沙箱APP軟件,可以實現掃碼支付功能。
6、下載的軟件使用測試賬號登錄,賬號在沙箱賬號中獲得。
二、支付寶沙箱操作代碼
1、示例代碼下載
支付寶提供多種下載方式下載,這里只描述java版本的操作。
示例代碼地址:https://openclub.alipay.com/club/history/read/1692
2、提交信息到支付寶網關的示例代碼
在項目中引入支付寶SDK:https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java
<!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java --> <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.7.1.ALL</version> </dependency>
客戶端初始化操作,參數意義詳見下表。
AlipayClient alipayClient = new DefaultAlipayClient(URL,APP_ID,APP_PRIVATE_KEY,FORMAT,CHARSET,ALIPAY_PUBLIC_KEY,SIGN_TYPE);
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do","2016072200101X","商戶私鑰","json","utf-8","支付寶公鑰","RSA2");
注意:這里要用沙箱的網關,而不是真正的支付寶網關。
提交信息到網關的示例代碼:
//獲得初始化的AlipayClient AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type); //設置請求參數,返回頁面要求公網地址。 AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); alipayRequest.setReturnUrl(AlipayConfig.return_url);//同步返回頁面 alipayRequest.setNotifyUrl(AlipayConfig.notify_url);//異步返回頁面 //商戶訂單號,商戶網站訂單系統中唯一訂單號,必填 String out_trade_no = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8"); //付款金額,必填 String total_amount = new String(request.getParameter("WIDtotal_amount").getBytes("ISO-8859-1"),"UTF-8"); //訂單名稱,必填 String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8"); //商品描述,可空 String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8"); alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," + "\"total_amount\":\""+ total_amount +"\"," + "\"subject\":\""+ subject +"\"," + "\"body\":\""+ body +"\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); //請求 String result = alipayClient.pageExecute(alipayRequest).getBody(); //輸出 out.println(result);
3、接收從支付寶網關返回的代碼
Map<String,String> params = new HashMap<String,String>(); Map<String,String[]> requestParams = request.getParameterMap(); for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String[] values = (String[]) requestParams.get(name); String valueStr = ""; for (int i = 0; i < values.length; i++) { valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; } //亂碼解決,這段代碼在出現亂碼時使用 valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); params.put(name, valueStr); } boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset, AlipayConfig.sign_type); //調用SDK驗證簽名 //——請在這里編寫您的程序(以下代碼僅作參考)—— if(signVerified) { //商戶訂單號 String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8"); //支付寶交易號 String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8"); //付款金額 String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"),"UTF-8"); out.println("trade_no:"+trade_no+"<br/>out_trade_no:"+out_trade_no+"<br/>total_amount:"+total_amount); }else { out.println("驗簽失敗"); }
至此支付寶沙箱接入過程全部完畢。