支付宝开放平台API

https://opendocs.alipay.com/apis/api_15/alipay.data.dataservice.bill.downloadurl.query

请求API下载账单解析

  • 支付宝下载对账单,不保存文件、不解压直接解析。
  • 该需求实现的是(trade)支付宝交易账单的业务账单。

流程

1 、调用支付宝接口, 获取zip账单下载地址

//从支付宝平台抽取对账单数据public Object checkAlipay(String qDate) throws AlipayApiException {BaseResult result = new BaseResult();//初始化支付宝客户端参数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);//创建API对应的request类AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest();JSONObject bizContent = new JSONObject();//设置业务参数bizContent.put("bill_type", "trade");bizContent.put("bill_date", qDate);request.setBizContent(bizContent.toString());//请求查询对账单下载地址接口AlipayDataDataserviceBillDownloadurlQueryResponse response = alipayClient.certificateExecute(request);//查询账单为空if (StringUtils.isEmpty(response.getBillDownloadUrl())) {result.setMessage(response.getMsg());result.setCode(Integer.valueOf(response.getCode()));return ResponseEntity.ok(result);}String urlStr = response.getBillDownloadUrl();log.info("==================支付宝返回文件下载地址:" + urlStr);

2、解析文件获取数据(重点)

  • 这里只解析明细数据,没有做汇总数据的解析。
  • 文件不做保存、不做解压直接解析获取数据。
//解析账单文件private List<AlipayBillAcount> downBill(String urlStr) {List<AlipayBillAcount> allBillInfos = new ArrayList<>();HttpURLConnection conn = null;ZipInputStream in = null;BufferedReader br = null;try {URL url = new URL(urlStr);conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(5 * 1000);conn.setRequestMethod("GET");conn.connect();// 不解压直接读取,加上GBK解决乱码问题in = new ZipInputStream(conn.getInputStream(), Charset.forName("GBK"));br = new BufferedReader(new InputStreamReader(in, "GBK"));ZipEntry zipFile;// 循环读取zip中的cvs文件,无法使用jdk自带,因为文件名中有中文while ((zipFile = in.getNextEntry()) != null) {if (zipFile.isDirectory()) {// 目录不处理}// 获得cvs名字,检测文件是否存在String fileName = zipFile.getName();log.info("对账单解析,输出文件名称:{}", fileName);if (!Objects.isNull(fileName) && fileName.indexOf(".") != -1 && !fileName.contains("汇总")) {String line;int i = 0;// 按行读取数据while ((line = br.readLine()) != null) {if (!line.startsWith("#")) {log.info("解析数据:{}", line);if (i > 0) {String[] lines = line.split(",", -1);AlipayBillAcount alipayBillAcount = AlipayBillAcount.builder().tradeNo(lines[0].trim()).outTradeNo(lines[1].trim()).businessType(lines[2].trim()).tradeName(lines[3].trim()).createTime(lines[4].trim()).date(lines[5].trim()).storeNumber(lines[6].trim()).storeName(lines[7].trim()).operator(lines[8].trim()).terminalNumber(lines[9].trim()).clientAccount(lines[10].trim()).orderAmount(new BigDecimal(lines[11].trim())).realAmount(new BigDecimal(lines[12].trim())).redPaperAmount(new BigDecimal(lines[13].trim())).jifenbaoAmount(lines[14].trim()).zfbDiscountAmount(lines[15].trim()).merchantOffersAmount(lines[16].trim()).CouponWriteOffAmount(lines[17].trim()).couponName(lines[18].trim()).merchantRedAmount(lines[19].trim()).cardAmount(lines[20].trim()).refundNo(lines[21].trim()).serviceFee(new BigDecimal(lines[22].trim())).fenrun(lines[23].trim()).build();allBillInfos.add(alipayBillAcount);}i++;}}}}} catch (IOException e) {e.printStackTrace();} finally {try {if (br != null) br.close();if (in != null) in.close();if (conn != null) conn.disconnect();} catch (IOException e) {e.printStackTrace();}}return allBillInfos;}

3、账单实体

@Data
@SuperBuilder
public class AlipayBillAcount {/*** 支付宝交易号*/private String tradeNo;/*** 商户订单号*/private String outTradeNo;/*** 业务类型*/private String businessType;/*** 商品名称*/private String tradeName;/*** 创建时间*/private String createTime;/*** 完成时间(交易时间)*/private String date;/*** 门店编号*/private String storeNumber;/*** 门店名称*/private String storeName;/*** 操作员*/private String operator;/*** 终端号*/private String terminalNumber;/*** 对方账户*/private String clientAccount;/*** 订单金额(元)*/private BigDecimal orderAmount;/*** 商家实收(元)*/private BigDecimal realAmount;/*** 支付宝红包(元)*/private BigDecimal redPaperAmount;/*** 集分宝(元)*/private String jifenbaoAmount;/*** 支付宝优惠(元)*/private String zfbDiscountAmount;/*** 商家优惠(元)*/private String merchantOffersAmount;/*** 券核销金额(元)*/private String CouponWriteOffAmount;/*** 券名称*/private String couponName;/*** 商家红包消费金额(元)*/private String merchantRedAmount;/*** 卡消费金额(元)*/private String cardAmount;/*** 退款批次号/请求号*/private String refundNo;/*** 服务费(元)*/private BigDecimal serviceFee;/*** 分润(元)*/private String fenrun;/*** 备注*/private String remark;
}

4、业务明细账单模板

支付宝对账单功能开发相关推荐

  1. 非常详细 !!!支付宝支付功能开发配置Demo演示

    1.搜索支付宝开放平台,使用支付宝扫码即可登录 2.配置沙箱环境***,找到开发服务–>研发服务,点击进入后即可开始配置 3.点击沙箱应用可以看到如下图所示,APPID是支付宝根据个人登录的支付 ...

  2. 支付宝支付功能实现原理,微信公众号中实现支付宝支付功能开发流程

    这篇文章使用一些简单的代码例子来解释微信接入支付宝支付功能的操作步骤,即使新手也可以轻松参透的. 第三方支付是指具备一定实力和信誉保障的独立机构,采用与各大银行签约的方式,通过与银行支付结算系统接口对 ...

  3. Android仿支付宝UI功能开发,Android 自定义view仿支付宝咻一咻功能

    支付宝上有一个咻一咻的功能,就是点击图片后四周有水波纹的这种效果,今天也写一个类似的功能. 效果如下所示: 思路: 就是几个圆的半径不断在变大,这个可以使用动画缩放实现,还有透明动画 还有就是这是好几 ...

  4. Android仿支付宝UI功能开发,Android类似支付宝我的界面切片

    Android界面制作-类似支付宝我的界面,内含整个项目.效果图 内含以下栏目: 头像.姓名 账单.总资产.余额. 银行卡.保险服务.公益等 资源下载: 视频地址(优酷):http://v.youku ...

  5. Android仿支付宝UI功能开发,UI实例--仿支付宝首页头部伸缩效果

    1. 效果图 下面是我们将要实现的效果图: 效果图 2.具体实现 我们可以利用design和v7包中的控件来实现(涉及到的控件有CoordinatorLayout.AppBarLayout.Toolb ...

  6. 全面剖析支付宝服务窗功能二次开发

    支付宝服务窗功能二次开发是类似于微信公众号功能二次开发一样的平台,但是支付宝跟微信之间只有区别的,微信可提供给客户发布些个人相关的信息.言论.文章等,也可以提供给单位使用:而且都支持二次开发的.而支付 ...

  7. AndroidSDK结合SpringBoot实现支付宝支付功能

    开发者注册: 1. 创建应用,获取AppID:开发者可在沙箱中完成. 沙箱应用网址:https://openhome.alipay.com/platform/appDaily.htm 2. 在支付宝助 ...

  8. Spring MVC+Spring+Mybatis实现支付宝支付功能(附完整代码)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:https://urlify.cn/aYrmIr 前言 本教 ...

  9. Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解+完整代码)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:欧阳思海 github.com/OUYANGSIHAI/si ...

  10. SSM 实现支付宝支付功能(图文详解+完整代码)

    阅读本文大概需要 4 分钟. 前言 本教程详细介绍了如何使用ssm框架实现支付宝支付功能.本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释, ...

最新文章

  1. Python staticmethod() 函数
  2. 使用python实现knn算法_使用python实现knn算法
  3. 孟晚舟升任华为轮值董事长,任正非曾表态:她无技术背景,不会成为接班人...
  4. Sumatra项目用OpenCL提高了Java的性能
  5. php单词出现频率,PHP计算文件或数组中单词出现频率
  6. docker私有仓库harbor配置helm chart仓库(安装helm chart插件)
  7. SAP CRM里business partner在订单处理中的determination流程
  8. ZJUT 地下迷宫 (高斯求期望)
  9. [原创]windows server 2012 AD架构试验系列 – 12 配置操作主机
  10. ifound Android wifi,方正新品记录仪iFound V1号称黑夜变白天,真的假的?
  11. 六石管理学:切勿通过扯皮折腾别人,一句你不要管了即可
  12. 光明顶短信支付:格式详解
  13. 打车日记 - 上班迟到
  14. 【bWAPP】XSS通关记录
  15. kafka消费者理解
  16. 仿古砖搭配这样做,会有不同的效果
  17. 页面文件太小,无法解决/BrokenPipeError: [Errno 32] Broken pipe问题解决
  18. 插板法、插空法、捆绑法
  19. 使用bundletool从.aab构建安装.apks
  20. kubeadm部署k8s

热门文章

  1. 麻雀算法极限学习机SSA-ELM回归预测及其MATLAB代码实现
  2. 封装了一个加单的php验证码功能类,超级详细,麻雀虽小五脏俱全
  3. 计算机无法识别佳能5d2,佳能相机连接后电脑显示无法识别
  4. 母亲节与父亲节之我见
  5. 音乐学院计算机音乐实验中心,中央音乐学院鼎石实验学校
  6. 单耳蓝牙耳机怎么连接_蓝牙耳机怎么连接
  7. 虚拟服务器防病毒,windows 2008 Hyper-v虚拟化防病毒
  8. 最新版火车头织梦内容发布规则_火车头采集 - 织梦图集发布模块的制作
  9. darts.h注释 - 滴水穿石 - 歪酷博客 Ycool Blog
  10. openwrt开启wifi功能