1. 程式人生 > >H5集成支付寶App支付客戶端+服務端(java)

H5集成支付寶App支付客戶端+服務端(java)

XML 服務端 onf response 成功 code default format sim

由於最近項目需要接入第三方開發,支付寶支付,微信支付,OSS圖片上傳以及短信服務。為避免第一次開發支付寶再次花時間查看文檔,今天總結一下接入支付寶的過程,以及接入過程中遇到的問題。

1.首先在螞蟻金服開放平臺申請應用https://open.alipay.com/platform/home.htm,App支付需要簽約後才能生效,簽約只需提供完成資料即可通過審核。

2.在已申請應用中查看簽約狀態,若狀態為已生效才可以繼續開發,簽約狀態查看如下所示,註意:未完成簽約的應用是無法接入成功的。

技術分享圖片

3.配置密鑰

使用官網提供一鍵生成工具生成一對RSA密鑰https://docs.open.alipay.com/291/105971,這裏公鑰和私鑰一定要驗證是否匹配,需要將應用公鑰到支付寶開放平臺,並將應用私鑰作為參數在服務端配置,用來與應用公鑰進行匹配(這裏一定要註意)。

4.客戶端開發

客戶端開發相對簡單,可根據需要自行添加業務。

 1                 var channel=null;
 2                 // 1. 獲取支付通道
 3                     plus.payment.getChannels(function(channels){
 4                         channel=channels[0];
 5                     },function(e){
 6                         alert("獲取支付通道失敗:"+e.message);
7 }); 8 var ALIPAYSERVER=AppDataURL + ‘/weixinpay.do?price=1‘; 9 // 2. 發起支付請求 10 function pay(id){ 11 var PAYSERVER=‘‘; 12 if(id==‘alipay‘){ 13 PAYSERVER=ALIPAYSERVER; 14
}else if(id==‘wxpay‘){ 15 PAYSERVER=WXPAYSERVER; 16 }else{ 17 plus.nativeUI.alert("不支持此支付通道!",null,""); 18 return; 19 } 20 var xhr=new XMLHttpRequest(); 21 xhr.onreadystatechange=function(){ 22 switch(xhr.readyState){ 23 case 4: 24 mui.toast("xhr.status:"+xhr.status); 25 if(xhr.status==200){ 26 plus.payment.request(channel,xhr.responseText,function(result){ 27 plus.nativeUI.alert("支付成功!",function(){ 28 back(); 29 }); 30 },function(error){ 31 plus.nativeUI.alert("支付失敗:" + error.code+error.message); 32 }); 33 }else{ 34 alert("獲取訂單信息失敗!"); 35 } 36 break; 37 default: 38 break; 39 } 40 } 41 xhr.open(‘GET‘,PAYSERVER); 42 xhr.send();

5.服務端開發

以下代碼只需配置好正確參數即可使用。

 1  @RequestMapping(value = "/AliPay.do")
 2     public void aliPayInfo(HttpServletRequest request, HttpServletResponse response) {
 3         response.setHeader("Access-Control-Allow-Origin", "*");
 4         String money = request.getParameter("money");
 5         String subject = request.getParameter("subject");
 6         String orderCode = request.getParameter("orderCode");
 7         String outTradeNo = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + (int) (Math.random() * 90000 + 88888);
 8         //實例化客戶端
 9         AlipayClient alipayClient = new DefaultAlipayClient(ConfigUtil.ALI_SERVER_URL, ConfigUtil.ALI_APPID, ConfigUtil.ALI_PRIVATEKEY);
10         //實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口為alipay.trade.app.pay
11         AlipayTradeAppPayRequest requestR = new AlipayTradeAppPayRequest();
12         AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
13         model.setBody("我是測試數據");
14         model.setSubject(subject);
15         model.setOutTradeNo(outTradeNo);
16         model.setTimeoutExpress("30m");
17         model.setTotalAmount(money);
18         model.setProductCode("QUICK_MSECURITY_PAY");
19         requestR.setBizModel(model);
20         requestR.setNotifyUrl(ConfigUtil.ALI_NOTIFYURL);
21         try {
22             OrderInfo orderInfo = iTouristService.getOrderIdByOrderCode(orderCode);
23            if (orderInfo != null){
24                boolean res = iTouristService.updateOrderInfoByPrepareField(orderInfo,outTradeNo);
25 
26                if (res){
27                    AlipayTradeAppPayResponse responseR = alipayClient.sdkExecute(requestR);
28                    String cao = responseR.getBody();
29                    response.getWriter().write(cao);
30                    response.getWriter().flush();
31                    response.getWriter().close();
32                }
33            }
34         } catch (Exception e) {
35             // TODO: handle exception
36         }
37     }

初次做第三方開發,經驗不足,如有錯誤,希望指點一二,謝謝!

H5集成支付寶App支付客戶端+服務端(java)