java 微信支付功能

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章