关于支付宝批量转帐接口,我以为有写点什么的必要了,毕竟在里面走了不少弯路%>_<%,并且网上关于这个的资料少之又少,甚至有人都不知道有这个,宝宝真是快哭了(;′⌒`),下面我来一一详细介绍。php
申请支付宝批量转帐接口,如今支付宝的这个服务已经下架了,因此是找不到这个签约的,需拨打 0571-88158090 这个电话去人工申请该接口。而后,他会问你须要的是哪种服务,一种是在他的平台上,能够上传批量打款名单文件进行批量打款的,另外一种是提供一个接口给你,让你能够在本身的网站上就实现批量打款。html
固然,我选的是第二种,由于第一种就太简单了,根本不会遇到不少问题O__O "…。固然,两种服务,支付宝都是会收取打款手续费的,一笔按照打款金额的0.5%手续费收取,不足1元的按照1元收取,上限为25元。通常大概会有五个工做日,能拿到这个接口。拿到接口以后(登陆商家帐户,会看到签约产品里面有一个批量付款到支付宝,说明接口拿到了),能够到支付宝文档中心去下载demo,地址:doc.open.alipay.com/doc2/detail…前端
获得下载包后,里面有多种语言的demo,我使用的是batch_trans_notify-JAVA-UTF-8。拿到这个demo以后,很简单,里面的东西都不要动,只须要修改com.alipay.config.AlipayConfig的这几个地方: partner属性便是你的合做身份者ID---PID
key属性便是商户私钥---安全检验码
登陆商家帐户有一个“查看PID、Key”的按钮,能够看到本身的PID和Key,对于Key,需注意几点:vue
- 批量转帐支持MD5加密的数据签名,也支持RSA加密的数据签名(固然,支付宝提供给咱们的demo默认只有MD5加密)
demo里面有三个jsp页面:java
index.jsp,负责填写相关数据(具体格式demo注释有写)。c++
alipayapi.jsp,负责处理index.jsp传入的数据,并调用AlipaySubmit文件相应方法,生成一个html格式的form表单并自动提交到支付宝。es6
notify_url.jsp,支付宝异步通知的页面,须要在alipayapi.jsp页面配置notify_url变量,若是,你的项目不在外网上面,支付宝访问不到你的这个页面,你可使用花生壳,使支付宝可以访问到你的页面。关于花生壳,不懂的就本身百度吧^_^。web
下面分别介绍这三个页面。数据库
index.jsp 付款帐号便是你的支付宝帐户 付款帐户名便是你的商户名字 付款当天日期,new SimpleDateFormat("yyyyMMdd").format(new Date()) 批次号,new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) 付款总金额,因为订单是用表格批量显示的,因此使用js操做dom,获取勾选状态的全部订单的支付金额之和 付款笔数,同上,获取勾选状态的全部订单数 付款详细数据,仍然是使用js进行动态拼接勾选状态的订单的相关属性。 注意:支付宝工做人员说,使用接口的话是没法进行文件上传的。因此尽管demo里面有上传文件的方法,可是仍是没有什么用处的。所以,就出现一个问题,那就是,将上面说到的AlipaySubmit文件生成的html格式的form表单提交到支付宝会存在一个Request Entity Too Large问题,也就是“请求中提供的数据量超过容量限制”。由于没法上传文件,所以,若是像支付宝所说的那样,一次最多能够批量处理1000条是没法真正作到的,由于通过测试,在备注说明为空的状况下,都只能批量上传大概100条,大概是4500-5000个字节╮(╯▽╰)╭。api
alipayapi.jsp 获取index.jsp传来的值,建议将付款帐号和帐户名存放在AlipayConfig文件中,这样就不用每次转帐都要输入这两个值了。 该页面会把传来的值放入一个叫作sParaTemp的Map中,而后调用AlipaySubmit.buildRequest方法,将sParaTemp以相应的加密方式(MD5/RSA)加密为数据签名,并放在生成的html格式的form表单的一个名叫sign的input中。固然,这些咱们不去关心。buildRequest方法推荐使用post提交方式,也就是其第二个参数。而该方法的第三个参数是生成的html格式的form表单的提交按钮的value值(嘿嘿,说得有点长^_^),固然,这个提交按钮是display:none不可见的,因此这个东西要不要都无所谓的,反正是自动提交。 注意:该系统只能在IE下才能实现转帐功能,这是由于支付宝还不支持其余第三方浏览器进行转帐。(若是浏览器为极速模式,那么转帐时浏览器会自动切换成IE) 若是你的页面嵌有iframe,且原窗口跳转到alipayapi.jsp(window.location.href或者a标签跳转):
对于单笔转帐,若是浏览器为极速模式,那么转帐时浏览器不会自动切换成IE,因此,对于单笔交易,请切换为IE,再点击批量转帐,不然可能出现“当前操做环境不支持支付宝控件”而致使不能转帐的问题。
对于多笔转帐(批量),请使用极速模式,浏览器在转帐时会自动切换为IE,不然,则可能出现批量转帐申请提交失败错误。
故,推荐使用新窗口跳转到alipayapi.jsp,以上问题就都不会出现了。---window.open或者a标签加target
String batch_no=request.getParameter("batch_no");
if(!batch_no.equals(application.getAttribute("batch_no"))){//判断是否已对该批次作过处理(避免支付宝重复发送致使的重复处理)
application.setAttribute("batch_no",batch_no);
//写上你的业务逻辑,如将成功的订单数据库状态改成成功,失败的改成失败
}
out.println("success");//请不要修改或删除
复制代码
注意:对于success_details和fail_details,在该demo下可能会出现中文乱码的状况,你们能够先设置request.setCharacterEncoding("gbk");而后再获取success_details与fail_details。
到这里,整个过程就完工了!下面是我作的一个小后台demo,前端使用的是H-UI框架,后台是servlet+mybatis。有须要源码的朋友,请移步:download.csdn.net/detail/loca…