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

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

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

  2. java 批量写入文件_Java批量写入文件和下载图片的示例代码

    很久没有在WhitMe上写日记了,因为觉着在App上写私密日记的话肯定是不安全的,但是想把日记存下来.,然后看到有导出日记的功能,就把日记导出了(还好可以直接导出,不然就麻烦点).导出的是一个html ...

  3. java批量下载图片_Java批量写入文件和下载图片的示例代码

    很久没有在WhitMe上写日记了,因为觉着在App上写私密日记的话肯定是不安全的,但是想把日记存下来.,然后看到有导出日记的功能,就把日记导出了(还好可以直接导出,不然就麻烦点).导出的是一个html ...

  4. 售后退款的java代码_SpringBoot 微信退款功能的示例代码

    一:微信支付证书配置 二:证书读取以及读取后的使用 package com.zhx.guides.assistant.config.wechatpay; import org.apache.commo ...

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

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

  6. java支付宝对账功能开发_java后台实现支付宝对账功能

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

  7. java客户端重复请求_Java后台防止客户端重复请求、提交表单实现原理

    Java后台防止客户端重复请求.提交表单实现原理 发布于 2021-1-8| 复制链接 摘记: 这篇文章主要介绍了Java后台防止客户端重复请求.提交表单实现原理,文中通过示例代码介绍的非常详细,对大 ...

  8. java判断输入月份_Java输入年份和月份判断多少天实例代码

    前言 本文主要介绍了如果通过输入年份月份输出天数的相关内容,下面话不多说了,来一起看看详细的介绍吧 示例代码 package com.ambow.www.ch03; import java.util. ...

  9. java接口方法实现_Java接口的简单定义与实现方法示例

    本文实例讲述了Java接口的简单定义与实现方法.分享给大家供大家参考,具体如下: 1.接口是Java中最终要的概念,接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成. 2.接口的 ...

最新文章

  1. PowerCenter基础心得
  2. QtWebkit中浏览器插件的设计-1
  3. mfc oninitdialog 中的hwnd == null_在SOUI中使用动态多语言切换
  4. 【小安翻唱】Dreams-黑之契约者 双蛋快乐~顺便来拉票咯!
  5. ORACLE 10G rman 备份脚本
  6. Java压缩/解压缩二进制文件
  7. oracle 建立一个游戏库,Power Designer怎么新建Oracle数据?建立Oracle数据教程分享
  8. [Javascript]js中所学知识点回顾总结
  9. 190531每日一句
  10. 李氏第二法分析稳定性matlab,9-4李雅普诺夫稳定性分析2010.ppt
  11. 知名歌手凌晨跳楼自杀:他为什么要走上绝路
  12. [Java]批量生成二维码
  13. php图书馆占座系统代码,PHP图书馆管理系统(源码+数据库脚本+截图)
  14. AWS新用户入门学习必备知识
  15. PTA 7-47 打印选课学生名单分数 25 分 (C 邻接表+二叉排序树 )
  16. 电脑插入U盘后,有提示音,但电脑不显示U盘
  17. 大学生个人网页模板 简单网页制作作业成品 (响应式明星防弹少年团7页)
  18. 小车高速怎么收费标准_2018高速收费最新标准 跑长途的要看看
  19. Android中添加CallStack打印
  20. nor flash 和nand flash 区别

热门文章

  1. 蓝牙hid协议源码解析
  2. php 1为false,false是1还是0
  3. blockchain-wallet-sdk中的助记词部分使用示例
  4. Android机器人纯HTML
  5. 安装ubuntu服务器版本
  6. 安卓onKeyDown事件
  7. 国家集训队论文集题目
  8. 【Java】浅谈Swing概况及简单窗口的构建
  9. PKUWC2019 游记
  10. 数据库综合案例(商店买商品)