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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值