Java 支付宝对账功能(查询+文件下载+解压+遍历文件+读文件)

  • **需求**
  • **流程**
    • 1 、调用支付宝接口, 获取zip 下载地址
    • 2、工具类代码
    • 3、目录
    • 4、开发环境
    • 5、更新实际收益到本地数据库查询
    • C#实现支付宝对账

需求

定时任务:每天统计昨天的公司支付宝账户实际收益(扣除手续费)。

流程

1 、调用支付宝接口, 获取zip 下载地址
package com.ycmedia.task;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayDataDataserviceBillDownloadurlQueryRequest;
import com.alipay.api.response.AlipayDataDataserviceBillDownloadurlQueryResponse;
import com.google.common.base.Splitter;
import com.ycmedia.constants.Constants;
import com.ycmedia.dao.TaskDao;
import com.ycmedia.entity.RealIncom;
import com.ycmedia.utils.FileUtil;
import com.ycmedia.utils.ReadCsv;import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;@Component
public class AliBillTask {@Autowiredprivate Environment env;SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");@Autowiredprivate TaskDao taskDao;@Scheduled(cron = "0 14 14 ? * *")public void runAlitask() throws Exception {downloadBill();}/*** 获取指定日期的账单*/public void downloadBill() throws Exception {// 将订单提交至支付宝AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", Constants.ALI_APP_ID,Constants.ALI_PRIVATE_KEY, "json", "utf-8",Constants.ALI_DEV_PLAT_PUBLIC_KEY);AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest();JSONObject json = new JSONObject();json.put("bill_type", "trade");//昨天的数据json.put("bill_date", new DateTime().minusDays(1).toString("yyyy-MM-dd"));request.setBizContent(json.toString());AlipayDataDataserviceBillDownloadurlQueryResponse response = alipayClient.execute(request);if(response.isSuccess()){// 获取下载地址urlString url = response.getBillDownloadUrl();// 设置下载后生成Zip目录String filePath = env.getProperty("file.path");String newZip = filePath + new Date().getTime() + ".zip";// 开始下载FileUtil.downloadNet(url, newZip);// 解压到指定目录FileUtil.unZip(newZip, env.getProperty("file.zip.path"));// 遍历文件 获取需要的汇整csvFile[] fs = new File(env.getProperty("file.zip.path")).listFiles();RealIncom income = null;for (File file : fs) {if (file.getAbsolutePath().contains("汇总")) {Double money = ReadCsv.getMoney("", file.getAbsolutePath());income = new RealIncom();income.setDate(new Date());income.setMoney(money);taskDao.insertTodayMoney(income);}}// 插入成功, 删除csv 文件for (File file : fs) {file.delete();}}else{//如果账单不存在, 插入一条空数据到数据库RealIncom income= new RealIncom();income.setDate(new Date());income.setMoney(0.00);taskDao.insertTodayMoney(income);}if (response.isSuccess()) {System.out.println("调用成功");} else {System.out.println("调用失败");}System.out.println(JSON.toJSONString(response));}}
2、工具类代码
package com.ycmedia.utils;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Enumeration;import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;public class FileUtil {/*** 使用GBK编码可以避免压缩中文文件名乱码*/private static final String CHINESE_CHARSET = "GBK";/*** 文件读取缓冲区大小*/private static final int CACHE_SIZE = 1024;/*** 第一步: 把 支付宝生成的账单 下载到本地目录* * @param path*            支付宝资源url* @param filePath*            生成的zip 包目录* @throws MalformedURLException*/public static void downloadNet(String path, String filePath)throws MalformedURLException {// 下载网络文件int bytesum = 0;int byteread = 0;URL url = new URL(path);try {URLConnection conn = url.openConnection();InputStream inStream = conn.getInputStream();FileOutputStream fs = new FileOutputStream(filePath);byte[] buffer = new byte[1204];while ((byteread = inStream.read(buffer)) != -1) {bytesum += byteread;fs.write(buffer, 0, byteread);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public static void unZip(String zipFilePath, String destDir)throws Exception {ZipFile zipFile = new ZipFile(zipFilePath, CHINESE_CHARSET);Enumeration<?> emu = zipFile.getEntries();BufferedInputStream bis;FileOutputStream fos;BufferedOutputStream bos;File file, parentFile;ZipEntry entry;byte[] cache = new byte[CACHE_SIZE];while (emu.hasMoreElements()) {entry = (ZipEntry) emu.nextElement();if (entry.isDirectory()) {new File(destDir + entry.getName()).mkdirs();continue;}bis = new BufferedInputStream(zipFile.getInputStream(entry));file = new File(destDir + entry.getName());parentFile = file.getParentFile();if (parentFile != null && (!parentFile.exists())) {parentFile.mkdirs();}fos = new FileOutputStream(file);bos = new BufferedOutputStream(fos, CACHE_SIZE);int nRead = 0;while ((nRead = bis.read(cache, 0, CACHE_SIZE)) != -1) {fos.write(cache, 0, nRead);}bos.flush();bos.close();fos.close();bis.close();}zipFile.close();}}
3、目录

4、开发环境

5、更新实际收益到本地数据库查询
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.HashMap;public class ReadCsv {// public static void main(String[] args) {// try {//// BufferedReader reader=new BufferedReader(new InputStreamReader(new// FileInputStream("D:\\down\\1476771240197\\20884217298464250156_20160914_业务明细.csv"),"gbk"));// reader.read();//第一行信息,为标题信息,不用,如果需要,注释掉// String line = null;////// while((line=reader.readLine())!=null){// String item[] = line.split("\r\n");//CSV格式文件为逗号分隔符文件,这里根据逗号切分//// String last = item[item.length-1];//这就是你要的数据了//// if(last.contains(")")){// System.out.println(Double.valueOf(last.split(",")[12])-Double.valueOf(last.split(",")[22]));// }// }// } catch (Exception e) {// e.printStackTrace();// }// }public static HashMap<String, Double> getDetailOrder(String filePath) {HashMap<String, Double> map = new HashMap<String, Double>();try {BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "gbk"));reader.read();// 第一行信息,为标题信息,不用,如果需要,注释掉String line = null;while ((line = reader.readLine()) != null) {String item[] = line.split("\r\n");// CSV格式文件为逗号分隔符文件,这里根据逗号切分String last = item[item.length - 1];// 这就是你要的数据了if (last.contains(")")) {map.put(last.split(",")[0],Double.valueOf(last.split(",")[12])- Double.valueOf(last.split(",")[22]));}}} catch (Exception e) {e.printStackTrace();}return map;}/*** 根绝类型获取指定行的数据* * @param type* @return*/public static Double getMoney(String type, String filePath) {Double money = null;try {BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "gbk"));reader.read();//String line = null;while ((line = reader.readLine()) != null) {String item[] = line.split("\r\n");String last = item[item.length - 1];if (last.contains("合计")) {String[] strs = last.split(",");money = Double.valueOf(strs[strs.length - 1]);}}} catch (Exception e) {e.printStackTrace();}return money;}}
C#实现支付宝对账

C# 支付宝对账功能(查询+文件下载+解压+遍历文件+读文件)

Java 支付宝对账功能(查询+文件下载+解压+遍历文件+读文件)相关推荐

  1. C# 支付宝对账功能(查询+文件下载+解压+遍历文件+读文件)

    C# 支付宝对账功能(查询+文件下载+解压+遍历文件+读文件) **需求** **流程** 1 .调用支付宝接口, 获取zip 下载地址 2.工具代码 需求 定时任务:每天统计昨天的公司支付宝账户实际 ...

  2. 支付宝对账查询+文件下载+解压+遍历文件+读文件

    需求: 定时任务:每天统计昨天的公司支付宝账户实际收益(扣除手续费) 流程: 1 .调用支付宝接口, 获取zip 下载地址 package com.ycmedia.task; import com.a ...

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

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

  4. 支付宝(查询对账单下载地址+文件下载+解压+遍历文件+读文件)

    1 .调用支付宝接口, 获取zip 下载地址 package com.ycmedia.task;import com.alibaba.fastjson.JSON; import com.alibaba ...

  5. 【Android 安全】DEX 加密 ( Java 工具开发 | 加密解密算法 API | 编译代理 Application 依赖库 | 解压依赖库 aar 文件 )

    文章目录 一.加密解密算法 API 二.编译代理 Application 依赖库 三.解压代理 Application 依赖库 aar 文件 参考博客 : [Android 安全]DEX 加密 ( 常 ...

  6. Java解压上传zip或rar文件,并解压遍历文件中的html的路径

    1.本文只提供了一个功能的代码 public String addFreeMarker() throws Exception {HttpSession session = request.getSes ...

  7. 解压特定zip压缩文件中特定文件,Java

    解压特定zip压缩文件中指定文件,Java 有些时候,zip压缩文件特别大动辄几GB,但是只想要其中某一个特定文件,此时就完全没必要把全量文件都解压出来,只需解压指定文件即可. public stat ...

  8. 【Google Play】APK 扩展包 ( 2021年09月 最新处理方案 | 文件准备 | 拷贝文件至内置存储 | 解压及使用扩展文件 )

    文章目录 前言 一.文件准备 二.拷贝文件至内置存储 三.解压及使用扩展文件 四.博客资源 前言 在上一篇博客 [Google Play]APK 扩展包 ( 2021年09月02日最新处理方案 | 内 ...

  9. 压缩多张图片,解压后发现图片文件损坏的问题解决

    最近项目里需要做一个功能,就是吧多张图片压缩一个压缩文件,我使用的是java的ZipOutputStream 来实现的.最后开发完了,测试发现解压后的图片文件只有第一张能打开,后面的几张图片都打不开. ...

最新文章

  1. 【jsp】写jsp文件的准备
  2. 实验室博士背着导师私发了两篇SCI,导师知道了会怎样?
  3. Linux系统调优概述
  4. 你如何在java中获取线程堆_如何在Windows上获取未在控制台中运行的Java进程的线程和堆转储...
  5. 怎么样学好c++_怎么样
  6. 国内开源镜像站地址汇总
  7. 输入小写字母转换为大写字母
  8. 学金融离不开计算机,如何看待学计算机的被学金融的鄙视
  9. 皇图中原青豫大战打到服务器维护,【九州皇图】青、豫国砸再现激情
  10. 帕雷托理论和长尾理论
  11. 铁憨憨的Python 爬虫学习 Python_Learn
  12. awesome php
  13. 科研实习 | 北京大学万小军老师课题组招收NLP方向实习生和访问学生
  14. C++模拟手机调查问卷
  15. 阿里云——云迁移中心
  16. TimingLaba(定时播放软件)控制文件夹内音乐播放间隔的方法
  17. “Physically-Based Rendering for Indoor Scene Understanding Using Convolutional Neural Networks”论文阅读
  18. QuestaSim里覆盖率的查看
  19. 游戏中的语音聊天方案
  20. 网络流行语基本能力测试题,为了证明2010年你没白过

热门文章

  1. 真人版《美女与野兽》刚上映,迪士尼又推出同系列VR体验
  2. synology群晖存储手机drive上传文件
  3. 2023-05-20:go语言的slice和rust语言的Vec的扩容流程是什么?
  4. 特斯拉线圈的制作教程
  5. 如何不用串口线进行连接其他交换机
  6. 上拉、下拉以及对应上拉电阻和下拉电阻的作用原理
  7. 考勤打卡定时器Quartz
  8. 2020年中国高温合金行业发展现状及竞争格局分析,20年高温合金供需缺口扩大,依赖进口「图」
  9. matlab 蜡烛图 颜色,Matplotlib图facecolor(背景颜色)
  10. 记录一次自己的奇葩数学学习-java中的atan2和Excel中的atan2 以及菜鸟和w3cshool的奇葩指导