现在微信支付也有一定的用户量所以现在为大家提供一个微信支付的对账文档和方法
对账逻辑这个因公司的需求不一样而不同,所以这里我们只介绍微信对账的接口调用和返回数据
1:微信对账接口分析
微信支付实际上是调用财付通的支付接口进行支付的
首先你要的知道你的商户号和秘钥
对账接口查询的只能查询昨天和昨天以前的订单信息 并且如果想下载昨天订单要在今天的7点之后进行
java代码如下:
public List<WechatBean> getWechatBeanList(String time) {
try{
List<WechatBean> list = new ArrayList<WechatBean>();
//创建分账请求对象
DownloadBillRequestHandler reqHandler = new DownloadBillRequestHandler(null, null);
//通信对象
TenpayHttpClient httpClient = new TenpayHttpClient();
//-----------------------------
//设置请求参数
//-----------------------------
reqHandler.init();
reqHandler.setKey(key);
reqHandler.setGateUrl("http://mch.tenpay.com/cgi-bin/mchdown_real_new.cgi");
//-----------------------------
//设置接口参数
//-----------------------------
String timestamp = Long.toString(System.currentTimeMillis()/1000);
reqHandler.setParameter("spid", bargainor_id);
reqHandler.setParameter("trans_time", time);
reqHandler.setParameter("stamp", timestamp);
reqHandler.setParameter("cft_signtype", "0");
reqHandler.setParameter("mchtype", "1");
//设置请求内容
httpClient.setReqContent(reqHandler.getRequestURL());
System.out.println(reqHandler.getRequestURL());
// out.println(reqHandler.getRequestURL());
//设置发送类型 GET
httpClient.setMethod("POST");
//后台调用
if(httpClient.call()) {
String resContent = httpClient.getResContent();
System.out.println("-------------------------");
System.out.println(resContent);
System.out.println("-------------------------");
logger.info("[流水#"+loggerTrace+"][获取微信支付对账信息#成功][数据#"+JsonUtil.convertObject2Json(resContent)+"]");
String [] resContentStr = resContent.split("\\r?\\n");
if(resContentStr[0].equals("<html>")){
logger.info("[流水#"+loggerTrace+"][当天没有微信支付记录]");
return null;
}
for(int i = 1 ;i<resContentStr.length;i++ ){
if(i>= resContentStr.length - 3){
break;
}
if(!resContentStr[i].equals("")){
String [] values = resContentStr[i].split(",");
WechatBean bean = new WechatBean();
bean.setPaySuccrssDate(values[0]);
bean.setCaiFuTongTraceNo(values[1]);
bean.setPayTraceNo(values[2].substring(2, values[2].length()));
bean.setPayType(values[3]);
bean.setBankTraceNo(values[4]);
double amount = Double.valueOf(values[5]);
int finalAmount = (int)amount*100;
bean.setAmount(finalAmount);
bean.setStatus(values[6]);
bean.setMome(values[7]);
list.add(bean);
}
}
return list;
} else {
logger.info("[流水#"+loggerTrace+"][微信支付对账#后台调用通信失败[数据#"+JsonUtil.convertObject2Json(httpClient.getResponseCode()+httpClient.getErrInfo())+"]");
System.out.println("后台调用通信失败");
System.out.println(httpClient.getResponseCode());
System.out.println(httpClient.getErrInfo());
//有可能因为网络原因,请求已经处理,但未收到应答。
return null;
}
}catch(Exception e){
e.printStackTrace();
logger.info("[流水#"+loggerTrace+"][微信支付对账#异常】[数据#"+JsonUtil.convertObject2Json(e)+"]");
return null;
}
}
随带也说一下支付宝对账接口吧
支付宝对账接口中返回给你的是分页的信息
根据查询的页码和一页大小给你返回信息
/*
*获取支付宝分页对账返回xml
*/
public static String getAilpayQueryPageLog(Object[]values,String pageNo){
Map<String, String> sParaTemp = new HashMap<String, String>();
sParaTemp.put("service", "account.page.query"