I am creating Soap server side.
Is there a way to change default namespace for soap envelope, body and header tags?
To proceed requests I'm using following code:
ini_set( "soap.wsdl_cache_enabled", "0");
$server = new SoapServer('myWsdl.wsdl');
$server->addFunction("GetDetails");
$server->handle();
function GetDetails(){
$body_xml = '<GetDetailsResponse>
<Name>My name</Name>
</GetDetailsResponse>';
$result = new SoapVar ($body_xml, XSD_ANYXML);
return $result;
}
This is what I get in response:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<GetDetailsResponse>
<Name>My name</Name>
</GetDetailsResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
This is what I want to get in response:
<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetDetailsResponse>
<Name>My name</Name>
</GetDetailsResponse>
</s:Body>
</s:Envelope>
Related
My Client wants the response body tag to be
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:c2b="http://test.com/cpsinterface/payment">
<soapenv:Header/>
<soapenv:Body>
<c2b:C2BPaymentConfirmationResult>
1234560000007031 result received
</c2b:C2BPaymentConfirmationResult>
</soapenv:Body>
</soapenv:Envelope>
but nusoap server response is like
<?xml version="1.0" encoding="ISO-8859-1"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<C2BPaymentConfirmationRequestResponse xmlns="http://ws.webgate.bpc.ru/"><reply xmlns="">C2B Payment Transaction 102DPTI222110005 result received</reply>
</C2BPaymentConfirmationRequestResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Is it possible to alter this response according to the first one?
here is the method registration
$server->register("C2BPaymentValidationRequest", // Register Method
array('ns1:C2BPaymentValidationRequest' => 'tns:C2BPaymentValidationRequest'), // Method Parameter
array('reply'=>'tns:replyDTO'), // Response
$namespace, // Namespace
$namespace. '#C2BPaymentValidationRequest', // soapaction: (use default)
"document", // style: rpc or document
"literal", // use: encoded or literal
"Test" // description: documentation for the method
);
we have soapclient connection problem. please check below xml and my php code and advice us. when we run in soap ui working well when are trying to run in local server not working.
working SoapUI XML request:
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Header>
<wsse:Security
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Timestamp wsu:Id="TS-2">
<wsu:Created>2017-07-03T09:38:05.550Z</wsu:Created>
<wsu:Expires>2017-07-03T09:48:05.550Z</wsu:Expires>
</wsu:Timestamp>
<wsse:UsernameToken wsu:Id="UsernameToken-1">
<wsse:Username>xxxxxxx</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">xxxxxxxx</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns2:methodname
xmlns:ns2="http://ws.oprs.xxxxx.com/">
<arg0>
<actualClientIP>xxxxxx</actualClientIP>
<agentPanCard>xxxxxx</agentPanCard>
<userAuthKey>xxxxx</userAuthKey>
<userId>xxxxx</userId>
</arg0>
</ns2:methodname>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
above xml working fine in soap ui tool.
please check my php code.
private function apiMethodCall($url, $headerAuth, $className, $inputParams){
$soapClient = new SoapClient($url, $headerAuth);
$result = $soapClient->__soapCall($className, array($inputParams));
return $result;}
public function funcationName(){
$className = "methodname";
$headerAuth = array("UsernameToken"=>array("Timestamp"=>array("Created"=>"2017-07-03T09:40:00.550Z","Expires"=>"2017-07-03T09:50:00.550Z"),"UsernameToken"=>array("Username"=>"XXXXXX", "Password"=>"xxxxxxx")));
$inputParams =Array("arg0"=> Array("actualClientIP"=>"xxxxxx","agentPanCard"=>"xxxxxx","userAuthKey"=>"xxxxxxx","userId"=>"xxxxxx"));
$arr_chart = $this->apiMethodCall("http://xxxxxxxxxxxxx?wsdl", $headerAuth, $className, $inputParams);
print_r($arr_chart);
}
getting Below error
Fatal error: Uncaught SoapFault exception: [Client] looks like we got
no XML document in
SoapClient->__soapCall('methodname', Array)
I use SOAP as a method to communicate with the asp.net service. The problem is that I need to pass the XML without ns1: .
This is the request I send now:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://ex.ex.com/">
<SOAP-ENV:Body>
<ns1:GetInfoFromSending>
<ns1:Key>XXX</ns1:Key>
<ns1:ObjectID>2468</ns1:ObjectID>
</ns1:GetInfoFromSending>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
But the format of the request needed is this:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetInfoFromSendingList xmlns="http://ex.ex.com/">
<Key>string</Key>
<ObjectID>int</ObjectID>
</GetInfoFromSendingList>
</soap:Body>
</soap:Envelope>
I tried using MSSoapClient from PHP Manual but doesn't seem to work
try {
$soap = new MSSoapClient($wsdl, $options);
var_dump($soap);
$data = $soap->__soapCall('GetInfoFromSending', array('parameters'=>$params));
var_dump($soap);
}
catch(Exception $e) {
die($e->getMessage());
}
What is $namespace = "http://tempuri.com"; in MSSoapClient
Resolved by using the default __soapCall from SOAP.
I have an std object :
$args = new stdClass();
$args->userName = 'username';
$args->password = 'password';
$args->criteria->customer->customerId = '0002003';
I want create SoapRequest XML :
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="wsclient.dms.tecsys.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<mns1:search xmlns:mns1="wsclient.dms.tecsys.com">
<arg0>
<userName>username</userName>
<password>password</password>
<criteria>
<customer>
<customerId>0002003</customerId>
</customer>
</criteria>
</arg0>
</mns1:search>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
But i can't find solution. Can any one help me.
Regards
By using the SoapClient class you can create a soap request easily
Take a look at this
SoapClient: __doRequest — Which performs a SOAP request
This is current Soap message send to soap paypal API :
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="urn:ebay:apis:eBLBaseComponents"
xmlns:ns2="ebl:SetExpressCheckoutRequestDetails"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns3="urn:ebay:api:PayPalAPI"
xmlns:ns4="ebl:UserIdPasswordType">
<SOAP-ENV:Header>
<ns3:RequesterCredentials xsi:type="ns4:UserIdPasswordType">
<Username>xxxxx</Username>
<Password>xxxxx</Password>
<Signature>xxxxx</Signature>
</ns3:RequesterCredentials>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns3:SetExpressCheckoutReq>
<ns3:SetExpressCheckoutRequest>
<ns1:Version>84.0</ns1:Version>
<ns1:SetExpressCheckoutRequestDetails
xsi:type="ns2:SetExpressCheckoutRequestDetailsType">
<ReturnUrl>url_to_/success.paypal.php</ReturnUrl>
<CancelUrl>url_to_/cancel.paypal.php</CancelUrl>
<LocaleCode>US</LocaleCode>
</ns1:SetExpressCheckoutRequestDetails>
</ns3:SetExpressCheckoutRequest>
</ns3:SetExpressCheckoutReq>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
I instantiated this PHP5 SoapClient :
//Endpoint
$location = 'https://api-3t.sandbox.paypal.com/2.0/';
$uri = 'urn:ebay:api:PayPalAPI';
//SoapClient options
$options = array('trace' => 1, 'exceptions' => 1, 'location'=>$location, 'uri'=>$uri);
//My Soap Client
$client =new SoapClient('https://www.sandbox.paypal.com/wsdl/PayPalSvc.wsdl',$options);
But when I called SetExpressCheckout paypal soap service, i receive the following soap message :
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:cc="urn:ebay:apis:CoreComponentTypes"
xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"
xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext"
xmlns:ed="urn:ebay:apis:EnhancedDataTypes"
xmlns:ebl="urn:ebay:apis:eBLBaseComponents"
xmlns:ns="urn:ebay:api:PayPalAPI">
<SOAP-ENV:Header>
<Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext"
xsi:type="wsse:SecurityType"></Security>
<RequesterCredentials xmlns="urn:ebay:api:PayPalAPI"
xsi:type="ebl:CustomSecurityHeaderType">
<Credentials xmlns="urn:ebay:apis:eBLBaseComponents"
xsi:type="ebl:UserIdPasswordType">
</Credentials>
</RequesterCredentials>
</SOAP-ENV:Header>
<SOAP-ENV:Body id="_0">
<SetExpressCheckoutResponse xmlns="urn:ebay:api:PayPalAPI">
<Timestamp xmlns="urn:ebay:apis:eBLBaseComponents">
2012-01-13T12:09:01Z
</Timestamp>
<Ack xmlns="urn:ebay:apis:eBLBaseComponents">Failure</Ack>
<CorrelationID xmlns="urn:ebay:apis:eBLBaseComponents">
c8d551f118a1
</CorrelationID>
<Errors xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:ErrorType">
<ShortMessage xsi:type="xs:string">
Authentication/Authorization Failed
</ShortMessage>
<LongMessage xsi:type="xs:string">
You do not have permissions to make this API call
</LongMessage>
<ErrorCode xsi:type="xs:token">10002</ErrorCode>
<SeverityCode xmlns="urn:ebay:apis:eBLBaseComponents">
Error
</SeverityCode>
</Errors>
<Version xmlns="urn:ebay:apis:eBLBaseComponents">84.0</Version>
<Build xmlns="urn:ebay:apis:eBLBaseComponents">2271164</Build>
</SetExpressCheckoutResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Nevertheless, I used the API credentials of my business account test...
I don't understand why my code doesnt work.
The error is : 'You do not have permissions to make this API call', but how it's possible? Because i use the correct endpoint service (sandbox) ?
Someone can help me please?
You must use the API credentials of a Sandbox test account if you're connecting to the Sandbox API endpoint.
You can create a test account via https://developer.paypal.com/ > Test accounts > preconfigured.