码迷,mamicode.com
首页 > 移动开发 > 详细

H5集成支付宝App支付客户端+服务端(java)

时间:2018-01-23 18:23:45      阅读:1303      评论:0      收藏:0      [点我收藏+]

标签:cas   back   tco   技术分享   order   except   sage   png   server   

由于最近项目需要接入第三方开发,支付宝支付,微信支付,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)

标签:cas   back   tco   技术分享   order   except   sage   png   server   

原文地址:https://www.cnblogs.com/zxinbk/p/8336856.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!