java对账_java后台实现支付宝对账功能的示例代码
完成支付宝支付、查询的接口之后,我们应该还需要定时与支付宝进行对账,以确保商户系统的订单信息是正确的,想知道支付宝支付、查询接口实现过程的亲们,可移步到上一篇有详细过程。
现在我们来讲一下支付宝对账的功能,关于与支付宝交互的关键代码,其实支付宝的API已经讲得很清楚,如果亲们想直接看支付宝API,点击 支付宝对账API,当然我在文章也会进行说明解释。
实现支付宝自动对账功能
先看一下商户系统和支付宝的大概交互过程:
所谓对账,其实就是调用支付宝查询接口,跟上一篇的查询接口不同的是,上一篇的查询接口是针对特定的一个订单,通过订单号或者支付宝交易号去查询这一笔订单的信息,而对账,我们需要获取一个时间段的所有订单信息,因此,我们自然而已的去看支付宝提供的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步之后,我们就可以下载每日账单文件了
我下载下来是这样的,上个图:
解压之后:
打开excel(汇总)
是这样的:
至此,我们已经拿到了支付宝提供的每日账单文件,接下来才是重头戏,目前还没有确定选择哪种方案进行自动对账
确定之后,会把过程也补上。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
java对账_java后台实现支付宝对账功能的示例代码相关推荐
- java支付宝对账功能开发_java后台实现支付宝对账功能
完成支付宝支付.查询的接口之后,我们应该还需要定时与支付宝进行对账,以确保商户系统的订单信息是正确的,想知道支付宝支付.查询接口实现过程的亲们,可移步到上一篇有详细过程. 现在我们来讲一下支付宝对账的 ...
- java 支付宝帐单_java后台实现支付宝对账功能的示例代码
完成支付宝支付.查询的接口之后,我们应该还需要定时与支付宝进行对账,以确保商户系统的订单信息是正确的,想知道支付宝支付.查询接口实现过程的亲们,可移步到上一篇有详细过程. 现在我们来讲一下支付宝对账的 ...
- java密码强度_java实现的密码强度检测功能完整示例
本文实例讲述了java实现的密码强度检测功能.分享给大家供大家参考,具体如下: CheckStrength.java文件: package com.wx.pwd; /** * 检测密码强度 * * @ ...
- Java EasyExcel在Web网站中读写Excel的方法及示例代码
使用EasyExcel可以更容易简单在Web网站中读写Excel,本文主要介绍在Java Web网站中读写Excel方法及示例代码. 原文地址:Java EasyExcel在Web网站中读写Excel ...
- 售后退款的java代码_SpringBoot 微信退款功能的示例代码
一:微信支付证书配置 二:证书读取以及读取后的使用 package com.zhx.guides.assistant.config.wechatpay; import org.apache.commo ...
- java实现阿里支付接口_Java后台使用支付宝进行支付实现---使用阿里提供的对应服务的支付宝接口...
[支付宝相关资源下载地址:支付宝开放平台 在移动支付功能处下载. 一.使用官方的Demo 需要配置基本信息: 打开"APViewController.m"文件,对以下三个参数进行 ...
- java获取文件大小_Java中获取文件大小的详解及实例代码
Java 获取文件大小 今天写代码时需要实现获取文件大小的功能,目前有两种实现方法,一种是使用File的length()方法:另外一种是使用FileInputStream的available()方法, ...
- java 保存的代码怎么写_java实现写入并保存txt文件的示例代码
java实现写入并保存txt文件的示例代码 发布时间:2020-04-30 15:14:07 来源:亿速云 阅读:110 作者:小新 这篇文章主要为大家详细介绍了java实现写入并保存txt文件的示例 ...
- java抽奖程序_java怎么做出简单的抽奖程序?实例代码展示
自从20世纪90年代以来,java编程语言的发展如火如荼,不仅仅应用于高新产业的壮大发展,还涉及到了我们的日常生活,为我们的生活带来了更多的便利与快捷方法.今天主要为大家介绍一下,如何用java做出一 ...
最新文章
- 用C#的Raw Socket实现网络封包监视
- php的类图怎么生成_PHP设计模式之简单工厂模式
- 牛客 - Connie(AC自动机+dp/KMP+dp)
- ubuntu20.04安装Qt5.15.2并配置环境
- html-页面结构分析
- Android中各个权限详解
- 云服务器安装KALI教程
- 二维otsu算法python_OpenCV-Python系列之OTSU算法
- # Day8:类的方法、三大特征、装饰器、组合、多态、设计模式
- 蓝奏批量替换自定义域名php源码
- 【Android 安全】DEX 加密 ( Proguard keep 用法 | Proguard 默认混淆结果 | 保留类及成员混淆结果 | 保留注解以及被注解修饰的类/成员/方法 )
- 计算机硬盘怎么整理,w7怎么整理磁盘碎片_如何清理win7电脑磁盘碎片
- 免费下载音乐的爬虫小程序
- FFmpeg屏幕录制
- 【VINS-Mono】Estimator::initialStructure
- Docker 修改容器端口
- 赛码练习编程题后台 动态规划——上台阶
- matlab中如何读写txt,Matlab中读取txt文件的几种方法
- thumbnailator 压缩图片
- 1.27BSC什么意思?