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<String, Object> 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(汇总)

是这样的:

至此,我们已经拿到了支付宝提供的每日账单文件,接下来才是重头戏,目前还没有确定选择哪种方案进行自动对账

确定之后,会把过程也补上。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java实现支付宝之第三方支付宝即时到账支付功能

    alipay 的几个内核功能文件: AlipayFunction.java package com.test.util.alipay; import java.io.FileWriter; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Collections; import ja

  • java实现在SSM下使用支付宝扫码支付功能

    本文实例为大家分享了java使用支付宝扫码支付的具体代码,供大家参考,具体内容如下 准备工作 首先开通支付宝沙箱的测试账号,里面会有消费者账户和收款方账户 手机扫码下载手机端app 基础配置 所需jar包 AlipayConfig package com.alipay.config; import java.io.FileWriter; import java.io.IOException; import java.util.ResourceBundle; /* * *类名:AlipayConf

  • Java判断浏览器是微信还是支付宝

    下面一段代码给大家介绍java判断浏览器是微信还是支付宝,具体代码如下所示: @RequestMapping("getBrowser.do") public String getBrowser(HttpServletRequest req, HttpServletResponse resp) { String userAgent = req.getHeader("user-agent"); if (userAgent != null && userA

  • java支付宝即时到帐提交订单功能

    本文实例为大家分享了java支付宝即时到帐提交订单的具体代码,供大家参考,具体内容如下 package com.tian.batis; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; im

  • 详解java集成支付宝支付接口(JSP+支付宝20160912)

    吐槽一下: 支付宝的接口和微信的DEMO和文档真心太难看懂了,乱七八糟,都不知道去哪里找自己要的东西,最近几天我们公司需要做类似的开发,我作为先锋,率先解决Java集成支付宝支付和微信支付接口工作. 我们的工作环境:JSP网站+支付接口,目前工作的支付宝接口为20160912,微信为V3版本,如遇到版本升级,请联系相关机构的客户服务人员升级. 本文介绍JSP+支付宝接口,本文非原创. 新手注意: 1.本文使用的接口地址和参数为沙箱的地址,无论你在使用沙箱或者正式地址,务必核实使用接口地址和参数,

  • java后台实现支付宝支付接口和支付宝订单查询接口(前端为APP)

    最近项目APP需要接入微信.支付宝支付功能,在分配开发任务时,听说微信支付接口比支付宝支付接口要难实现,由于我开发经验不是那么丰富(现工作经验1年半)且未接触过支付接口开发,组里刚好又有支付接口的老司机,所以很自然把简单的支付宝接口开发任务交给了我,看来开发组的组长还是很好人的嘛.....,废话就不多说了,我们开始吧! 实现支付宝接口详细过程 1.去支付宝官网申请公司企业账号并开通一个应用,在应用里签约APP支付功能 具体的申请截图步骤,在这里我就不详细说了,因为这不是文章的重点,可参考支付宝官

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

    完成支付宝支付.查询的接口之后,我们应该还需要定时与支付宝进行对账,以确保商户系统的订单信息是正确的,想知道支付宝支付.查询接口实现过程的亲们,可移步到上一篇有详细过程. 现在我们来讲一下支付宝对账的功能,关于与支付宝交互的关键代码,其实支付宝的API已经讲得很清楚,如果亲们想直接看支付宝API,点击 支付宝对账API,当然我在文章也会进行说明解释. 实现支付宝自动对账功能 先看一下商户系统和支付宝的大概交互过程: 所谓对账,其实就是调用支付宝查询接口,跟上一篇的查询接口不同的是,上一篇的查询接

  • JAVA Netty实现聊天室+私聊功能的示例代码

    功能介绍 使用Netty框架实现聊天室功能,服务器可监控客户端上下限状态,消息转发.同时实现了点对点私聊功能.技术点我都在代码中做了备注,这里不再重复写了.希望能给想学习netty的同学一点参考. 服务器代码 服务器入口代码 package nio.test.netty.groupChat; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.chann

  • Java spring boot 实现支付宝支付功能的示例代码

    一.准备工作: 1.登陆支付宝开发者中心,申请一个开发者账号. 地址:https://openhome.alipay.com/ 2.进入研发服务: 3.点击链接进入工具下载页面: 4.点击下载对应版本的RSA公钥生成器: 5.生成公钥密钥(记录你的应用私钥): 6.在支付宝配置公钥(点击保存): 二.搭建demo 1.引入jia包: <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alip

  • 详解java 拼音首字母搜索内容功能的示例

    序 一款成熟的产品,首页的搜索功能除了正常的关键词匹配以外:还要考虑到用户忘记输入汉字或者用户想通过关键字首字母来进行搜索的操作. 这不,阿淼公司最近在做游戏盒子,其中包含很多游戏,有个需求就是要用户可以根据游戏名称首字母搜索游戏,如搜索 zwdzjs 可以搜索出来植物大战僵尸等:输入 hzw 可以搜索出来海贼王等. 功能如何实现?接下来阿淼就直接带大家实操. 1.导入依赖包 <dependency> <groupId>com.belerweb</groupId> &l

  • 基于Java实现QQ登录注册功能的示例代码

    目录 前言 实现代码 登录页面 注册页面 效果展示 前言 本文主要应用的技术有:GUI.JDBC.多线程 实现的功能具体如下: 1.登录功能 2.注册功能 3.是否隐藏密码的选择以及实现功能 4.选择性别功能 5.密码与确认密码功能 6.登录页面实时展示当前的时间 7.当登录时用户名与密码在数据库中没有相匹配的数据,则会跳转到注册页面上去. 8.同样,注册完毕后,数据会运用JDBC将数据写入数据库中,然后跳转回登录页面. 实现代码 登录页面 import javax.swing.*; impor

  • Java实现断点下载功能的示例代码

    目录 介绍 效果 前端代码 后端代码 介绍 当下载一个很大的文件时,如果下载到一半暂停,如果继续下载呢?断点下载就是解决这个问题的. 具体原理: 利用indexedDb,将下载的数据存储到用户的本地中,这样用户就算是关电脑那么下次下载还是从上次的位置开始的 先去看看本地缓存中是否存在这个文件的分片数据,如果存在那么就接着上一个分片继续下载(起始位置) 下载前先去后端拿文件的大小,然后计算分多少次下载(n/(1024*1024*10)) (结束位置) 每次下载的数据放入一个Blob中,然后存储到本

  • WPF+ASP.NET SignalR实现后台通知功能的示例代码

    目录 涉及知识点 前提条件 服务端 客户端 运行示例 在实际业务中,当后台数据发生变化,客户端能够实时的收到通知,而不是由用户主动的进行页面刷新才能查看,这将是一个非常人性化的设计.比如数字化大屏,并没有人工的干预,而是自动的刷新数据,那如何才能实现数据的实时刷新呢?本文以一个简单示例,简述如何通过WPF+ASP.NET SignalR实现消息后台通知以及数据的实时刷新,仅供学习分享使用,如有不足之处,还请指正. 通过上一篇文章的学习,了解了如何通过SignalR实现在线聊天功能,在示例中,我们

  • Java实现断点续传功能的示例代码

    目录 一.题目描述 二.解题思路 三.代码详解 一.题目描述 题目实现:网络资源的断点续传功能. 二.解题思路 获取要下载的资源网址 显示网络资源的大小 上次读取到的字节位置以及未读取的字节数 输入下载的起始位置和结束位置,开始下载网络资源 如果没有下载完成,可以接着上次的下载位置继续下载 创建一个类:BreakPointSuperveneFrame,继承JFrame窗体类. 定义一个download()方法:用于实现网络资源的断点续传. 核心重点:通过设置请求参数RANGE实现,通过RANGE

  • Vue后台实现点击图片放大功能的示例代码

    目录 需求 代码 父组件 子组件 dom.js util.js types.js 需求 点击小图可以放大,放大后,通过手势等比例放大缩小.左右切换图.旋转.关闭.由于element-ui版本较低不支持使用图片放大的image组件. 代码 父组件 <template> <div> <!-- 放大图 --> <el-image-viewer v-if="showImg" :on-close="closeViewer" :src=

  • SSM项目实现短信验证码登录功能的示例代码

    目录 1.登入网站 zz短信平台 2.导入工具类MessageUtil 3.ajax 模块 4. html页面 5.编写controller层 1.登入网站 zz短信平台 http://sms_developer.zhenzikj.com/zhenzisms_user/login.html 导入pom依赖 <dependency> <groupId>com.zhenzikj</groupId> <artifactId>zhenzisms</artifa

随机推荐