Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> PHP

PHP SoapClient không hỗ trợ WSDL extension khi kết nối SAP

Vấn đề: PHP SoapClient báo lỗi khi WSDL chứa policy/extension (WS-Policy, WS-Security) từ SAP.

Giải pháp 1: Sửa WSDL – Bỏ required policy

Tìm trong WSDL:

<wsp:UsingPolicy wsdl:required="true"/>

Sửa thành:

<wsp:UsingPolicy wsdl:required="false"/>

Giải pháp 2: Dùng endpoint /standard/ thay /ws_policy/

  1. Mở SAP SOAMANAGER → SOA Management.
  2. Chọn Web Service → Binding → Overview.
  3. URL chứa ws_policy → thay bằng standard.
  4. Lấy WSDL mới (không có policy) để dùng với PHP SoapClient.

Giải pháp 3: Tải WSDL về, sửa local, dùng file local

<?php
$client = new SoapClient('/path/to/fixed.wsdl', [
    'trace' => 1,
    'exceptions' => true,
    'cache_wsdl' => WSDL_CACHE_NONE
]);
?>

Giải pháp 4: Dùng thư viện mạnh hơn

  • WsdlToPhp – Generate class từ WSDL.
  • PHP-SOAP (composer: php-http/client-implementation) – Hỗ trợ WS-Security tốt hơn.

Lưu ý: SAP thường yêu cầu WS-Security (UsernameToken, X.509, SAML). PHP SoapClient gốc hỗ trợ kém. Cân nhắc dùng middleware (PI/PO, CPI) chuyển đổi sang REST/OData cho PHP dễ dùng hơn.