Tại sao tôi nhận được SO SO-ERROR: Phân tích cú pháp WSDL: Không thể tìm thấy <định nghĩa>.


8

Tôi đang cố gắng thiết lập ứng dụng khách SOAP trên một máy chủ để liên lạc với Magento trên máy chủ thử nghiệm. Cả hai máy chủ đều có phần mở rộng SOAP của PHP được cài đặt, định cấu hình và hiển thị trong phpinfo().

Đã thử tắt bộ nhớ đệm, sử dụng API v2 và v1 và mọi thứ khác tôi có thể nghĩ ra. Bất kể, tôi tiếp tục nhận được những vấn đề tương tự.

Hoặc là:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <SOAP-ENV:Fault>
            <faultcode>SOAP-ENV:Server</faultcode>
                <faultstring>
                    Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: 
                    Couldn't find <definitions> in 'http://myserver.com/api/v2_soap?wsdl=1' 
                    in dispatch.php:39 

                    Stack trace: #0 dispatch.php(39): 
                    SoapClient->SoapClient('http://myserver.com/...', Array) #1 {main} thrown
                </faultstring>
        </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

hoặc đôi khi một lỗi khác SOAP doesn't allow DTD....

Bây giờ tôi chỉ sử dụng mã ví dụ Magento đơn giản từ đây , thay vì chạy bất cứ thứ gì quan trọng, cho đến khi tôi có thể hiểu được chuyện gì đang xảy ra với điều này.

Nếu tôi làm file_get_contentsvới URL dịch vụ, tôi nhận được:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:typens="urn:Magento" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" name="Magento" targetNamespace="urn:Magento">
    <types>
    <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:Magento">
        <import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/"/>
        <complexType name="associativeEntity">
        <all>
            <element name="key" type="xsd:string"/>
            <element name="value" type="xsd:string"/>
        </all>
        </complexType>
        .
        .
        .
</definitions>

Vì vậy, có vẻ như nó không gặp khó khăn khi phân tích cú pháp này .. idk.

Câu trả lời:


17

Rõ ràng là tôi đã rơi vào một cạm bẫy thông thường của Magento, vì vậy tôi sẽ đăng câu trả lời trong trường hợp có ai khác đang tìm kiếm lỗi đặc biệt này. Về cơ bản, lỗi là do cài đặt Magento mà tôi đang cố gọi qua API SOAP.

Ban đầu tôi nghĩ rằng lỗi được tạo ra bởi khách hàng không thể xác định được kết quả định nghĩa này, tuy nhiên tình huống thực tế như sau.

  • Cài đặt Magento hoạt động như một máy chủ SOAP thực hiện một số cuộc gọi máy khách SOAP đến chính nó.
  • Các cuộc gọi này tra cứu cùng một tên miền bạn đang truy cập trong tập lệnh máy khách của bạn, nhưng bắt nguồn từ máy chủ mà tên miền đó được lưu trữ và lặp lại máy chủ nói trên.
  • Do đó, bạn cần kiểm tra tệp máy chủ của mình, thường là tại / etc / hosts cho các bản phân phối Linux và thử nối thêm Your.IP.Address.Here Your.Magento.Domain(i, e 70.0.0.2 magentohost.com)
  • Đảm bảo rằng iptablescho phép kết nối loopback, đặc biệt nếu bạn cố chạy localhost thay vì IP bên ngoài; nhưng rất có thể bạn sẽ cần sử dụng địa chỉ IP bên ngoài.

Đó là nó; khi tôi chỉnh sửa tệp: /etc/hostsvà thêm một dòng này, mọi thứ đều hoạt động tốt.

Nếu bất cứ ai có cái nhìn sâu sắc rõ ràng hơn hoặc câu trả lời thường tốt hơn - xin vui lòng gửi bài và rất có thể nó sẽ được chấp nhận qua câu trả lời này.


Điều này không giúp tôi khắc phục nó..Bạn có đoán được lý do gì không?
Usman Yousaf
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.