java后台实现支付宝对账功能的示例代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
java后台实现⽀付宝对账功能的⽰例代码
完成⽀付宝⽀付、查询的接⼝之后,我们应该还需要定时与⽀付宝进⾏对账,以确保商户系统的订单信息是正确的,想知道⽀付宝⽀付、查询接⼝实现过程的亲们,可移步到有详细过程。
现在我们来讲⼀下⽀付宝对账的功能,关于与⽀付宝交互的关键代码,其实⽀付宝的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() {
("==================向⽀付宝发起对账请求");
// 获取⽀付宝⽀付的配置信息
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();
("==================⽀付宝返回⽂件下载地址:"+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(汇总)
是这样的:
⾄此,我们已经拿到了⽀付宝提供的每⽇账单⽂件,接下来才是重头戏,⽬前还没有确定选择哪种⽅案进⾏⾃动对账确定之后,会把过程也补上。
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。