Coldfusion How to authenticate webservice getShipmentSimpleQuote of WWEx?

五迷三道 提交于 2019-12-14 00:43:03

问题



How to invoke "getShipmentSimpleQuote" webservice from "Worldwide Express Freight Quote Web Service"? I am trying to invoke/consume this webservice but i am getting error saying "Invalid authentication info".here is wsdl file data-

WWEXFreightQuoteService.wsdl

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://www.wwexship.com" xmlns:impl="http://www.wwexship.com" xmlns:intf="http://www.wwexship.com" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<!--WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)-->
 <wsdl:types>
  <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.wwexship.com" elementFormDefault="qualified">
   <complexType name="AuthenticationToken">
    <sequence>
     <element name="loginId" nillable="true" type="xsd:string"/>
     <element name="password" nillable="true" type="xsd:string"/>
     <element name="licenseKey" nillable="true" type="xsd:string"/>
     <element name="accountNumber" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
   <element name="AuthenticationToken" type="impl:AuthenticationToken" maxOccurs="1"/>   
   <complexType name="QuoteLineItem">
    <sequence>
     <element name="nmfcClass" nillable="true" type="xsd:string"/>
     <element name="weight" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
   <complexType name="ArrayOfQuoteLineItem">
    <sequence>
     <element name="lineItem" nillable="true" type="impl:QuoteLineItem" maxOccurs="unbounded"/>
    </sequence>
   </complexType>
   <complexType name="FreightShipmentQuoteRequest">
    <sequence>
     <element name="senderCity" nillable="true" type="xsd:string"/>
     <element name="senderState" nillable="true" type="xsd:string"/>
     <element name="senderZip" nillable="true" type="xsd:string"/>
     <element name="receiverCity" nillable="true" type="xsd:string"/>
     <element name="receiverState" nillable="true" type="xsd:string"/>
     <element name="receiverZip" nillable="true" type="xsd:string"/>
     <element name="lineItems" nillable="true" type="impl:ArrayOfQuoteLineItem"/>
     <element name="hazmatShipment" nillable="true" type="xsd:string"/>
     <element name="insidePickup" nillable="true" type="xsd:string"/>
     <element name="liftgatePickup" nillable="true" type="xsd:string"/>
     <element name="residentialPickup" nillable="true" type="xsd:string"/>
     <element name="tradeshowPickup" nillable="true" type="xsd:string"/>
     <element name="constructionSitePickup" nillable="true" type="xsd:string"/>
     <element name="insideDelivery" nillable="true" type="xsd:string"/>
     <element name="liftgateDelivery" nillable="true" type="xsd:string"/>
     <element name="residentialDelivery" nillable="true" type="xsd:string"/>
     <element name="tradeshowDelivery" nillable="true" type="xsd:string"/>
     <element name="constructionSiteDelivery" nillable="true" type="xsd:string"/>
     <element name="notifyBeforeDelivery" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
   <element name="freightShipmentQuoteRequest" type="impl:FreightShipmentQuoteRequest"/>
   <complexType name="ErrorDescription">
    <sequence>
     <element name="errorDescription" nillable="true" type="xsd:string" maxOccurs="unbounded"/>
    </sequence>
   </complexType>
   <complexType name="CarrierQuoteResult">
    <sequence>
     <element name="carrierName" nillable="true" type="xsd:string"/>
     <element name="carrierSCAC" nillable="true" type="xsd:string"/>
     <element name="totalPrice" nillable="true" type="xsd:string"/>
     <element name="transitDays" nillable="true" type="xsd:string"/>
     <element name="interline" nillable="true" type="xsd:string"/>
     <element name="guaranteedService" nillable="true" type="xsd:string"/>
     <element name="highCostDeliveryShipment" nillable="true" type="xsd:string"/>
     <element name="nmfcRequired" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
   <complexType name="ArrayOfCarrierQuoteResult">
    <sequence>
     <element name="carrierQuoteResult" nillable="true" type="impl:CarrierQuoteResult" maxOccurs="unbounded"/>
    </sequence>
   </complexType>
   <complexType name="FreightShipmentQuoteResponse">
    <sequence>
     <element name="responseStatusCode" nillable="true" type="xsd:string"/>
     <element name="responseStatusDescription" nillable="true" type="xsd:string"/>
     <element name="errorDescriptions" nillable="true" type="impl:ErrorDescription"/>
     <element name="quoteResults" nillable="true" type="impl:ArrayOfCarrierQuoteResult"/>
    </sequence>
   </complexType>
   <element name="freightShipmentQuoteResponse" type="impl:FreightShipmentQuoteResponse"/>
  </schema>
 </wsdl:types>
 <wsdl:message name="getShipmentSimpleQuoteResponse">
  <wsdl:part name="freightShipmentQuoteResponse" element="impl:freightShipmentQuoteResponse"/>
 </wsdl:message>
 <wsdl:message name="FreightShipmentQuoteRequestHeaders">
  <wsdl:part name="authenticationToken" element="impl:AuthenticationToken"/>
 </wsdl:message>
 <wsdl:message name="getShipmentSimpleQuoteRequest">
  <wsdl:part name="freightShipmentQuoteRequest" element="impl:freightShipmentQuoteRequest"/>
 </wsdl:message>
 <wsdl:portType name="FreightShipmentQuote">
  <wsdl:operation name="getShipmentSimpleQuote" parameterOrder="freightShipmentQuoteRequest">
   <wsdl:input name="getShipmentSimpleQuoteRequest" message="impl:getShipmentSimpleQuoteRequest"/>
   <wsdl:output name="getShipmentSimpleQuoteResponse" message="impl:getShipmentSimpleQuoteResponse"/>
  </wsdl:operation>
 </wsdl:portType>
 <wsdl:binding name="FreightShipmentQuoteSoapBinding" type="impl:FreightShipmentQuote">
  <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
  <wsdl:operation name="getShipmentSimpleQuote">
   <wsdlsoap:operation soapAction=""/>
   <wsdl:input name="getShipmentSimpleQuoteRequest">
    <wsdlsoap:body use="literal"/>
    <wsdlsoap:header message="impl:FreightShipmentQuoteRequestHeaders" part="authenticationToken" use="literal">
    </wsdlsoap:header>
   </wsdl:input>
   <wsdl:output name="getShipmentSimpleQuoteResponse">
    <wsdlsoap:body use="literal"/>
   </wsdl:output>
  </wsdl:operation>
 </wsdl:binding>
 <wsdl:service name="FreightShipmentQuoteService">
  <wsdl:port name="FreightShipmentQuote" binding="impl:FreightShipmentQuoteSoapBinding">
   <wsdlsoap:address location="http://www.wwexship.com/webServices/services/FreightShipmentQuote"/>
  </wsdl:port>
 </wsdl:service>
</wsdl:definitions>


My coldfusion code to consume/call the webservice is-
consume.cfm

<!--- items data --->
<cfset items = arrayNew(1) /> 
<cfset str = structNew() /> 
<cfset str.nmfcClass = "apple" />
<cfset str.weight = "15" />
<cfset arrayAppend(items, str) />

<!--- freightShipmentQuoteRequest data--->
<cfset st = structNew() /> 
<cfset st.senderCity = "Freeport" />
<cfset st.senderState = "NY" />
<cfset st.senderZip = "11520" />
<cfset st.receiverCity = "Staten Island" />
<cfset st.receiverState = "NY" />
<cfset st.receiverZip = "10314" />
<cfset st.lineItems = "#items#" />
<cfset st.hazmatShipment = "N" />
<cfset st.insidePickup = "N" />
<cfset st.liftgatePickup = "N" />
<cfset st.residentialPickup = "N" />
<cfset st.tradeshowPickup = "N" />
<cfset st.constructionSitePickup = "N" />
<cfset st.insideDelivery = "N" />
<cfset st.liftgateDelivery = "N" />
<cfset st.residentialDelivery = "N" />
<cfset st.tradeshowDelivery = "N" />
<cfset st.constructionSiteDelivery = "N" />
<cfset st.notifyBeforeDelivery = "N" />


<cfoutput>
<cfset shipService = CreateObject("webservice","http://www.wwexship.com/webServices/services/FreightShipmentQuote?wsdl")>
<cfdump var="#shipService#">
<cfset response1=shipService.getShipmentSimpleQuote(#st#)>
<cfset response=shipService.getShipmentSimpleQuote(#st#)>
<cfdump var="#response#">
<cfdump var="#response.getResponseStatusCode()#">
<cfdump var="#response.getResponseStatusDescription()#">
<cfdump var="#response.getErrorDescriptions()#">
</cfoutput>


I am unable to authenticate this webservice my login credentials are-
(1) loginId = copssship
(2) password = password
(3) licenseKey = hhrWQ7RMJEDKJMh4
(4) accountNumber = W922601302

Please suggest how to authenticate this webservice?


回答1:


I have implemented http://www.wwexship.com web service in PHP. It is working fine.

<?php

$items = array();
$items[] = array('nmfcClass' => '50','weight' => '10');
$items[] = array('nmfcClass' => '50','weight' => '20');
$auth = Array('loginId' => "your Id", 'password' => "Your Pass",'licenseKey'=>'Your key','accountNumber'=>'Your account no,') ;
$client = new SoapClient('wsdl.xml',array( 'trace' =>1));
$header = new SoapHeader('http://www.wwexship.com','AuthenticationToken',$auth,false);
$client->__setSoapHeaders(array($header));
$result = $client->getShipmentSimpleQuote(array('senderCity' => 'Freeport','senderState'=>'NY','senderZip'=>'11520','receiverCity'=>'Staten Island','receiverState'=>'NY', 'receiverZip'=>'10314','lineItems'=>$items));
echo '<pre>';
print_r($result);



回答2:


I think I may have the answer. The Authentication info is specified as a header. ColdFusion provides an AddSoapRequestHeader() method for situations like this. It appears to want values either as text or XML. The code below will run and get you a success code. Note that as well as adding the header, I've changed the NMFC code to 300 and weight to 2. The service complained about the initial values.

shipService = CreateObject("webservice","http://www.wwexship.com/webServices/services/FreightShipmentQuote?wsdl");


doc = XmlNew();
doc.xmlRoot = XmlElemNew(doc, "http://www.wwexship.com", "AuthenticationToken");


loginId = XmlElemNew(doc, "http://www.wwexship.com", "loginId");
loginId.XmlText = "copssship";
loginId.XmlAttributes["xsi:type"] = "xsd:string";
doc.xmlRoot.XmlChildren[1] = loginId;


password = XmlElemNew(doc, "http://www.wwexship.com", "password");
password.XmlText = "password";
password.XmlAttributes["xsi:type"] = "xsd:string";
doc.xmlRoot.XmlChildren[2] = password;


licenseKey = XmlElemNew(doc, "http://www.wwexship.com", "licenseKey");
licenseKey.XmlText = "hhrWQ7RMJEDKJMh4";
licenseKey.XmlAttributes["xsi:type"] = "xsd:string";
doc.xmlRoot.XmlChildren[3] = licenseKey;

accountNumber = XmlElemNew(doc, "http://www.wwexship.com", "accountNumber");
accountNumber.XmlText = "W922601302";
accountNumber.XmlAttributes["xsi:type"] = "xsd:string";
doc.xmlRoot.XmlChildren[4] = accountNumber;

AddSOAPRequestHeader(shipService,"http://www.wwexship.com","authenticationToken",doc);

response=shipService.getShipmentSimpleQuote(st);


来源:https://stackoverflow.com/questions/10630394/coldfusion-how-to-authenticate-webservice-getshipmentsimplequote-of-wwex

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!