php - php curl 肥皂错误,肥皂:客户 无法处理没有有效操作参数的请求。请提供一个有效的肥皂 action.r
问题描述
我正在尝试通过 php 中的 curl 访问soap web 服务,但我收到类似soap:Client Unable to handle request without a valid action 参数的错误消息。请提供有效的肥皂动作。
我也尝试过使用 SOAPUI 和 Postman,但它们也出现了同样的错误。
SOAP XML:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Document-Invoice>
<Invoice-Header>
<InvoiceNumber>BIZ2020000000304</InvoiceNumber>
<InvoiceDate>2020-05-30</InvoiceDate>
<DocumentFunctionCode>O</DocumentFunctionCode>
<InvoiceProfile>BI</InvoiceProfile>
<MessageType>S</MessageType>
<Remarks>PO: P2320734</Remarks>
<Order>
<BuyerOrderNumber>P2320734</BuyerOrderNumber>
<BuyerOrderDate>2020-05-30</BuyerOrderDate>
</Order>
<Currency>
<InvoiceCurrency>TRL</InvoiceCurrency>
</Currency>
<Payment>
<PaymentMeans>42</PaymentMeans>
</Payment>
</Invoice-Header>
<Invoice-Parties>
<Buyer>
<ILN>9990000001049</ILN>
<TaxID>4840031463</TaxID>
<IDType>VKN</IDType>
<Name>Johnson and Johnson Sıhhi Malzeme San. Ve Tic. Ltd. Şti</Name>
<StreetName>Ertürk Sok Kavacık</StreetName>
<BuildingNumber>No:13</BuildingNumber>
<BuildingName>Keçeli Pl.</BuildingName>
<District>Beykoz</District>
<CityName>İstanbul</CityName>
<CountryName>Türkiye</CountryName>
<Country>TR</Country>
<TaxOfficeName>Büyük Mükellefler</TaxOfficeName>
<PhoneNumber>0216 538 20 00</PhoneNumber>
<Fax>0216 538 22 99</Fax>
</Buyer>
<Seller>
<ILN>9996440256367</ILN>
<TaxID>6440256367</TaxID>
<IDType>VKN</IDType>
<Name>Bizofis Bilgi Teknolojileri ve Yönetim Danışmanlık Hizmetleri Ticaret Limited Şirketi</Name>
<Room>6</Room>
<StreetName>Matbuat Sok.</StreetName>
<BuildingNumber>17</BuildingNumber>
<BuildingName>Durukan İş Merkezi</BuildingName>
<District>ŞİŞLİ</District>
<CityName>İSTANBUL</CityName>
<PostalCode>34394</PostalCode>
<CountryName>TÜRKİYE</CountryName>
<Country>TR</Country>
<TaxOfficeName>Zincirlikuyu</TaxOfficeName>
<PhoneNumber>0212 212 18 98</PhoneNumber>
<Fax>0212 356 39 99</Fax>
<Website>www.bizofis.com</Website>
<AdditionalIdentification>
<Identification>
<Type>TICARETSICILNO</Type>
<Value>499957</Value>
</Identification>
<Identification>
<Type>MERSISNO</Type>
<Value>0-6440-2563-6700014</Value>
</Identification>
</AdditionalIdentification>
</Seller>
</Invoice-Parties>
<Invoice-Lines>
<Line>
<Line-Item>
<LineNumber>1</LineNumber>
<ManufacturerItemCode>9990000000008</ManufacturerItemCode>
<ItemName>Hizmet Bedeli </ItemName>
<InvoiceQuantity>1.000</InvoiceQuantity>
<UnitOfMeasure>NIU</UnitOfMeasure>
<InvoiceUnitNetPrice>1286.3500</InvoiceUnitNetPrice>
<NetAmount>1286.35</NetAmount>
<TaxAmount>231.54</TaxAmount>
</Line-Item>
<Line-Tax>
<Tax>
<TaxRate>18.00</TaxRate>
<TaxCategoryCode>0015</TaxCategoryCode>
<TaxCategory>KDV GERCEK</TaxCategory>
<TaxAmount>231.54</TaxAmount>
<TaxableAmount>1286.35</TaxableAmount>
</Tax>
</Line-Tax>
</Line>
</Invoice-Lines>
<Invoice-Summary>
<TotalLines>1</TotalLines>
<TotalNetAmount>1286.35</TotalNetAmount>
<TotalTaxableAmount>1286.35</TotalTaxableAmount>
<TotalTaxAmount>231.54</TotalTaxAmount>
<TotalGrossAmount>1517.89</TotalGrossAmount>
<TotalAllowanceAmount>0.00</TotalAllowanceAmount>
<TotalChargeAmount>0.00</TotalChargeAmount>
<TotalPayableAmount>1517.89</TotalPayableAmount>
<Tax-Summary>
<Tax-Summary-Line>
<TaxRate>18.00</TaxRate>
<TaxCategoryCode>0015</TaxCategoryCode>
<TaxCategory>KDV GERCEK</TaxCategory>
<TaxAmount>231.54</TaxAmount>
<TaxableAmount>1286.35</TaxableAmount>
</Tax-Summary-Line>
</Tax-Summary>
</Invoice-Summary>
</Document-Invoice>
</soap:Body>
</soap:Envelope>
卷曲代码
$url = 'https://www.ecod.pl/EcodWebService/EDIservice.asmx';
$CURL = curl_init();
curl_setopt($CURL, CURLOPT_URL, $url);
curl_setopt($CURL, CURLOPT_POST,true);
curl_setopt($CURL, CURLOPT_POSTFIELDS, $xml_string);
curl_setopt($CURL, CURLOPT_HEADER, 1);
curl_setopt($CURL, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($CURL, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($CURL, CURLOPT_RETURNTRANSFER, true);
curl_setopt($CURL, curlOPT_VERBOSE, 1);
$headers = array(
"Content-type: text/xml; charset=utf-8",
"Accept: text/xml",
'Content-Length: '.strlen($xml_string)
);
curl_setopt($CURL, CURLOPT_HTTPHEADER, $headers);
curl_setopt($CURL, CURLOPT_USERPWD, $username . ":" . $password);
$xmlResponse = curl_exec($CURL);
$curlInfo = curl_getinfo($CURL, CURLINFO_HTTP_CODE);
// $curlInfo= curl_getinfo($CURL);
$errors = curl_error($CURL);
print_r($xmlResponse);
echo 'info=';print_r($curlInfo);
echo 'error=';print_r($errors);exit;
任何人都可以帮助我。谢谢
解决方案
使用 SoapClient 只需要几行代码......但是,有几种方法可以配置某些东西,如 HTTPS、代理使用、缓存、超时......
// ToDo: Put in URL to WSDL
$live_wsdl = "...";
$params = [
'soap_version' => SOAP_1_2,
'encoding' => 'UTF-8',
];
$soap = new SoapClient($live_wsdl, $params);
try {
echo '<pre>';
var_dump($soap);
$funcs = $soap->__getFunctions();
$types = $soap->__getTypes();
print_r($funcs);
}
catch(Exception $e) {
var_dump($e);
}
基本上,您可以直接调用公开的 API 函数:$soap->DoSomeAction($param1, $param2, ...);
希望它有点帮助...
高频
推荐阅读
- webrtc - 带有 VPN 的 WebRTC ICE 在 Chrome 中工作,但在 Firefox 中失败
- java - Google 聊天卡 API 无法提及用户
- python - 基于列而不是行索引/索引的散景链接/刷亮
- vaadin - Vaadin & Shiro 导航
- spring - 由于我没有在资源文件夹中保留任何文件,为什么我们需要映射到资源文件夹以加载所有静态资源?
- asp.net-mvc - MVC 路由到虚拟文件夹中的 Angular 应用程序
- c# - 带有 System.Data.Sqlite PK 的 EntityFramework 6 在插入时被覆盖
- pentaho - 结果集溢出发生 jpivot
- java - 如何使用 Azure Java SDK 发送和接收消息
- python - ModuleNotFoundError:没有名为“merlin.tradelogic”的模块