java支付宝对账功能开发_java后台实现支付宝对账功能_ying鹿好看的博客-程序员宅基地

技术标签: java支付宝对账功能开发  

完成支付宝支付、查询的接口之后,我们应该还需要定时与支付宝进行对账,以确保商户系统的订单信息是正确的,想知道支付宝支付、查询接口实现过程的亲们,可移步到上一篇有详细过程。

现在我们来讲一下支付宝对账的功能,关于与支付宝交互的关键代码,其实支付宝的API已经讲得很清楚,如果亲们想直接看支付宝API,点击 支付宝对账API ,当然我在文章也会进行说明解释。

实现支付宝自动对账功能

先看一下商户系统和支付宝的大概交互过程:

f2601e5bf8f08b48457b5ad07df389f6.png

所谓对账,其实就是调用支付宝查询接口,跟上一篇的查询接口不同的是,上一篇的查询接口是针对特定的一个订单,通过订单号或者支付宝交易号去查询这一笔订单的信息,而对账,我们需要获取一个时间段的所有订单信息,因此,我们自然而已的去看支付宝提供的SDK是否有提供该接口给我们,经过查看支付宝API,我们发现确实我们所需要的接口:alipay.data.dataservice.bill.downloadurl.query。废话不多说,先上我实现的代码

1.先是调用支付宝的对账查询接口,获取账单文件下载地址URL,关于一些支付宝的公共参数,在上一篇我已经封装好,下面代码是针对对账的实现过程,传入关键的2个业务参数.公共参数支付宝SDK已经封装好。

第一个参数,账单类型(字符串类型,trade或者signcustomer,具体含义见支付宝API)

第二个参数,获取时间段(字符串类型,(2018-03-15)需要下载的账单日期,最晚是当期日期的前一天)/**

* 实现支付宝对账

* @param request

* @return response

*/

@Override

public void alipayBill() {

logger.info("==================向支付宝发起对账请求");

// 获取支付宝支付的配置信息

ValueOperations valueOps = redisTemplate.opsForValue();

Payment alipayment = (Payment) valueOps.get("alipayment");

if (alipayment == null) {

alipayment = alipayMentOrderRepository.getPayment(1, 1);

}

try {

//实例化客户端(参数:网关地址、商户appid、商户私钥、格式、编码、支付宝公钥、加密类型)

AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.URL, alipayment.getAppid(),

AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET,

AlipayConfig.ALIPAY_PUBLIC_KEY,AlipayConfig.SIGNTYPE);

AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest();//创建API对应的request类

request.setBizContent("{" +

"\"bill_type\":\"trade\"," +

"\"bill_date\":\"2018-03-14\"}"); //设置业务参数

AlipayDataDataserviceBillDownloadurlQueryResponse response = alipayClient.execute(request);

String billDownloadUrl=response.getBillDownloadUrl();

logger.info("==================支付宝返回文件下载地址:"+billDownloadUrl);

this.downBill(billDownloadUrl); //调用下载文件方法

} catch (AlipayApiException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}//通过alipayClient调用API,获得对应的response类

//根据response中的结果继续业务逻辑处理

}

2.获取到支付宝返回的订单文件下载地址之后,我们直接把它下载到本地,下载的代码如下:/**

* 下载账单文件:

* @param request

* @return response

*/

public String downBill(String billDownloadUrl){

long filename=new Date().getTime();

//指定希望保存的文件路径

String filePath = "G:/alipay/billfile/fund_bill_"+filename+".zip";

URL url = null;

HttpURLConnection httpUrlConnection = null;

InputStream fis = null;

FileOutputStream fos = null;

try {

url = new URL(billDownloadUrl);

httpUrlConnection = (HttpURLConnection) url.openConnection();

httpUrlConnection.setConnectTimeout(5 * 1000);

httpUrlConnection.setDoInput(true);

httpUrlConnection.setDoOutput(true);

httpUrlConnection.setUseCaches(false);

httpUrlConnection.setRequestMethod("GET");

httpUrlConnection.setRequestProperty("Charsert", "UTF-8");

httpUrlConnection.connect();

fis = httpUrlConnection.getInputStream();

byte[] temp = new byte[1024];

int b;

fos = new FileOutputStream(new File(filePath));

while ((b = fis.read(temp)) != -1) {

fos.write(temp, 0, b);

fos.flush();

}

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if(fis!=null) fis.close();

if(fos!=null) fos.close();

if(httpUrlConnection!=null) httpUrlConnection.disconnect();

} catch (IOException e) {

e.printStackTrace();

}

}

return null;

}

以上就是与支付宝交互的过程,支付宝API上也能找到这些代码,完成以上2步之后,我们就可以下载每日账单文件了

我下载下来是这样的,上个图:

bfa30e87e7e4e99f76564dcf4f8c5cae.png

解压之后:

cd1570f1ec3b27a2963e4af9e6a68f86.png

打开excel(汇总)

是这样的:

f1af0eaca36b6da84a00bea5d8ba7279.png

至此,我们已经拿到了支付宝提供的每日账单文件,接下来才是重头戏,目前还没有确定选择哪种方案进行自动对账

确定之后,会把过程也补上。

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

智能推荐

linux 卸载 rsycn,linux – Rsync不删除_DDoS.Me的博客-程序员宅基地

我已经设置了rsync来镜像从源服务器(a)到镜像(b)的目录.我已经得到它来发送源上的新文件但是当我从源中删除文件时它不会最终删除它.以下是我用来调用rsync的内容:rsync -vhzrplt --stats --delete --rsh='/usr/bin/ssh -q' --exclude="core/" --exclude="cache/" /home/(a)/public_html...

华硕 固件 Linux内核,从官网下载ASUS固件源码进行编译!_鲁小夫的博客-程序员宅基地

sudo apt-get --no-install-recommends install autoconf automake bash bison bzip2 diffutils file flex g++ gawk gcc-multilib gettext gperf groff-base libncurses-dev libexpat1-dev libslang2 libssl-dev lib...

解决端口被占用问题(Windows版本)_香气袭人知骤暖的博客-程序员宅基地_电信端口被占用

step1:当我们运行项目的时候,控制台打印出现error:此时会显示端口地址已经被占用,端口占用的解决办法:step2:打开cmd,命令提示符,输入netstat -ano 会显示所有已经在运行的端口,step3:输入你想要查的正在占用的端口号,netstat -ano|findstr 8080step4:此时会显示端口8080对应的tcp号。step5:输入命令taskkill /f /t /im 19644此时成功终止了8080端口的运行进程。step6:此...

[原]一种使用android设备为ipad提供外置无线扩展存储的方法_iteye_14668的博客-程序员宅基地

由于带4G模块的ipad要贵1k 大洋, 64G的版本要比16G版本又要贵1k 大洋, 手头紧的A君想了一个办法来解决这个问题, 使乞丐版的ipad可以具有高大上皇帝版ipad类似的功能.  首先你要有一款安卓设备来做无线AP和移动无线外置扩展存储. 最好是可以插sd卡的 最大支持128G那种. 如果没有就没办法了. 需要root 其次, 需要一款ipad上面的文件浏览软件...

php json修改,PHP读写json文件及修改json的方法-php文件_科技体验者的博客-程序员宅基地

今天扣丁学堂小编主要是给大家分享一下PHP读写json文件及修改json的方法,喜欢PHP开发的小伙伴们可以随着小编一起来了解一下。PHP在线教程实例如下所示:// 追加写入用户名下文件$code="001";//动态数据$json_string = file_get_contents("text.json");// 从文件中读取数据到PHP变量$data = json_decode($json_...

能控能观判断_NIckWJJ的博客-程序员宅基地_能控能观怎么判断

能控能观判断1.能控判断1).约旦标准型下判别①T^{-1}AT为对角线,且特征值互异,则T^{-1}B不存在全零行时系统能控;若有相同特征值,则在满足上述要求的前提下,各特征值对应的T^{-1}B的行元素线性无关时系统能控。②T^{-1}AT中有约旦块,且每个约旦块特征值互异,则T^{-1}B中对应各约旦块的最后一行为非全零行时系统能控;若存在特征值相同的约旦块,则在满足上述要求的前提下,特征值相同的各约旦块对应的T^{-1}B的最后一行线性无关时系统能控。2).能控阵判别

随便推点

解释HTML中事件和事件处理,javascript事件是什么?_哦啦咯第一的博客-程序员宅基地

事件是可以被 JavaScript 侦测到的行为。 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件。JavaScript程序采用了异步事件驱动编程(Event-driven programming)模型,维基百科对它的解释是:事件驱动程序设计(Event-driven programming)是一种电脑程序设计模型。这种模型的程序运行流程是由用户的动作(如鼠标的按键...

【Java开发bug-007】clickhouse对开窗函数的支持_檀越剑指大厂的博客-程序员宅基地

clickhouse对开窗函数的支持clickhouse在21.3.1 以后的版本支持开窗函数开窗函数rank() oversum() oversql存在的问题t22.product_code as product_code 一定要加as product_codeleft join table on t4.MANAGING_CITY_NO = ‘M0520’ and t4.nt_source_flag=3 不支持SETTINGS allow_experimental_wi

KVC与KVO的理解_fw928576208的博客-程序员宅基地

KVC提供了一种在运行时而非编译时动态访问对象属性与成员变量的方式,也就是说,我们可以用字符串的内容作为属性名称或者成员变量名称进行访问。通过对应的字符串直接访问到实例变量,而不是通过setter和getter方法.并且可以改变一些apple的私有变量,遵循 NSKeyValueCoding,一个非正式的Protocol.代码例子#import "ViewController.h"@interfac

python3实现接口_python3.6+requests实现接口自动化1_weixin_39608394的博客-程序员宅基地

逐步完善中……以一个登录接口为例,展示一下目录结构目录1、项目目录2、登录接口和登录用例3、配置文件4、run_all.py1、项目目录以之前搭建的aiopms为平台写接口自动化,其中case中放模块和用例,common中放数据库连接信息等,config放邮箱登录信息,logs存放日志文件,report放报告文件,run_all.py执行脚本2、登录接口和登录用例login_api.py# cod...

ubuntu 18.04 安装 cuda_mixboot的博客-程序员宅基地

ubuntu 安装1, cuda安装1, cuda安装# nvidia-smiSat Jan 11 16:00:28 2020+-----------------------------------------------------------------------------+| NVIDIA-SMI 435.21 Driver Version: 435.21 ...

推荐文章

热门文章

相关标签