服務的基類
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