H5集成支付宝App支付客户端+服务端(java)
发布日期:2021-10-24 14:20:21 浏览次数:2 分类:技术文章

本文共 4336 字,大约阅读时间需要 14 分钟。

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

初次做第三方开发,经验不足,如有错误,希望指点一二,谢谢!

转载于:https://www.cnblogs.com/zxinbk/p/8336856.html

转载地址:https://blog.csdn.net/weixin_30791095/article/details/97941291 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:edittext_解释
下一篇:一个文本,每一行有两个时间,是一个用户的QQ在线时间和下线时间。统计出最多同时在线的用户数...

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年03月17日 11时14分24秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java extends e,java泛型中的? extend E 和 ? super E 2019-04-21
php 上传头像 裁剪插件,PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁_PHP教程 2019-04-21
php workerman怎么样,workerman怎样完成高并发_PHP开发框架教程 2019-04-21
c语言数组124048,根据GPS经纬度判断当前所属的市区 2019-04-21
c语言 迷宫图形界面 动态,C语言实现迷宫求解问题(详细思路+附源代码) 2019-04-21
百度地图 轨迹回放 android,【移动端】百度地图之历史轨迹回放 2019-04-21
p30手机更多鸿蒙,搭配麒麟980的华为P30还能升级到鸿蒙吗?同意网友的回答 2019-04-21
鸿蒙os推送计划,鸿蒙OS今年计划推送3亿终端 2019-04-21
html 时间控件 只选择年,求一个移动端日期选择插件(只选择年月)? 2019-04-21
交替性注意力_儿童交替性斜视怎么治 2019-04-21
rabbitmq接口异常函数方法_Rabbitmq消息服务器通讯异常: name must not be blank 2019-04-21
linux 重启kettle服务_kettle在linux启动spoon.sh报错(示例代码) 2019-04-21
字符串算法 金策_GitHub - 662d7/shareOI: OI & ACM 课件分享 2019-04-21
linux建立ftp suse_SUSE Linux 安装FTP 2019-04-21
snmpwalk 获取端口流量_通过snmpwalk命令计算接口速率 2019-04-21
刷b站点击量_B站首席运营官:月活首次突破2亿,日均视频播放量13亿次 2019-04-21
android 复制文件到指定文件夹_如何在 Linux 上复制文件/文件夹到远程系统? 2019-04-21
k歌的录音伴奏合成技术如何实现_天天唱的卡拉OK,你知道是如何诞生的吗? 2019-04-21
getchar()到底怎么用_微量元素肥料到底怎么用? 2019-04-21
base64解码乱码如何解决_CAD打开图纸文件有乱码问号我们如何有效解决呢 2019-04-21