由于最近项目需要接入第三方开发,支付宝支付,微信支付,OSS图片上传以及短信服务。为避免第一次开发支付宝再次花时间查看文档,今天总结一下接入支付宝的过程,以及接入过程中遇到的问题。
1.首先在蚂蚁金服开放平台申请应用,App支付需要签约后才能生效,签约只需提供完成资料即可通过审核。
2.在已申请应用中查看签约状态,若状态为已生效才可以继续开发,签约状态查看如下所示,注意:未完成签约的应用是无法接入成功的。
3.配置密钥
使用官网提供一键生成工具生成一对RSA密钥,这里公钥和私钥一定要验证是否匹配,需要将应用公钥到支付宝开放平台,并将应用私钥作为参数在服务端配置,用来与应用公钥进行匹配(这里一定要注意)。
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.pay11 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 exception36 }37 }
初次做第三方开发,经验不足,如有错误,希望指点一二,谢谢!