支付宝批量转账接口使用全过程 一一介绍_支付宝批量转账git-程序员宅基地

技术标签: 支付宝批量转账  接口  java  具体实现  源码下载  编程技术  

    关于支付宝批量转账接口,我觉得有写点什么的必要了,毕竟在里面走了很多弯路%>_<%,而且网上关于这个的资料少之又少,甚至有人都不知道有这个,宝宝真是快哭了(;′⌒`),下面我来一一详细介绍。

   1.申请接口

    申请支付宝批量转账接口,现在支付宝的这个服务已经下架了,所以是找不到这个签约的,需拨打 0571-88158090 这个电话去人工申请该接口。然后,他会问你需要的是哪一种服务,一种是在他的平台上,可以上传批量打款名单文件进行批量打款的,另一种是提供一个接口给你,让你可以在自己的网站上就实现批量打款。当然,我选的是第二种,因为第一种就太简单了,根本不会遇到很多问题O__O "…。当然,两种服务,支付宝都是会收取打款手续费的,一笔按照打款金额的0.5%手续费收取,不足1元的按照1元收取,上限为25元。一般大概会有五个工作日,能拿到这个接口。拿到接口之后(登录商家账户,会看到签约产品里面有一个批量付款到支付宝,说明接口拿到了),可以到支付宝文档中心去下载demo,地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7386797.0.0.I0MkUm&treeId=64&articleId=103569&docType=1


   2.使用接口

   2.1后台方面

    得到下载包后,里面有多种语言的demo,我使用的是batch_trans_notify-JAVA-UTF-8。拿到这个demo之后,很简单,里面的东西都不要动,只需要修改这几个地方:

     com.alipay.config.AlipayConfig文件

          partner属性即是你的合作身份者ID---PID

          key属性即是商户私钥---安全检验码

登录商家账户有一个“查看PID、Key”的按钮,可以看到自己的PID和Key,对于Key,需注意几点:

      1.批量转账支持MD5加密的数据签名,也支持RSA加密的数据签名(当然,支付宝提供给我们的demo默认只有MD5加密)

      2.“查看PID、Key”看到的"默认加密"即是MD5私钥,对于我们的demo,把看到的这个私钥填入key即可完成AlipayConfig的所有配置^_^

      3.页面下面还有个“RSA加密,查看密钥即是查看RSA公钥(支付宝提供给我们RSA密钥生成器,用于生产公钥与私钥,相关操作详见https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.lOJgU5&treeId=64&articleId=104740&docType=1),后面还有个“支付宝公钥。对于RSA加密,请将key改为private_key,并填入RSA密钥生成器生产的私钥,并在下面添加一个字符串“ali_public_key”,值为上面说到的“支付宝公钥”。并且,在最后一行将sign_type改为RSA。最后,需要找到Base64.java和RSA.java两个文件才能完成RSA签名,而demo里面是没有的,这两个文件,大家可以在支付宝实时到账demo里面去找,那里面有^_^。

   2.2前台方面

    demo里面有三个jsp页面:

      index.jsp,负责填写相关数据(具体格式demo注释有写)

      alipayapi.jsp,负责处理index.jsp传入的数据,并调用AlipaySubmit文件相应方法,生成一个html格式的form表单并自动提交到支付宝。

      notify_url.jsp,支付宝异步通知的页面,需要在alipayapi.jsp页面配置notify_url变量,如果,你的项目不在外网上面,支付宝访问不到你的这个页面,你可以使用花生壳,使支付宝能够访问到你的页面。关于花生壳,不懂的就自己百度吧^_^。

      下面分别介绍这三个页面:

           A-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个字节╮(╯▽╰)╭。

       B-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

       C-notify_url.jsp:

           异步通知页面,一般在输入密码、点击转账后2-5分钟,支付宝会根据之前设定的notify_url找到该页面,进行异步通知。异步通知,即是支付宝自动请求该notify_url,并将转账处理结果带入到该页面,该页面进行相应处理后,进行out.println("success")输出,支付宝便知道你已经收到了它的通知,便不再继续通知(否则会每隔一段时间会继续通知。而整个过程都是异步的,即不会造成任何程序或页面的阻塞、等待。

          相应的通知结果参数在https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.5n5tQs&treeId=64&articleId=104804&docType=1可查阅。主要参数为success_details,fail_details,batch_no,首先AlipayNotify.verify(params)方法会将返回的所有参数params进行数据签名,以确认是否是支付宝发来的消息,确认成功后,我们就可以在下面写上我们自己的业务逻辑代码。

          业务逻辑代码如:

  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。有需要源码的朋友,请移步:http://download.csdn.net/detail/localhost01/9604148



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/localhost01/article/details/52215908

智能推荐

Unity VideoPlayer 视频播放问题:编辑器可以播放,打包之后真机黑屏,但有声音_unity videoplayer 打包后的问题-程序员宅基地

文章浏览阅读4.8k次。利用adb命令连接手机,log显示:ReportException: UnityLogError Could not find material Hidden/VideoDecodeAndroid。看看VideoDecodeAndroid是否加上。_unity videoplayer 打包后的问题

图形用户界面工具:Tkinter库_tkinter 设计器-程序员宅基地

文章浏览阅读794次。是默认的图形用户界面(,)库,Tkinter是T看interface 的缩写,意为Tkinter库是 Tkinter Tcl/Tk的pathon接口。它基于工具包实现。可能不是最新、最好的设计工具包,但它简单易用,可快速实现运行于多种平台的应用程序。赋予了新的活力,它提供了一种能够更快实现应用的原型系统,使用控件,开发人员可以快速实现应用程序界面。在中,库在中的模块名称被重命名为,在程序中使用时,需要先导入该模块。简单范例:from tkinter import *#获取积木对象root = Tk(_tkinter 设计器

IIS 7.0下 安装SQL SERVER 2005 报错ASP.Net Version Registration Requirement (Warning)_failed to find the asp.net version registration wi-程序员宅基地

文章浏览阅读5.2k次。帮同事安装SQL SERVER 2005时出现2个警告信息,导致无法安装reporting service.警告如下:- ASP.Net Version Registration Requirement (Warning)Messages· ASP.Net Version Registration RequirementFailed to find the ASP.Net Ve_failed to find the asp.net version registration with microsoft internet

CLion2021 安装并基于 CLion 实现 stm32F103 点亮 LED-程序员宅基地

文章浏览阅读205次。目录一、环境安装1.1首先下载clion2.5 安装配置 OpenOCD3.1生成stm32cubemx程序3.4 添加并编译代码五、总结一、环境安装1.1首先下载clionclion官网:CLion: A Cross-Platform IDE for C and C++ by JetBrains安装完成2.3 安装配置 arm-none-eabi-gcc windows 上到这下载: GNU To...

PQTools配置参数使用说明-程序员宅基地

文章浏览阅读9.1k次,点赞5次,收藏53次。设定 AE 曝光属性HI_MPI_ISP_SetExposureAttrbByPass AE 模块 bypass 功能使能,默认为 HI_FALSE。enOpType 自动曝光或手动曝光开关,默认为 OP_TYPE_AUTO。u8AERunIntervalenExpTimeOpType 手动曝光时间使能,默认值为 OP_TYPE_AUTOenAGainOpType ..._pqtools

深入理解PackageManagerService_packagemanagerservice keycode_key_f24-程序员宅基地

文章浏览阅读1.4k次。由于《深入理解Android 卷一》和《深入理解Android卷二》不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在程序员宅基地中全文转发这两本书的全部内容 第4章 深入理解PackageManagerService本章主要内容:详细分析PackageManagerService本章所涉及的源代码文件名及位置:· SystemServer.javaf_packagemanagerservice keycode_key_f24

随便推点

使用Maven compile编译报错:无效的标记: --release-程序员宅基地

文章浏览阅读3.9k次,点赞6次,收藏4次。将springBoot改为低版本,后面需要加上RELEASE。JDK版本与springBoot不兼容。_无效的标记: --release

实现带有括号的四则运算c语言程序,C++实现四则运算器(带括号)-程序员宅基地

文章浏览阅读1.4k次,点赞3次,收藏9次。本文实例为大家分享了C++实现四则运算器的具体代码,供大家参考,具体内容如下栈的实现//stack.h#ifndef STACK_H#define STACK_H#includeclass stack_int{private:int* bottom; //栈底int* top; //栈顶unsigned int capacity;//栈容量unsigned int size; //栈大小..._题目名称 四则运算-5-实现含小括号的个位数加减运算 题目描述 编写代码实现含小括

python爬iptv直播源脚本_GitHub - bensonlai2002/iptv-m3u-maker: IPTV 国内+国外 电视台直播源m3u文件, 收集&汇总&本地源脚本...-程序员宅基地

文章浏览阅读2.4k次。IPTV m3u 直播源 收集 & 汇总简介主要功能收集网络上现有的一些网友共享的直播源, 将其汇总后.对每个连接进行测试, 同时记录当前网络对该连接的延迟, 同时对其标题进行一定的格式化.最终, 针对当前网络生成一份可用的, 同类速度最优的 “播放列表”.将其输出为 m3u 文件程序内置服务器功能, 本地运行访问: http://{你的IP}:9527/m3u目前进度目前库存频道总数: ..._iptv github

python清空windows系统剪切板数据_python清空剪贴板-程序员宅基地

文章浏览阅读2.2k次。本文介绍python清空windows系统剪切板数据方法一、实现原理通过python ctypes模块,调用windows API实现二、实现代码from ctypes import windllif windll.user32.OpenClipboard(None): # 打开剪切板 windll.user32.EmptyClipboard() # 清空剪切板 windll.user32.CloseClipboard() # 关闭剪切板..._python清空剪贴板

Python爬虫教程:从入门到实战【电商商品详情数据采集】-程序员宅基地

文章浏览阅读217次,点赞2次,收藏4次。引言:随着互联网的快速发展,爬虫成为一种非常重要的技术手段。Python作为一门功能强大且易于学习的编程语言,拥有丰富的爬虫库和工具。本文将为大家详细介绍Python爬虫的基本原理和实战案例,帮助你快速入门并掌握爬虫技术。第一部分:爬虫基础知识什么是爬虫?爬虫是一种自动化获取网页信息的程序,通过模拟浏览器行为,访问网页并提取所需的数据。爬虫的基本原理发送HTTP请求:使用Python的请求库发送HTTP请求,获取网页内容。解析HTML:使用解析库对网页内容进行解析,提取所需的数据。存储数据:将提取到的数据存

CTF 4 Tender Dropbox,浅谈网络安全消息机制原理-程序员宅基地

文章浏览阅读346次,点赞5次,收藏10次。还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!【完整版领取方式在文末!!

推荐文章

热门文章

相关标签