服务的基类
public class BaseService{
//API的地址
private String apiURL;
//发请求的HTTPS请求器
private IServiceRequest serviceRequest;
public BaseService(String api) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
apiURL = api;
Class c = Class.forName(Configure.HttpsRequestClassName);
serviceRequest = (IServiceRequest) c.newInstance();
}
protected String sendPost(Object xmlObj) throws UnrecoverableKeyException, IOException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
return serviceRequest.sendPost(apiURL,xmlObj);
}
/**
* 供商户想自定义自己的HTTP请求器用
* @param request 实现了IserviceRequest接口的HttpsRequest
*/
public void setServiceRequest(IServiceRequest request){
serviceRequest = request;
}
}
查询服务
public class ScanPayQueryService extends BaseService{
public ScanPayQueryService() throws IllegalAccessException, InstantiationException, ClassNotFoundException {
super(Configure.PAY_QUERY_API);
}
/**
* 请求支付查询服务
* @param scanPayQueryReqData 这个数据对象里面包含了API要求提交的各种数据字段
* @return API返回的XML数据
* @throws Exception
*/
public String request(ScanPayQueryReqData scanPayQueryReqData) throws Exception {
//--------------------------------------------------------------------
//发送HTTPS的Post请求到API地址
//--------------------------------------------------------------------
String responseString = sendPost(scanPayQueryReqData);
return responseString;
}
}
订单数据下载服务
public class DownloadBillService extends BaseService{
public DownloadBillService() throws IllegalAccessException, InstantiationException, ClassNotFoundException {
super(Configure.DOWNLOAD_BILL_API);
}
//ALL,返回当日所有订单信息,默认值
public static final String BILL_TYPE_ALL = "ALL";
//SUCCESS,返回当日成功支付的订单
public static final String BILL_TYPE_SUCCESS = "SUCCESS";
//REFUND,返回当日退款订单
public static final String BILL_TYPE_REFUND = "REFUND";
//REVOKED,已撤销的订单
public static final String BILL_TYPE_REVOKE = "REVOKE";
/**
* 请求对账单下载服务
* @param downloadBillReqData 这个数据对象里面包含了API要求提交的各种数据字段
* @return API返回的XML数据
* @throws Exception
*/
public String request(DownloadBillReqData downloadBillReqData) throws Exception {
//--------------------------------------------------------------------
//发送HTTPS的Post请求到API地址
//--------------------------------------------------------------------
String responseString = sendPost(downloadBillReqData);
return responseString;
}
}
package com.tencent;
import com.tencent.business.DownloadBillBusiness;
import com.tencent.business.RefundBusiness;
import com.tencent.business.RefundQueryBusiness;
import com.tencent.business.ScanPayBusiness;
import com.tencent.common.Configure;
import com.tencent.protocol.downloadbill_protocol.DownloadBillReqData;
import com.tencent.protocol.pay_protocol.ScanPayReqData;
import com.tencent.protocol.pay_query_protocol.ScanPayQueryReqData;
import com.tencent.protocol.refund_protocol.RefundReqData;
import com.tencent.protocol.refund_query_protocol.RefundQueryReqData;
import com.tencent.protocol.reverse_protocol.ReverseReqData;
import com.tencent.service.*;/**
* SDK总入口 微信支付的总入口
*/
public class WXPay {
/**
* 初始化SDK依赖的几个关键配置
* @param key 签名算法需要用到的秘钥
* @param appID 公众账号ID
* @param mchID 商户ID
* @param sdbMchID 子商户ID,受理模式必填
* @param certLocalPath HTTP证书在服务器中的路径,用来加载证书用
* @param certPassword HTTP证书的密码,默认等于MCHID
*/
public static void initSDKConfiguration(String key,String appID,String mchID,String sdbMchID,String certLocalPath,String certPassword){
Configure.setKey(key);
Configure.setAppID(appID);
Configure.setMchID(mchID);
Configure.setSubMchID(sdbMchID);
Configure.setCertLocalPath(certLocalPath);
Configure.setCertPassword(certPassword);
}
/**
* 请求支付服务
* @param scanPayReqData 这个数据对象里面包含了API要求提交的各种数据字段
* @return API返回的数据
* @throws Exception
*/
public static String requestScanPayService(ScanPayReqData scanPayReqData) throws Exception{
return new ScanPayService().request(scanPayReqData);
}
/**
* 请求支付查询服务
* @param scanPayQueryReqData 这个数据对象里面包含了API要求提交的各种数据字段
* @return API返回的XML数据
* @throws Exception
*/
public static String requestScanPayQueryService(ScanPayQueryReqData scanPayQueryReqData) throws Exception{
return new ScanPayQueryService().request(scanPayQueryReqData);
}
/**
* 请求退款服务
* @param refundReqData 这个数据对象里面包含了API要求提交的各种数据字段
* @return API返回的XML数据
* @throws Exception
*/
public static String requestRefundService(RefundReqData refundReqData) throws Exception{
return new RefundService().request(refundReqData);
}
/**
* 请求退款查询服务
* @param refundQueryReqData 这个数据对象里面包含了API要求提交的各种数据字段
* @return API返回的XML数据
* @throws Exception
*/
public static String requestRefundQueryService(RefundQueryReqData refundQueryReqData) throws Exception{
return new RefundQueryService().request(refundQueryReqData);
}
/**
* 请求撤销服务
* @param reverseReqData 这个数据对象里面包含了API要求提交的各种数据字段
* @return API返回的XML数据
* @throws Exception
*/
public static String requestReverseService(ReverseReqData reverseReqData) throws Exception{
return new ReverseService().request(reverseReqData);
}
/**
* 请求对账单下载服务
* @param downloadBillReqData 这个数据对象里面包含了API要求提交的各种数据字段
* @return API返回的XML数据
* @throws Exception
*/
public static String requestDownloadBillService(DownloadBillReqData downloadBillReqData) throws Exception{
return new DownloadBillService().request(downloadBillReqData);
}
/**
* 直接执行被扫支付业务逻辑(包含最佳实践流程)
* @param scanPayReqData 这个数据对象里面包含了API要求提交的各种数据字段
* @param resultListener 商户需要自己监听被扫支付业务逻辑可能触发的各种分支事件,并做好合理的响应处理
* @throws Exception
*/
public static void doScanPayBusiness(ScanPayReqData scanPayReqData, ScanPayBusiness.ResultListener resultListener) throws Exception {
new ScanPayBusiness().run(scanPayReqData, resultListener);
}
/**
* 调用退款业务逻辑
* @param refundReqData 这个数据对象里面包含了API要求提交的各种数据字段
* @param resultListener 业务逻辑可能走到的结果分支,需要商户处理
* @throws Exception
*/
public static void doRefundBusiness(RefundReqData refundReqData, RefundBusiness.ResultListener resultListener) throws Exception {
new RefundBusiness().run(refundReqData,resultListener);
}
/**
* 运行退款查询的业务逻辑
* @param refundQueryReqData 这个数据对象里面包含了API要求提交的各种数据字段
* @param resultListener 商户需要自己监听被扫支付业务逻辑可能触发的各种分支事件,并做好合理的响应处理
* @throws Exception
*/
public static void doRefundQueryBusiness(RefundQueryReqData refundQueryReqData,RefundQueryBusiness.ResultListener resultListener) throws Exception {
new RefundQueryBusiness().run(refundQueryReqData,resultListener);
}
/**
* 请求对账单下载服务
* @param downloadBillReqData 这个数据对象里面包含了API要求提交的各种数据字段
* @param resultListener 商户需要自己监听被扫支付业务逻辑可能触发的各种分支事件,并做好合理的响应处理
* @return API返回的XML数据
* @throws Exception
*/
public static void doDownloadBillBusiness(DownloadBillReqData downloadBillReqData,DownloadBillBusiness.ResultListener resultListener) throws Exception {
new DownloadBillBusiness().run(downloadBillReqData,resultListener);
}
}
微信u的订单查询功能
ScanPayQueryReqData scanPayQueryReqData = new ScanPayQueryReqData(“400204200120170503996345”, null);
String result = WXPay.requestScanPayQueryService(scanPayQueryReqData);
ScanPayQueryResData scanPayQueryResData = (ScanPayQueryResData) Util.getObjectFromXML(result, ScanPayQueryResData.class);
System.out.println(scanPayQueryResData.getOut_trade_no());
System.out.println(scanPayQueryResData.getTotal_fee());
微信支付成功的账单下载并保存到数据库
DownloadBillReqData downloadBillReqData = new DownloadBillReqData(null, “20170403”, “SUCCESS”);
String parseContent = WXPay.requestDownloadBillService(downloadBillReqData);
String[] split = parseContent.split(“\n”);
List batchSql = new ArrayList();
StringBuffer sb = new StringBuffer();
for(int i=1;i