USI Webservice SOAP Format - php

I am in the process of developing process to communicate with the Unique Student Identifier (USI) Webservice. I have a Vanguard token, courtesy of some nice (SoapClient avoiding) code by Sergey Vidusov (thanks!) and I'm trying to use the contents of that token in my (also SoapClient avoiding) SOAP request to the USI service. I am using the "example security header" from the V2.0 Technical Services contract (P79) as a template and trying to fill in the blanks from the token and despite a few dozen slightly varied iterations, I constantly get:
An error occurred when verifying security for the message.
in the SOAP fault section of the response. I won't be surprised to learn that I am going about this the wrong way, but I am, for the moment out of ideas.
From the token, I am taking the Binary Secret and using it as the Signature value and the SecurityTokenReference->KeyIdentifier as the KeyIdentifier in my request. I've also copied the entire EncryptedAssertion section from the token in to the request.
My (supposedly valid) XML is like
<s:Envelope
xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://www.w3.org/2005/08/addressing"
xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<a:Action s:mustUnderstand="1">http://usi.gov.au/ws/2015/VerifyUSI</a:Action>
<a:MessageID>urn:uuid-594a3e4f2c463</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1"> http://usi.gov.au/ws/2015/VerifyUSI </a:To>
<o:Security s:mustUnderstand="1"
xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<u:Timestamp u:Id="_0">
<u:Created>2017-06-21T09:37:19.000Z</u:Created>
<u:Expires>2017-06-21T10:37:19.000Z</u:Expires>
</u:Timestamp>
<EncryptedAssertion
xmlns="urn:oasinametc:SAML:2.0:assertion">
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlnxenc="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>
<KeyInfo
xmlns="http://www.w3.org/2000/09/xmldsig#">
<EncryptedKey xmlne="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p">
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
</EncryptionMethod>
<KeyInfo>
<SecurityTokenReference xmlno="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<X509Data>
<X509IssuerSerial>
<X509IssuerName>CN=Australian Government Notary Services OCA, OU=For Development purposes ONLY, OU=Australian Authentication and Notary Services, O=Australian Government, C=AU</X509IssuerName>
<X509SerialNumber>137894267415199651126496945754681728351</X509SerialNumber>
</X509IssuerSerial>
</X509Data>
</SecurityTokenReference>
</KeyInfo>
<CipherData>
<CipherValue>Bc30iHzG4b9ypeC0q8+wvCRox6jTplCg4hKMUpNAXhmhzQyCfFgb3ROihGMB6wLb1moTT/+WpxsMljpeBTKu3oYo8anxwQQf6921Sz7lJCGUrWWMg9IZxq9qEfE85DBqo7tuhs7qkpHlgsUEC/D3IMRycze7x2wJphs6AFBtNDZwVogrQNyp76AUVCGqMSy7EA5woNOuPZqYYHWUDU7/Lv9Jzp6ccOwYXpmnwsW7dMecN6sJbZeopCNf9FuVHS0OJi/l7uadi3VDwRJuiPEB09tETvYNZpUDf/BFQPnHyuWfrjj4nRUKEQx9KcE092+z23n2M8PQmuuEAyRAOnWGNg==</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>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</CipherValue>
</CipherData>
</EncryptedData>
</EncryptedAssertion>
<Signature
xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></CanonicalizationMethod>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1"></SignatureMethod>
<Reference URI="#_0">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod>
<DigestValue>3d5GbpTJJ2uX3t4fJz3oT3TuaUA=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>3zexIO6yp7PTD1M7H7BD3rURd2Yj35ELKRSSuLqVHso=</SignatureValue>
<KeyInfo>
<o:SecurityTokenReference k:TokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1"
xmlns:k="http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd">
<o:KeyIdentifier ValueType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.0#SAMLAssertionID">_ef36244c-da95-47ed-9abf-ddce3c85edd1</o:KeyIdentifier>
</o:SecurityTokenReference>
</KeyInfo>
</Signature>
</o:Security>
</s:Header>
<s:Body>
<soap:Body
xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<u:VerifyUSI
xmlns:u="http://usi.gov.au/2015/ws">
<u:OrgCode>970003</u:OrgCode>
<u:USI>ABCDEFGHJK</u:USI>
<u:FirstName>John</u:FirstName>
<u:FamilyName>Smith</u:FamilyName>
<u:DateOfBirth>1971-12-01</u:DateOfBirth>
</u:VerifyUSI>
</soap:Body>
</s:Body>
I feel I am close ... but just need another clue to propel me forward

I just ran your XML through an online XML validator at http://www.xmlvalidation.com, and it says XML document structures must start and end within the same entity.. Looking at your XML (and this might just be a screwed copy paste to SO), it appears you don't have a closing tag for </s:Envelope>.
Add that first if it isn't there. If it is, you'll need to look in your PHP error_log and get the real error message and stack trace so you can debug a little further.

Related

Is there WSDL for RequestSecurityToken / RequestSecurityTokenResponse

I'm working on project where a SoapClient is sending my server a RequestSecurityToken request from a .NET environment.
Normally this request would go to a .NET WCF service and the WCF service would return the RequestSecurityTokenReponse accordingly.
I'm using a LAMP environment for the server side and wanted to find out if there's a WSDL for RequestSecurityToken / RequestSecurityTokenResponse or if someone has a copy of the Envelop that contain the RequestSecurityTokenResponse. Therefore, I'll be able to format the return data from my server correctly when returning it to the client.
Also in the RequestSecurityToken request there is a BinarySecret, do I need to use that to create the Security Token on my server before I return it to the client.
Here's the Envelope that I'm receiving the SoapClient:
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<a:Action s:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT</a:Action>
<a:MessageID>urn:uuid:3c574ae0-51fd-4013-82fb-70763c0d0cee</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">/a:To>
<o:Security xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" s:mustUnderstand="1">
<u:Timestamp u:Id="_0">
<u:Created>2021-12-01T17:35:15.623Z</u:Created>
<u:Expires>2021-12-01T17:40:15.623Z</u:Expires>
</u:Timestamp>
<o:UsernameToken u:Id="uuid">
<o:Username>xxx</o:Username>
<o:Password>xxx</o:Password>
</o:UsernameToken>
</o:Security>
</s:Header>
<s:Body>
<t:RequestSecurityToken xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust">
<t:TokenType>http://schemas.xmlsoap.org/ws/2005/02/sc/sct</t:TokenType>
<t:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</t:RequestType>
<t:Entropy>
<t:BinarySecret u:Id="23323" Type="http://schemas.xmlsoap.org/ws/2005/02/trust/Nonce">3433433</t:BinarySecret>
</t:Entropy>
<t:KeySize>256</t:KeySize>
</t:RequestSecurityToken>
</s:Body>
</s:Envelope>

Webservice to receive an external push

I need a little guide please. An external application will send to my webapp several times a day this info (push in my application). My app is developed in php with symfony3 as framework).
The information I will receive will be something like this (soap definition):
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header/>
<soap:Body>
<RoomRateListUpdRequest>
<RoomRateListUpdRQ Language="es" Version="1">
<Login User="hdynastic" Password="Dynastic2017" HotelCode="1">
</Login>
<RoomRateListUpd>
<Contracts>
<Contract id="104595" DateFrom="2019-08-03" DateTo="2019-08-03">
<Rates>
<Rate DateFrom="2019-08-03" DateTo="2019-08-03">
<Rooms>
<Room RoomTypeID="440">
<Allotments>
<Allotment AllotmentDate="2019-08-03" IsAvailable="true">98</Allotment>
</Allotments>
</Room>
</Rooms>
</Rate>
</Rates>
</Contract>
</Contracts>
</RoomRateListUpd>
</RoomRateListUpdRQ>
</RoomRateListUpdRequest>
</soap:Body>
</soap:Envelope>
What kind of webservice should I create to read this type of information? How to listen & receive this soap definition?
Thank you very much for any help provided!

How to retrieve the headers from a SoapFault

I'm using PHP's SoapClient to connect to a webservice (which is out of my control). One of the SoapFaults I'm receiving is as follows (formatted for readability):
<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<Infolog xmlns="Infolog" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<InfologMessage xmlns="http://schemas.datacontract.org/2004/07/Microsoft.Dynamics.AX.Framework.Services">
<InfologMessageType>Error</InfologMessageType>
<Message>Customer 6729 not found.</Message>
</InfologMessage>
</Infolog>
</s:Header>
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring xml:lang="en-US">Request Failed. See the Exception Log for details.</faultstring>
<detail xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<AifFault xmlns="http://schemas.microsoft.com/dynamics/2008/01/documents/Fault" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<CustomDetailXml i:nil="true" />
<FaultMessageListArray i:nil="true" />
<InfologMessageList xmlns:b="http://schemas.datacontract.org/2004/07/Microsoft.Dynamics.AX.Framework.Services" i:nil="true" />
<StackTrace i:nil="true" />
<XppExceptionType>3</XppExceptionType>
</AifFault>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
When PHP throws the SoapFault exception, the message is the Request Failed. See the Exception Log for details. as would be expected. But what I really need is the Infolog entry from the Header. Is there any way to retrieve the Header params, other than calling __getLastResponse() and parsing the entire XML myself, which seems very clunky?
I am open to switching client libraries if that will do it - I've so far tried with the native PHP SoapClient and Zend\Soap\Client

Magento (1.7.0.2) DHL XML Service Issue with Production URL

I'm having trouble with the Magento's default DHL shipping module. According to the debug log. The request sent out to the test Gateway URL # https://xmlpitest-ea.dhl.com/XMLShippingServlet seems to return the response as expected. However, when I switched the gateway to the production one # https://xmlpi-ea.dhl.com/XMLShippingServlet, the response returned as empty string (blank).
Here is an example of the request XML from the debug log file
<?xml version="1.0" encoding="UTF-8"?>
<p:DCTRequest xmlns:p="http://www.dhl.com" xmlns:p1="http://www.dhl.com/datatypes" xmlns:p2="http://www.dhl.com/DCTRequestdatatypes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.dhl.com DCT-req.xsd ">
<GetQuote>
<Request>
<ServiceHeader>
<SiteID>[hidden]</SiteID>
<Password>[hidden]</Password>
</ServiceHeader>
</Request>
<From>
<CountryCode>BR</CountryCode>
<Postalcode>04602000</Postalcode>
<City>São Paulo</City>
</From>
<BkgDetails>
<PaymentCountryCode>BR</PaymentCountryCode>
<Date>2014-03-13</Date>
<ReadyTime>PT10H00M</ReadyTime>
<DimensionUnit>CM</DimensionUnit>
<WeightUnit>KG</WeightUnit>
<Pieces>
<Piece>
<PieceID>1</PieceID>
<Weight>17.5</Weight>
</Piece>
</Pieces>
<PaymentAccountNumber>[hidden]</PaymentAccountNumber>
<IsDutiable>Y</IsDutiable>
</BkgDetails>
<To>
<CountryCode>BR</CountryCode>
<Postalcode>03318-000</Postalcode>
<City>Tatuapé</City>
</To>
<Dutiable>
<DeclaredCurrency>BRL</DeclaredCurrency>
<DeclaredValue>14299.48</DeclaredValue>
</Dutiable>
</GetQuote>
</p:DCTRequest>
Did anyone experience the same issue before and how did you fix it? I tried to contact Magento via the forum, twitter, and facebook, but never heard back from them.
Thank you,
Patt

php consume WCF SSL SOAP Client 1.2

Im having some problems consuming a wsHttpBinding WCF from PHP. I originally tried to use SOAP1.2 but couldnt get it to specify the WS Action.
I downloaded the nusoap library. I was originally getting an error saying that the webservice wouldnt accept the data due to a type mismatch (text/xml instead of the expected application/soap+xml). I managed to make changes to nusoap.php to send the data as application/soap+xml). Now that doesnt throw an error, i get 400 bad request error from the server.
I can consume the service from WCFTestClient and also from SOAPUI without any messing around, but just cannot get it to fly from PHP. I even copied the entire soap envelope from SOAPUI and set the $soapmsg in nusoap.php to be exactly that and it still fails.
So anyone want to offer some guidance.
EDIT
This is the code i was trying in SOAP 1.2
$params = array("soap_version"=> SOAP_1_2,
"trace"=>1,
"exceptions"=>0,
);
$client = #new SoapClient('https://localhost/wcftest/Service.svc?wsdl',$params);
$retval = $client->GetData(array('value'=>'stuff'));
if (is_soap_fault($retval)) {
trigger_error("SOAP Fault: (faultcode: {$retval->faultcode}, faultstring: {$retval->faultstring})", E_USER_ERROR);
}
EDIT #2
This is the code that works out of SOAPUI
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"><wsa:Action>http://tempuri.org/IService/GetData</wsa:Action></soap:Header>
<soap:Body>
<tem:GetData>
<!--Optional:-->
<tem:value>stuff</tem:value>
</tem:GetData>
</soap:Body>
</soap:Envelope>
After adding the SoapHeaders manually as mentioned by Gords link below i get this as the __last_request when debugging with netbeans and still the same error
"<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://tempuri.org/">
<env:Header>
<ns1:Action>http://tempuri.org/IService/GetData</ns1:Action>
</env:Header>
<env:Body><ns1:GetData><ns1:value>stuff</ns1:value></ns1:GetData></env:Body></env:Envelope>
any advice??
Thanks!
Andy
Ok so i got this to work. Thanks to Gord for making me double check stuff that i had overlooked earlier on.
I ended ditching nusoap and just sticking with with SOAP 1.2. Here is my php code
//Declare some paramaters for our soapclient. Need to make sure its set to soap 1.2
$params = array("soap_version"=> SOAP_1_2,
"trace"=>1,
"exceptions"=>0,
);
//Create the soap client
$client = new SoapClient('https://localhost/wcftest/Service.svc?wsdl',$params);
//add some WSAddressing Headers in. Ensure that you have the Namespace as the address if you are using wsHttpBinding on the endpoint
//This was the step that took me the longest to figure out!
$actionHeader = new SoapHeader('http://www.w3.org/2005/08/addressing','Action','http://tempuri.org/IService/GetData',true);
//Add the headers into the client
$client->__setSoapHeaders($actionHeader);
//Make the call and pass in the variables that we require to go to the server
$retval = $client->__soapCall('GetData',array('value'=>'stuff'));
//Some Error Catching
if (is_soap_fault($retval)) {
trigger_error("SOAP Fault: (faultcode: {$retval->faultcode}, faultstring: {$retval->faultstring})", E_USER_ERROR);
}
and the working envelope
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://tempuri.org/" xmlns:ns2="http://www.w3.org/2005/08/addressing">
<env:Header>
<ns2:Action env:mustUnderstand="true">http://tempuri.org/IService/GetData</ns2:Action>
</env:Header>
<env:Body>
<ns1:GetData/>
</env:Body>
</env:Envelope>
and the web.config file from the WCF Service
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
</system.web>
<connectionStrings>
<add name="Timeforce" connectionString="Data Source=apps.ziptrek.com;Initial Catalog=qqest;User ID=qqest; Password=qqest;"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="TransportSecurity">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name="Service" behaviorConfiguration="Service1">
<endpoint address="https://localhost/wcftest/Service.svc" binding="wsHttpBinding" bindingConfiguration="TransportSecurity" contract="IService"></endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Service1">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpsGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="httpsService1">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false"/>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>

Categories