123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- package com.tencent.business;
- import com.tencent.common.Configure;
- import com.tencent.common.Log;
- import com.tencent.common.Util;
- import com.tencent.common.report.ReporterFactory;
- import com.tencent.common.report.protocol.ReportReqData;
- import com.tencent.common.report.service.ReportService;
- import com.tencent.protocol.downloadbill_protocol.DownloadBillReqData;
- import com.tencent.protocol.downloadbill_protocol.DownloadBillResData;
- import com.tencent.service.DownloadBillService;
- import com.thoughtworks.xstream.io.StreamException;
- import org.slf4j.LoggerFactory;
- /**
- * User: rizenguo
- * Date: 2014/12/3
- * Time: 10:45
- */
- public class DownloadBillBusiness {
- public DownloadBillBusiness() throws IllegalAccessException, ClassNotFoundException, InstantiationException {
- downloadBillService = new DownloadBillService();
- }
- public interface ResultListener{
- //API返回ReturnCode不合法,支付请求逻辑错误,请仔细检测传过去的每一个参数是否合法,或是看API能否被正常访问
- void onFailByReturnCodeError(DownloadBillResData downloadBillResData);
- //API返回ReturnCode为FAIL,支付API系统返回失败,请检测Post给API的数据是否规范合法
- void onFailByReturnCodeFail(DownloadBillResData downloadBillResData);
- //下载对账单失败
- void onDownloadBillFail(String response);
- //下载对账单成功
- void onDownloadBillSuccess(String response);
- }
- //打log用
- private static Log log = new Log(LoggerFactory.getLogger(DownloadBillBusiness.class));
- //执行结果
- private static String result = "";
- private DownloadBillService downloadBillService;
- /**
- * 请求对账单下载服务
- * @param downloadBillReqData 这个数据对象里面包含了API要求提交的各种数据字段
- * @param resultListener 商户需要自己监听被扫支付业务逻辑可能触发的各种分支事件,并做好合理的响应处理
- * @return API返回的XML数据
- * @throws Exception
- */
- public void run(DownloadBillReqData downloadBillReqData,ResultListener resultListener) throws Exception {
- //--------------------------------------------------------------------
- //构造请求“对账单API”所需要提交的数据
- //--------------------------------------------------------------------
- //API返回的数据
- String downloadBillServiceResponseString;
- long costTimeStart = System.currentTimeMillis();
- //支持加载本地测试数据进行调试
- log.i("对账单API返回的数据如下:");
- downloadBillServiceResponseString = downloadBillService.request(downloadBillReqData);
- long costTimeEnd = System.currentTimeMillis();
- long totalTimeCost = costTimeEnd - costTimeStart;
- log.i("api请求总耗时:" + totalTimeCost + "ms");
- log.i(downloadBillServiceResponseString);
- DownloadBillResData downloadBillResData;
- String returnCode = "";
- String returnMsg = "";
- try {
- //注意,这里失败的时候是返回xml数据,成功的时候反而返回非xml数据
- downloadBillResData = (DownloadBillResData) Util.getObjectFromXML(downloadBillServiceResponseString, DownloadBillResData.class);
- if (downloadBillResData == null || downloadBillResData.getReturn_code() == null) {
- setResult("Case1:对账单API请求逻辑错误,请仔细检测传过去的每一个参数是否合法,或是看API能否被正常访问",Log.LOG_TYPE_ERROR);
- resultListener.onFailByReturnCodeError(downloadBillResData);
- return;
- }
- if (downloadBillResData.getReturn_code().equals("FAIL")) {
- ///注意:一般这里返回FAIL是出现系统级参数错误,请检测Post给API的数据是否规范合法
- setResult("Case2:对账单API系统返回失败,请检测Post给API的数据是否规范合法",Log.LOG_TYPE_ERROR);
- resultListener.onFailByReturnCodeFail(downloadBillResData);
- returnCode = "FAIL";
- returnMsg = downloadBillResData.getReturn_msg();
- }
- } catch (StreamException e) {
- //注意,这里成功的时候是直接返回纯文本的对账单文本数据,非XML格式
- if (downloadBillServiceResponseString.equals(null) || downloadBillServiceResponseString.equals("")) {
- setResult("Case4:对账单API系统返回数据为空",Log.LOG_TYPE_ERROR);
- resultListener.onDownloadBillFail(downloadBillServiceResponseString);
- } else {
- setResult("Case3:对账单API系统成功返回数据",Log.LOG_TYPE_INFO);
- resultListener.onDownloadBillSuccess(downloadBillServiceResponseString);
- }
- returnCode = "SUCCESS";
- } finally {
- ReportReqData reportReqData = new ReportReqData(
- downloadBillReqData.getDevice_info(),
- Configure.DOWNLOAD_BILL_API,
- (int) (totalTimeCost),//本次请求耗时
- returnCode,
- returnMsg,
- "",
- "",
- "",
- "",
- Configure.getIP()
- );
- long timeAfterReport;
- if(Configure.isUseThreadToDoReport()){
- ReporterFactory.getReporter(reportReqData).run();
- timeAfterReport = System.currentTimeMillis();
- Util.log("pay+report总耗时(异步方式上报):"+(timeAfterReport-costTimeStart) + "ms");
- }else{
- ReportService.request(reportReqData);
- timeAfterReport = System.currentTimeMillis();
- Util.log("pay+report总耗时(同步方式上报):"+(timeAfterReport-costTimeStart) + "ms");
- }
- }
- }
- public void setDownloadBillService(DownloadBillService service) {
- downloadBillService = service;
- }
- public String getResult() {
- return result;
- }
- public void setResult(String result) {
- DownloadBillBusiness.result = result;
- }
- public void setResult(String result,String type){
- setResult(result);
- log.log(type,result);
- }
- }
|