mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-08-25 10:08:16 +08:00
完善微信支付 下载对账单 的接口 #65
This commit is contained in:
parent
1806389a4d
commit
9d2fb9fe3d
@ -0,0 +1,257 @@
|
|||||||
|
package com.github.binarywang.wxpay.bean.result;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class WxPayBillBaseResult implements Serializable
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* 交易时间:2017-04-06 01:00:02 公众账号ID: 商户号: 子商户号:0 设备号:WEB 微信订单号: 商户订单号:2017040519091071873216 用户标识: 交易类型:NATIVE
|
||||||
|
* 交易状态:REFUND 付款银行:CFT 货币种类:CNY 总金额:0.00 企业红包金额:0.00 微信退款单号: 商户退款单号:20170406010000933 退款金额:0.01 企业红包退款金额:0.00
|
||||||
|
* 退款类型:ORIGINAL 退款状态:SUCCESS 商品名称: 商户数据包: 手续费:0.00000 费率 :0.60%
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
/**交易时间*/
|
||||||
|
private String tradeTime;
|
||||||
|
/**公众账号ID*/
|
||||||
|
private String appId;
|
||||||
|
/**商户号*/
|
||||||
|
private String mchId;
|
||||||
|
/**子商户号*/
|
||||||
|
private String subMchId;
|
||||||
|
/**设备号*/
|
||||||
|
private String deviceInfo;
|
||||||
|
/**微信订单号*/
|
||||||
|
private String transationId;
|
||||||
|
/**商户订单号*/
|
||||||
|
private String outTradeNo;
|
||||||
|
/**用户标识*/
|
||||||
|
private String openId;
|
||||||
|
/**交易类型*/
|
||||||
|
private String tradeType;
|
||||||
|
/**交易状态*/
|
||||||
|
private String tradeState ;
|
||||||
|
/**付款银行*/
|
||||||
|
private String bankType;
|
||||||
|
/**货币种类*/
|
||||||
|
private String feeType;
|
||||||
|
/**总金额*/
|
||||||
|
private String totalFee;
|
||||||
|
/**企业红包金额*/
|
||||||
|
private String couponFee;
|
||||||
|
/**微信退款单号*/
|
||||||
|
private String refundId;
|
||||||
|
/**商户退款单号*/
|
||||||
|
private String outRefundNo;
|
||||||
|
/**退款金额*/
|
||||||
|
private String settlementRefundFee;
|
||||||
|
/**企业红包退款金额*/
|
||||||
|
private String couponRefundFee;
|
||||||
|
/**退款类型*/
|
||||||
|
private String refundChannel;
|
||||||
|
/**退款状态*/
|
||||||
|
private String refundState;
|
||||||
|
/**商品名称*/
|
||||||
|
private String body;
|
||||||
|
/**商户数据包*/
|
||||||
|
private String attach;
|
||||||
|
/**手续费*/
|
||||||
|
private String poundage;
|
||||||
|
/**费率*/
|
||||||
|
private String poundageRate;
|
||||||
|
public String getTradeTime()
|
||||||
|
{
|
||||||
|
return tradeTime;
|
||||||
|
}
|
||||||
|
public void setTradeTime(String tradeTime)
|
||||||
|
{
|
||||||
|
this.tradeTime = tradeTime;
|
||||||
|
}
|
||||||
|
public String getAppId()
|
||||||
|
{
|
||||||
|
return appId;
|
||||||
|
}
|
||||||
|
public void setAppId(String appId)
|
||||||
|
{
|
||||||
|
this.appId = appId;
|
||||||
|
}
|
||||||
|
public String getMchId()
|
||||||
|
{
|
||||||
|
return mchId;
|
||||||
|
}
|
||||||
|
public void setMchId(String mchId)
|
||||||
|
{
|
||||||
|
this.mchId = mchId;
|
||||||
|
}
|
||||||
|
public String getSubMchId()
|
||||||
|
{
|
||||||
|
return subMchId;
|
||||||
|
}
|
||||||
|
public void setSubMchId(String subMchId)
|
||||||
|
{
|
||||||
|
this.subMchId = subMchId;
|
||||||
|
}
|
||||||
|
public String getDeviceInfo()
|
||||||
|
{
|
||||||
|
return deviceInfo;
|
||||||
|
}
|
||||||
|
public void setDeviceInfo(String deviceInfo)
|
||||||
|
{
|
||||||
|
this.deviceInfo = deviceInfo;
|
||||||
|
}
|
||||||
|
public String getTransationId()
|
||||||
|
{
|
||||||
|
return transationId;
|
||||||
|
}
|
||||||
|
public void setTransationId(String transationId)
|
||||||
|
{
|
||||||
|
this.transationId = transationId;
|
||||||
|
}
|
||||||
|
public String getOutTradeNo()
|
||||||
|
{
|
||||||
|
return outTradeNo;
|
||||||
|
}
|
||||||
|
public void setOutTradeNo(String outTradeNo)
|
||||||
|
{
|
||||||
|
this.outTradeNo = outTradeNo;
|
||||||
|
}
|
||||||
|
public String getOpenId()
|
||||||
|
{
|
||||||
|
return openId;
|
||||||
|
}
|
||||||
|
public void setOpenId(String openId)
|
||||||
|
{
|
||||||
|
this.openId = openId;
|
||||||
|
}
|
||||||
|
public String getTradeType()
|
||||||
|
{
|
||||||
|
return tradeType;
|
||||||
|
}
|
||||||
|
public void setTradeType(String tradeType)
|
||||||
|
{
|
||||||
|
this.tradeType = tradeType;
|
||||||
|
}
|
||||||
|
public String getTradeState()
|
||||||
|
{
|
||||||
|
return tradeState;
|
||||||
|
}
|
||||||
|
public void setTradeState(String tradeState)
|
||||||
|
{
|
||||||
|
this.tradeState = tradeState;
|
||||||
|
}
|
||||||
|
public String getBankType()
|
||||||
|
{
|
||||||
|
return bankType;
|
||||||
|
}
|
||||||
|
public void setBankType(String bankType)
|
||||||
|
{
|
||||||
|
this.bankType = bankType;
|
||||||
|
}
|
||||||
|
public String getFeeType()
|
||||||
|
{
|
||||||
|
return feeType;
|
||||||
|
}
|
||||||
|
public void setFeeType(String feeType)
|
||||||
|
{
|
||||||
|
this.feeType = feeType;
|
||||||
|
}
|
||||||
|
public String getTotalFee()
|
||||||
|
{
|
||||||
|
return totalFee;
|
||||||
|
}
|
||||||
|
public void setTotalFee(String totalFee)
|
||||||
|
{
|
||||||
|
this.totalFee = totalFee;
|
||||||
|
}
|
||||||
|
public String getCouponFee()
|
||||||
|
{
|
||||||
|
return couponFee;
|
||||||
|
}
|
||||||
|
public void setCouponFee(String couponFee)
|
||||||
|
{
|
||||||
|
this.couponFee = couponFee;
|
||||||
|
}
|
||||||
|
public String getRefundId()
|
||||||
|
{
|
||||||
|
return refundId;
|
||||||
|
}
|
||||||
|
public void setRefundId(String refundId)
|
||||||
|
{
|
||||||
|
this.refundId = refundId;
|
||||||
|
}
|
||||||
|
public String getOutRefundNo()
|
||||||
|
{
|
||||||
|
return outRefundNo;
|
||||||
|
}
|
||||||
|
public void setOutRefundNo(String outRefundNo)
|
||||||
|
{
|
||||||
|
this.outRefundNo = outRefundNo;
|
||||||
|
}
|
||||||
|
public String getSettlementRefundFee()
|
||||||
|
{
|
||||||
|
return settlementRefundFee;
|
||||||
|
}
|
||||||
|
public void setSettlementRefundFee(String settlementRefundFee)
|
||||||
|
{
|
||||||
|
this.settlementRefundFee = settlementRefundFee;
|
||||||
|
}
|
||||||
|
public String getCouponRefundFee()
|
||||||
|
{
|
||||||
|
return couponRefundFee;
|
||||||
|
}
|
||||||
|
public void setCouponRefundFee(String couponRefundFee)
|
||||||
|
{
|
||||||
|
this.couponRefundFee = couponRefundFee;
|
||||||
|
}
|
||||||
|
public String getRefundChannel()
|
||||||
|
{
|
||||||
|
return refundChannel;
|
||||||
|
}
|
||||||
|
public void setRefundChannel(String refundChannel)
|
||||||
|
{
|
||||||
|
this.refundChannel = refundChannel;
|
||||||
|
}
|
||||||
|
public String getRefundState()
|
||||||
|
{
|
||||||
|
return refundState;
|
||||||
|
}
|
||||||
|
public void setRefundState(String refundState)
|
||||||
|
{
|
||||||
|
this.refundState = refundState;
|
||||||
|
}
|
||||||
|
public String getBody()
|
||||||
|
{
|
||||||
|
return body;
|
||||||
|
}
|
||||||
|
public void setBody(String body)
|
||||||
|
{
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
public String getAttach()
|
||||||
|
{
|
||||||
|
return attach;
|
||||||
|
}
|
||||||
|
public void setAttach(String attach)
|
||||||
|
{
|
||||||
|
this.attach = attach;
|
||||||
|
}
|
||||||
|
public String getPoundage()
|
||||||
|
{
|
||||||
|
return poundage;
|
||||||
|
}
|
||||||
|
public void setPoundage(String poundage)
|
||||||
|
{
|
||||||
|
this.poundage = poundage;
|
||||||
|
}
|
||||||
|
public String getPoundageRate()
|
||||||
|
{
|
||||||
|
return poundageRate;
|
||||||
|
}
|
||||||
|
public void setPoundageRate(String poundageRate)
|
||||||
|
{
|
||||||
|
this.poundageRate = poundageRate;
|
||||||
|
}
|
||||||
|
public static long getSerialversionuid()
|
||||||
|
{
|
||||||
|
return serialVersionUID;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,86 @@
|
|||||||
|
package com.github.binarywang.wxpay.bean.result;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class WxPayBillResult implements Serializable
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 对账返回对象
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private List<WxPayBillBaseResult> wxPayBillBaseResultLst;
|
||||||
|
/**总交易单数*/
|
||||||
|
private String totalRecord;
|
||||||
|
/**总交易额*/
|
||||||
|
private String totalFee;
|
||||||
|
/**总退款金额*/
|
||||||
|
private String totalRefundFee;
|
||||||
|
/**总代金券或立减优惠退款金额*/
|
||||||
|
private String totalCouponFee;
|
||||||
|
/**手续费总金额 */
|
||||||
|
private String totalPoundageFee;
|
||||||
|
|
||||||
|
public List<WxPayBillBaseResult> getWxPayBillBaseResultLst()
|
||||||
|
{
|
||||||
|
return wxPayBillBaseResultLst;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWxPayBillBaseResultLst(List<WxPayBillBaseResult> wxPayBillBaseResultLst)
|
||||||
|
{
|
||||||
|
this.wxPayBillBaseResultLst = wxPayBillBaseResultLst;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTotalRecord()
|
||||||
|
{
|
||||||
|
return totalRecord;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotalRecord(String totalRecord)
|
||||||
|
{
|
||||||
|
this.totalRecord = totalRecord;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTotalFee()
|
||||||
|
{
|
||||||
|
return totalFee;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotalFee(String totalFee)
|
||||||
|
{
|
||||||
|
this.totalFee = totalFee;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTotalRefundFee()
|
||||||
|
{
|
||||||
|
return totalRefundFee;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotalRefundFee(String totalRefundFee)
|
||||||
|
{
|
||||||
|
this.totalRefundFee = totalRefundFee;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTotalCouponFee()
|
||||||
|
{
|
||||||
|
return totalCouponFee;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotalCouponFee(String totalCouponFee)
|
||||||
|
{
|
||||||
|
this.totalCouponFee = totalCouponFee;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTotalPoundageFee()
|
||||||
|
{
|
||||||
|
return totalPoundageFee;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotalPoundageFee(String totalPoundageFee)
|
||||||
|
{
|
||||||
|
this.totalPoundageFee = totalPoundageFee;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -246,7 +246,7 @@ public interface WxPayService {
|
|||||||
* @param deviceInfo 设备号 device_info 非必传参数,终端设备号
|
* @param deviceInfo 设备号 device_info 非必传参数,终端设备号
|
||||||
* @return 保存到本地的临时文件
|
* @return 保存到本地的临时文件
|
||||||
*/
|
*/
|
||||||
File downloadBill(String billDate, String billType, String tarType, String deviceInfo) throws WxErrorException;
|
WxPayBillResult downloadBill(String billDate, String billType, String tarType, String deviceInfo) throws WxErrorException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <pre>
|
* <pre>
|
||||||
|
@ -299,7 +299,7 @@ public class WxPayServiceImpl implements WxPayService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public File downloadBill(String billDate, String billType, String tarType, String deviceInfo) throws WxErrorException {
|
public WxPayBillResult downloadBill(String billDate, String billType, String tarType, String deviceInfo) throws WxErrorException {
|
||||||
WxPayDownloadBillRequest request = new WxPayDownloadBillRequest();
|
WxPayDownloadBillRequest request = new WxPayDownloadBillRequest();
|
||||||
request.setBillType(billType);
|
request.setBillType(billType);
|
||||||
request.setBillDate(billDate);
|
request.setBillDate(billDate);
|
||||||
@ -311,11 +311,85 @@ public class WxPayServiceImpl implements WxPayService {
|
|||||||
String url = this.getPayBaseUrl() + "/pay/downloadbill";
|
String url = this.getPayBaseUrl() + "/pay/downloadbill";
|
||||||
//TODO 返回的内容可能是文件流,也有可能是xml,需要区分对待
|
//TODO 返回的内容可能是文件流,也有可能是xml,需要区分对待
|
||||||
String responseContent = this.post(url, request.toXML());
|
String responseContent = this.post(url, request.toXML());
|
||||||
|
if (responseContent.startsWith("<")){
|
||||||
WxPayCommonResult result = WxPayBaseResult.fromXML(responseContent, WxPayCommonResult.class);
|
WxPayCommonResult result = WxPayBaseResult.fromXML(responseContent, WxPayCommonResult.class);
|
||||||
result.checkResult(this);
|
result.checkResult(this);
|
||||||
//TODO 待实现,暂时无测试帐号,无法调试
|
|
||||||
return null;
|
return null;
|
||||||
|
}else{
|
||||||
|
WxPayBillResult wxPayBillResult = billInformationDeal(responseContent);
|
||||||
|
return wxPayBillResult;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private WxPayBillResult billInformationDeal(String responseContent){
|
||||||
|
WxPayBillResult wxPayBillResult = new WxPayBillResult();
|
||||||
|
|
||||||
|
String listStr = "";
|
||||||
|
String objStr = "";
|
||||||
|
if (responseContent.indexOf("总交易单数") >= 0){
|
||||||
|
listStr = responseContent.substring(0, responseContent.indexOf("总交易单数"));
|
||||||
|
objStr = responseContent.substring(responseContent.indexOf("总交易单数"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 交易时间:2017-04-06 01:00:02 公众账号ID: 商户号: 子商户号:0 设备号:WEB 微信订单号: 商户订单号:2017040519091071873216 用户标识: 交易类型:NATIVE
|
||||||
|
* 交易状态:REFUND 付款银行:CFT 货币种类:CNY 总金额:0.00 企业红包金额:0.00 微信退款单号: 商户退款单号:20170406010000933 退款金额:0.01 企业红包退款金额:0.00
|
||||||
|
* 退款类型:ORIGINAL 退款状态:SUCCESS 商品名称: 商户数据包: 手续费:0.00000 费率 :0.60%
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 参考以上格式进行取值
|
||||||
|
|
||||||
|
List<WxPayBillBaseResult> wxPayBillBaseResultLst = new LinkedList<WxPayBillBaseResult>();
|
||||||
|
String newStr = listStr.replaceAll(",", " "); // 去空格
|
||||||
|
String[] tempStr = newStr.split("`"); // 数据分组
|
||||||
|
String[] t = tempStr[0].split(" ");// 分组标题
|
||||||
|
int j = tempStr.length / t.length; // 计算循环次数
|
||||||
|
int k = 1; // 纪录数组下标
|
||||||
|
for (int i = 0; i < j; i++){
|
||||||
|
WxPayBillBaseResult wxPayBillBaseResult = new WxPayBillBaseResult();
|
||||||
|
|
||||||
|
wxPayBillBaseResult.setTradeTime(tempStr[k]);
|
||||||
|
wxPayBillBaseResult.setAppId(tempStr[k + 1]);
|
||||||
|
wxPayBillBaseResult.setMchId(tempStr[k + 2]);
|
||||||
|
wxPayBillBaseResult.setSubMchId(tempStr[k + 3]);
|
||||||
|
wxPayBillBaseResult.setDeviceInfo(tempStr[k + 4]);
|
||||||
|
wxPayBillBaseResult.setTransationId(tempStr[k + 5]);
|
||||||
|
wxPayBillBaseResult.setOutTradeNo(tempStr[k + 6]);
|
||||||
|
wxPayBillBaseResult.setOpenId(tempStr[k + 7]);
|
||||||
|
wxPayBillBaseResult.setTradeType(tempStr[k + 8]);
|
||||||
|
wxPayBillBaseResult.setTradeState(tempStr[k + 9]);
|
||||||
|
wxPayBillBaseResult.setBankType(tempStr[k + 10]);
|
||||||
|
wxPayBillBaseResult.setFeeType(tempStr[k + 11]);
|
||||||
|
wxPayBillBaseResult.setTotalFee(tempStr[k + 12]);
|
||||||
|
wxPayBillBaseResult.setCouponFee(tempStr[k + 13]);
|
||||||
|
wxPayBillBaseResult.setRefundId(tempStr[k + 14]);
|
||||||
|
wxPayBillBaseResult.setOutRefundNo(tempStr[k + 15]);
|
||||||
|
wxPayBillBaseResult.setSettlementRefundFee(tempStr[k + 16]);
|
||||||
|
wxPayBillBaseResult.setCouponRefundFee(tempStr[k + 17]);
|
||||||
|
wxPayBillBaseResult.setRefundChannel(tempStr[k + 18]);
|
||||||
|
wxPayBillBaseResult.setRefundState(tempStr[k + 19]);
|
||||||
|
wxPayBillBaseResult.setBody(tempStr[k + 20]);
|
||||||
|
wxPayBillBaseResult.setAttach(tempStr[k + 21]);
|
||||||
|
wxPayBillBaseResult.setPoundage(tempStr[k + 22]);
|
||||||
|
wxPayBillBaseResult.setPoundageRate(tempStr[k + 23]);
|
||||||
|
wxPayBillBaseResultLst.add(wxPayBillBaseResult);
|
||||||
|
k += t.length;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* 总交易单数,总交易额,总退款金额,总代金券或立减优惠退款金额,手续费总金额 `2,`0.02,`0.0,`0.0,`0
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 参考以上格式进行取值
|
||||||
|
|
||||||
|
String totalStr = objStr.replaceAll(",", " ");
|
||||||
|
String[] totalTempStr = totalStr.split("`");
|
||||||
|
wxPayBillResult.setTotalRecord(totalTempStr[1]);
|
||||||
|
wxPayBillResult.setTotalFee(totalTempStr[2]);
|
||||||
|
wxPayBillResult.setTotalRefundFee(totalTempStr[3]);
|
||||||
|
wxPayBillResult.setTotalCouponFee(totalTempStr[4]);
|
||||||
|
wxPayBillResult.setTotalPoundageFee(totalTempStr[5]);
|
||||||
|
|
||||||
|
return wxPayBillResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -49,8 +49,9 @@ public class WxPayServiceImplTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDownloadBill() throws Exception {
|
public void testDownloadBill() throws Exception {
|
||||||
File file = this.payService.downloadBill("20170101", "ALL", "GZIP", "1111111");
|
WxPayBillResult wxPayBillResult = this.payService.downloadBill("20170101", "ALL", "GZIP", "1111111");
|
||||||
assertNotNull(file);
|
//前一天没有账单记录返回null
|
||||||
|
assertNotNull(wxPayBillResult);
|
||||||
//必填字段为空时,抛出异常
|
//必填字段为空时,抛出异常
|
||||||
this.payService.downloadBill("", "", "", null);
|
this.payService.downloadBill("", "", "", null);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user