org.apache.commons.httpclient.HttpClient;解析xml

package org.lot.lotfilter.action.web.user;

import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.lot.lotfilter.action.web.LotFilterAction;
import org.lot.lotfilter.action.web.utils.MoNPlam;
import org.lot.lotfilter.common.Application;
import org.lot.lotfilter.common.core.ConfigureManager;
import org.lot.lotfilter.common.util.LotConfigConstants;
import org.lot.lotfilter.common.util.MD5;
import org.lot.lotfilter.entity.module.AllLotIssue;
import org.lot.lotfilter.entity.module.BetProject;
import org.lot.lotfilter.entity.module.ShopMaster;
import org.lot.lotfilter.entity.module.Userinfo;
import org.lot.lotfilter.service.issue.impl.AllLotIssueServiceImpl;
import org.lot.lotfilter.service.project.BetProjectService;
import org.lot.lotfilter.service.shop.impl.ShopMasterServiceImpl;
import org.lot.lotfilter.service.user.impl.UserinfoServiceImpl;
import org.xml.sax.InputSource;

@SuppressWarnings({ "rawtypes", "serial","unchecked" })
@Results({ @Result(name = "info", location = "user-send-result.jsp") })
public class SendTouZhuAction extends LotFilterAction {

    @Resource(name = "betProjectService")
    private BetProjectService betProjectService;

    public String touZhu() {

        BetProject betProject = this.getProject();
        if (betProject == null) {
            return "info";
        }
        this.buildXml(betProject);
        return "info";
    }

    public String searchResult() {
        BetProject betProject = this.getProject();
        if (betProject == null) {
            return "info";
        }
        MoNPlam monPlam = MoNPlam.getInStance();

        List<String> list = this.getParameters(betProject.getSponsorId());

        String body = "<queryticket id=\"" + betProject.getProjectId()
                + "\" gameid=\"" + betProject.getLotCode() + "\" issue=\""
                + betProject.getIssueId() + "\"/>";

        // 查看投注之前 修改投注处理状态250
        betProjectService.updateBetProject(betProject.getProjectId(),
                betProject.getSponsorId(), "250");

        message = monPlam.sendXml("105", list.get(0), body, list.get(1));

        String xml = message.substring(message.indexOf("&msg=") + 5,
                message.indexOf("</msg>") + 6);

        // 判断message
        String status = this.compile(xml);

        betProjectService.updateBetProject(betProject.getProjectId(),
                betProject.getSponsorId(), status);

        return "info";
    }

    private BetProject getProject() {
        super.initData();
        String projectid = request.getParameter("projectId");
        if ("".equals(projectid)) {
            message = "投注的方案id【" + projectid + "】不能为空";
            return null;
        }
        BetProject betProject = betProjectService.selectBetProject(Long
                .parseLong(projectid));
        if (betProject == null) {
            message = "没有对应的方案【ID=" + projectid + "】投注信息";
            return null;
        }
        return betProject;
    }

    private void buildXml(BetProject betProject) {
        String gameid = String.valueOf(betProject.getLotCode());
        String ticketsnum = String.valueOf(betProject.getTotalUnit());
        String id = String.valueOf(betProject.getProjectId());
        String multiple = String.valueOf(betProject.getMultiple());
        String issue = this.getIssueCode(betProject.getIssueId());// 这个是需要传递code,不是id
        String playtype = String.valueOf(betProject.getPlayId());
        String ggtype = String.valueOf(betProject.getGgCode());// 待添加
        String money = String.valueOf(betProject.getTotalAmount());
        String addflag = String.valueOf(this.isAdd(gameid,
                Integer.parseInt(playtype)));// 是否追加
        String noteCount = String.valueOf(betProject.getNote());// 投注注数
        String betway = String.valueOf("100");// 投注方式
        String ball = String.valueOf(betProject.getBetNumber());
        // String.valueOf(betProject.getSponsorId());//这个需要修改
        List<String> list = this.getParameters(betProject.getSponsorId());
        String partnerid = list.get(0);
        String body = "<ticketorder gameid=\"" + gameid + "\" ticketsnum=\""
                + ticketsnum + "\" province=\"\"><tickets>" + "<ticket id=\""
                + id + "\" multiple=\"" + multiple + "\" issue=\"" + issue
                + "\" " + "playtype=\"" + playtype + "\" ggtype=\"" + ggtype
                + "\" money=\"" + money + "\" addflag=\"" + addflag
                + "\" noteCount=\"" + noteCount + "\" " + "betway=\"" + betway
                + "\"><ball>" + ball + "</ball></ticket>"
                + "</tickets></ticketorder> ";

        String transcode = "104";// 直接调用投注接口
        String key = list.get(1);
        String header = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
                + "<msg><head transcode=\"" + transcode + "\" partnerid=\""
                + partnerid + "\" version=\"2.0\" time=\"20130808103728\"/>"
                + "<body>";
        String url = ConfigureManager.getProperties("lot.ticket.api.url");
        // 发送投注之前 修改投注处理状态100
        betProjectService.updateBetProject(Long.parseLong(id),
                betProject.getSponsorId(), "100");

        this.sendRequest(header, body, url, transcode, partnerid, key,
                Long.parseLong(id), betProject.getSponsorId());

    }

    private void sendRequest(String header, String body, String url,
            String transcode, String partnerid, String key, long projectid,
            long userid) {
        String msg = header + body + "</body></msg>";

        HttpClient httpclient = new HttpClient();
        HttpConnectionManagerParams httpParams = httpclient
                .getHttpConnectionManager().getParams();
        // 设置连接超时时间(单位毫秒)
        // httpParams.setConnectionTimeout(CONNECTION_TIME_OUT);
        // 设置读数据超时时间(单位毫秒)
        httpParams.setSoTimeout(40000);
        // post请求
        PostMethod postmethod = new PostMethod(url);
        postmethod.addRequestHeader("Connection", "Keep-Alive");
        postmethod.getParams().setContentCharset("utf-8");
        try {
            NameValuePair[] postData = new NameValuePair[5];
            postData[0] = new NameValuePair("partnerid", partnerid);
            postData[1] = new NameValuePair("transcode", transcode);
            postData[2] = new NameValuePair("version", "2.0");
            String pakey = MD5.encrypt(transcode + msg + key).toUpperCase();
            postData[3] = new NameValuePair("key", pakey);
            postData[4] = new NameValuePair("msg", msg);
            postmethod.addParameters(postData);

            String data = "transcode=" + transcode + "&msg=" + msg + "&key="
                    + pakey + "&partnerid=" + partnerid;
            System.out.println("发送数据::" + data);
            int sendStatus = 0;
            sendStatus = httpclient.executeMethod(postmethod);
            if (sendStatus != HttpStatus.SC_OK) {
                // throw new
                // Exception("HttpClient.executeMethod response statusCode not correct!");
            }
            // 发送投注之后 修改投注处理状态200
            betProjectService.updateBetProject(projectid, userid, "200");
            System.out.println("接收数据:" + postmethod.getResponseBodyAsString());
            message = postmethod.getResponseBodyAsString();
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放
            postmethod.releaseConnection();
        }
    }

    // 获取用户 和 用户私钥
    private List<String> getParameters(Long userId) {
        List<String> list = new ArrayList<String>();
        UserinfoServiceImpl userServ = (UserinfoServiceImpl) Application.get()
                .getContext().getBean("userinfoService");
        Userinfo userinfo = userServ.getUser(userId);
        if (userinfo != null) {
            list.add(userinfo.getUserName());
            ShopMasterServiceImpl shopMasterServ = (ShopMasterServiceImpl) Application
                    .get().getContext().getBean("shopMasterService");
            ShopMaster shopmaster = shopMasterServ.getShopMaster(userinfo
                    .getShopMasterId());
            list.add(shopmaster.getPrikey());
        }
        return list;
    }

    // 判断是否追加
    private String isAdd(String gameid, int playid) {
        if (LotConfigConstants.DLT_PLAY_ADD == playid
                || LotConfigConstants.DLT_PLAY_DANTUO_ADD == playid) {
            return "1";
        } else {
            return "0";
        }
    }

    private String getIssueCode(long issueid) {
        AllLotIssueServiceImpl issueServ = (AllLotIssueServiceImpl) Application
                .get().getContext().getBean("allLotIssueService");
        AllLotIssue alllotIssue = issueServ.getIssueId(issueid);
        if (alllotIssue != null) {
            return alllotIssue.getIssueCode();
        }
        return String.valueOf(issueid);
    }

    private String compile(String xmlStr) {
        try {
            // 创建一个新的字符串
            StringReader read = new StringReader(xmlStr);
            // 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
            InputSource source = new InputSource(read);
            // 创建一个新的SAXBuilder
            SAXBuilder sb = new SAXBuilder(false);
            // 通过输入源构造一个Document
            Document doc = sb.build(source);

            Element root = doc.getRootElement();
            Element body = root.getChild("body");
            Element result = body.getChild("ticketresult");
            String code = result.getAttributeValue("statuscode");
            if (code.equals("9015") || code.equals("0003")) {
                return "-100"; // 订单不存在或者交易失败
            } else if (code.equals("0002")) {
                return "300"; // 交易成功
            } else if (code.equals("0005")) {
                return "250"; // 部分成功
            } else if (code.equals("0000")) {
                return "250"; // 交易中
            }
        } catch (JDOMException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return "0";
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值