本帖最后由 ron_xin 于 2014-11-07 10:00:52 编辑

解决方案 »

  1.   

    错误信息显示
    https://202.82.66.148:8443/ptms4541/ws/CksServices 是非法的
    期望是 http://ws.service.gen.cks.com/
    将 uri 改为 http://ws.service.gen.cks.com/ 后
    会有 err_code00005 错,不是很清楚纠正几处数据格式错误:
    pwd           登录密码          是                    String MD5(account+MD5(pwd)+ timestamp) 需要大写
    你写作 $pwd2 =strtoupper(MD5($account+MD5($pwd)+ $timestamp));
    正确的写法是 $pwd2 =strtoupper(MD5($account . MD5($pwd) . $timestamp));timestamp 时间戳   是                     string yyyyMMddHHmm
    你写作 $timestamp =date('yyyyMMddHHmm',time());
    正确的写法是 $timestamp =date('YmdHm', time());当给 getAirLine 方法加上参数,会有
    Unmarshalling Error: 意外的元素 (uri:"", local:"param0")。所需元素为(none) SoapFault Object
    显然已能进入了能力有限,只能分析到这里了
      

  2.   

    异常代码对照
    err_code00001=用戶為空
    err_code00002=密碼不匹配
    err_code00003=系統中無此用戶
    err_code00004=密碼為空
    err_code00005=用戶驗證失敗
    err_code00006=worksite不能為空
    err_code00007=IP驗證失敗
    err_code00008=discount不適用于此worksite
    err_code00009=此worksite不包含任何discounterr_code01001=可用航線信息為空
    err_code01002=獲取可用航線信息失敗
    err_code01003=worksite傳遞錯誤err_code01011=當天未有該類型航班票務信息
    err_code01012=當天未有該類型航班票務去程信息
    err_code01013=當天未有該類型航班票務回程信息
    err_code01014=filterXml參數為空
    err_code01015=SAILDATE未填寫
    err_code01016=FROMPORTCODE未填寫
    err_code01017=TOPORTCODE未填寫
    err_code01019=discount_id傳遞錯誤
    err_code01020=ISROUNDTRIP未填寫
    err_code01021=LANG未填寫
    err_code01022=filterXml格式錯誤
    err_code01023=filterXml资料无法获取航班票务信息
    err_code01024=獲取航班票務信息失敗err_code01051=ticketsInfoXML參數為空
    err_code01052=ticketsInfoXML格式錯誤
    err_code01053=購票訂單提交失敗
    err_code01055=機場線和市區線不能在同在訂單下購票
    err_code01056=金珠線和珠江線不能在同在訂單下購票
    err_code01057=機場線不允許應用ETicket售票
    err_code01058=非會員,不符合ETicket售票
    err_code01059=超過會員限額,不符合ETicket售票
    err_code01060=乘客已購票,不符合ETicket售票
    err_code01061=按金不足
    err_code01063=不存在此臨時用戶
    err_code01064=獲取臨時用戶失敗
    err_code01065=鎖位失敗
    err_code01066=餘票不足,無法提交訂單
    err_code01067=無法鎖位
    err_code01068=獲取交易號失敗
    err_code01069=獲取票價記錄失敗
    err_code01070=鎖位數與傳入記錄數不符
    err_code01071=獲取港口公司失敗err_code01091=confirmXML參數為空
    err_code01092=confirmXML格式錯誤err_code01201=EMAIL未填寫
    err_code01202=REFNO未填寫
    err_code01203=ISETICKET未填寫
    err_code01204=ADDRESS未填寫
    err_code01205=SEATRANK_ID未填寫
    err_code01206=PRICE未填寫
    err_code01207=DETAILID未填寫
    err_code01208=VOYAGEROUTEID未填寫
    err_code01209=CLIENTTYPE未填寫
    err_code01210=PASSENGER未填寫
    err_code01211=PASSENGERID未填寫
    err_code01212=PAYMENT未填寫err_code01231=TRANSACTION_ID未填寫
    err_code01251=TRANSACTION_ID對應的臨時售票記錄不存在
    err_code01252=確認訂單失敗
    err_code01253=訂單確認成功,但返回XML失敗
    err_code02000=交易号不存在
    err_code02001=验证码不存在
    err_code02002=无效的日期
    err_code02003=闸口不能为空err_code03001= ticketXml參數為空
    err_code03002= 输入的Xml參數為空err_code99999=其它异常
      

  3.   

    IcksServices.javapackage com.cks.gen.service.ws;import java.util.List;import javax.jws.WebParam;
    import javax.jws.WebResult;
    import javax.jws.WebService;import org.apache.cxf.feature.Features;
    import org.apache.cxf.interceptor.Fault;@WebService
    @Features(features = "org.apache.cxf.feature.LoggingFeature")
    public interface IcksServices {


    /**
     * 測試驗證信息
     * @throws Exception 
     */
    public void testAuthentication() throws Exception;

    /**
     * 获取可用航线信息
     * @return
     */
    public String getShippingLine() throws Exception;

    /**
     * 获取可用航班票务信息
     * @param filterXml
     * @return
     */
    public String getVoyage(@WebParam(name="filterXml")String filterXml) throws Exception;

    /**
     * 提交购票信息
     * @param ticketsInfoXML
     * @return
     */
    public String submitBooking(@WebParam(name="ticketsInfoXML")String ticketsInfoXML) throws Exception;

    /**
     * 确认订单信息
     * @param confirmXML
     * @return
     */
    public String confirmBooking(@WebParam(name="confirmXML")String confirmXML) throws Exception;
    }
      

  4.   

    LocaleInterceptor.java
    package com.cks.gen.service.ws.interceptor;
    import java.util.List;
    import java.util.Locale;import javax.annotation.Resource;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import javax.xml.namespace.QName;
    import javax.xml.soap.SOAPException;
    import javax.xml.ws.WebServiceContext;import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.apache.cxf.binding.soap.SoapHeader;
    import org.apache.cxf.binding.soap.SoapMessage;
    import org.apache.cxf.headers.Header;
    import org.apache.cxf.helpers.DOMUtils;
    import org.apache.cxf.interceptor.Fault;
    import org.apache.cxf.logging.FaultListener;
    import org.apache.cxf.message.Message;
    import org.apache.cxf.phase.AbstractPhaseInterceptor;
    import org.apache.cxf.phase.Phase;
    import org.apache.cxf.transport.http.AbstractHTTPDestination;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;import com.cks.gen.service.ws.WsConst;
    import com.cks.ums.service.LoginService;
    import com.cks.util.security.encrypt.MD5;
    import com.cks.util.web.WebUtils;public class LocaleInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
    private static final Log log = LogFactory.getLog(LocaleInterceptor.class);

    // private static String nameURI="https://localhost:8443/PTMSinterface/ws/CksServices"; 
    private static String nameURI=""; 
    private static String spName="";
    private static String spPassword="";
    private static String times="";
    private static String site="";
    private static String opt="";
    public LocaleInterceptor(String nameURI,String spName,String spPassword,String times,String site,String opt) {
    // super(Phase.PRE_INVOKE);
    // System.out.println("handleMessage");

    super(Phase.WRITE);
    this.nameURI=nameURI;
    this.spName=spName;
    this.spPassword=spPassword;
    this.times=times;
    this.site=site;
    this.opt=opt;
    }


    @Override
    public void handleMessage(SoapMessage message) throws Fault {

    // String spName="BillZou";  
    // String spPassword="elm";  
    // String times="201401200800";
    // String site="1112";
    // String opt="";

    MD5 m = new MD5();
    String pwa = m.getMD5ofStr(spPassword).toUpperCase();

    String pwdau = m.getMD5ofStr(spName+pwa+times).toUpperCase(); QName qname=new QName("RequestSOAPHeader");   Document doc=DOMUtils.createDocument();   //自定义节点 Element account=doc.createElement("tns:account");   account.setTextContent(spName);   //自定义节点 Element pwd=doc.createElement("tns:pwd");   pwd.setTextContent(pwdau);   Element timestamp=doc.createElement("tns:timestamp");   timestamp.setTextContent(times);   Element worksite=doc.createElement("tns:worksite");   worksite.setTextContent(site);   Element discount_id=doc.createElement("tns:discount_id");   discount_id.setTextContent(opt);   Element root=doc.createElementNS(nameURI, "tns:RequestSOAPHeader");   root.appendChild(account);   root.appendChild(pwd);  
    root.appendChild(timestamp);  
    root.appendChild(worksite);  
    root.appendChild(discount_id);   SoapHeader head=new SoapHeader(qname,root);   List<Header> headers=message.getHeaders();   headers.add(head);   System.out.println(">>>>>添加header<<<<<<<");
    // HttpServletRequest request = (HttpServletRequest) message.get(AbstractHTTPDestination.HTTP_REQUEST);
    // HttpSession session = request.getSession();
    // try
    // {
    // if(session.getAttribute(WsConst.CUR_LOCALE) == null)
    // {
    // QName  qname = new QName(WsConst.NAME_SPACE,WsConst.AUTH_HEADER,WsConst.AUTH_PREFIX);
    // SoapHeader header = (SoapHeader)message.getHeader(qname);
    // Element element = (Element)header.getObject();
    //
    // NodeList list = element.getElementsByTagNameNS(WsConst.NAME_SPACE, WsConst.TAG_LANGUAGE);
    // Node node = list.item(0);
    // String language = node.getFirstChild().getTextContent();
    //
    // list = element.getElementsByTagNameNS(WsConst.NAME_SPACE, WsConst.TAG_COUNTRY);
    // node = list.item(0);
    // String country = node.getFirstChild().getTextContent();
    //
    // if(country == null || "".equals(country))
    // {
    // Locale locale = new Locale(language);
    // session.setAttribute(WsConst.CUR_LOCALE, locale);
    // }
    // else
    // {
    // Locale locale = new Locale(language,country);
    // session.setAttribute(WsConst.CUR_LOCALE, locale);
    // }
    // }
    // }
    // catch(Exception e)
    // {
    // log.warn(e.getMessage(), e);
    // session.setAttribute(WsConst.CUR_LOCALE, request.getLocale());
    // }

    }



    @Override
    public void handleFault(SoapMessage message) {
    // TODO Auto-generated method stub
    super.handleFault(message);
    }


    public static void main(String[] args)
    {

    }
    }