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

现在我们来讲一下支付宝对账的功能,关于与支付宝交互的关键代码,其实支付宝的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后台实现支付宝对账功能相关推荐

  1. java实现阿里支付接口_Java后台使用支付宝进行支付实现---使用阿里提供的对应服务的支付宝接口...

    [支付宝相关资源下载地址:支付宝开放平台  在移动支付功能处下载. 一.使用官方的Demo 需要配置基本信息: 打开"APViewController.m"文件,对以下三个参数进行 ...

  2. java 支付宝帐单_java后台实现支付宝对账功能的示例代码

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

  3. java对账_java后台实现支付宝对账功能的示例代码

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

  4. java实现微信小程序客服功能开发,后台接受用户发送消息实现关键词自动回复

    最近做了一个小程序中间用到了小程序客服功能,主要实现采集用户提问,并且针对关键词自动回复及手动回复.中间踩过很多坑,所也现在记录下来提供给大家. 准备 首先准备一个小程序,配置好域名,左边菜单栏目点击 ...

  5. java开发用怎么软件开发_Java 9中的5个功能将改变您开发软件的方式(还有2个不会)...

    java开发用怎么软件开发 有望在Java 9中发布的最令人兴奋的功能是什么? 近期不要对Java 9相对沉默而分心.JDK提交者正在努力准备下一个版本,预计在2015年12月才完成功能的下一个版本. ...

  6. mq java 开发_Java后台开发ActiveMQ使用指南

    ActiveMQ简单的介绍 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线,是一个开放源代码消息中间件,对于消息的传递有两种类型:点对点的,即一个生产者和一个消费者一一对应. ...

  7. java微信红包开发_java写的伪微信红包功能示例代码

    性能优化点: 1.使用int不使用double.(单位用分不用元)也省去了还要用math.round四舍五入,把double类型数据只留小数点后前两位. 2.random() 方法用于返回一个随机数, ...

  8. java实现天天酷跑开发_Java项目实战之天天酷跑

    作者:MyHuey 来源:blog.csdn.net/qq_45909299 首先,写一个需求文档: 一.项目名称:<天天酷跑>(RunDay) 二.功能介绍:闯关类游戏,玩家登录后,选择 ...

  9. java取list中最大数值_Java后台通过Collections获取list集合中最大数,最小数代码

    我就废话不多说了,大家还是直接看代码吧~ package com.jalor; import java.util.ArrayList; import java.util.Collections; im ...

最新文章

  1. 图像处理学习三(频域图像增强)
  2. linux ssh密钥认证
  3. python中统计计数的几种方法
  4. java入门之内部类
  5. 关于浏览器预检(OPTIONS)请求
  6. windows版redis报错:本地计算机上的Redis服务启动后停止
  7. 输入一个三位数,再反向输出
  8. 机器学习之欠采样和过采样
  9. 国货当自强!四款好用又免费的国产项目管理工具
  10. Android 10 低内存应用白名单和应用保活
  11. 自主招生认可的英语竞赛有哪些
  12. Json-Handle插件下载安装使用
  13. matlab 设计数字滤波器,基于Matlab的FIR数字滤波器设计
  14. unity功能开发——实名认证
  15. 群响黄宝书:淘宝客历史沿革和新崛起的淘宝高手分享
  16. 网页中打开word文档
  17. [MTCTF]从出题人视角看ez_cms
  18. 网站统计IP PV UV实现原理
  19. 177则经典名著名句
  20. WinSCP连接Linux

热门文章

  1. 修改自带input样式input:-internal-autofill-selected为透明色
  2. 次日即流失?直播App如何运营超级用户?
  3. 关于自己写的第一份简历
  4. 【归并排序】基础代码
  5. Graphite 介绍
  6. 【houdini 核心概念】Stamp
  7. 如何卸载有密码保护的Symantec Endpoint Protection v11
  8. [leetcode] 质因数分解
  9. 二叉树的前序遍历-python
  10. java根据前序和中序建树_Java实现根据前序遍历构建二叉树(前序遍历、中序遍历、后序遍历)...