Các bạn, tôi bị kẹt, đập đầu khỏi bàn trong vài giờ qua.SOAP-ERROR: Mã hóa: Vi phạm các quy tắc mã hóa?
Tôi đang cố gắng tiêu thụ một dịch vụ và tôi có 8 chức năng khác mà tôi gọi gần giống với ID này nhưng kết quả là 'SOAP-ERROR: Encoding: Violation of encoding rules' lỗi.
Heres gọi hàm (wsdl bỏ qua đối với an ninh):
function CanLoadProduct($data){
$client = new SoapClient('wsdl-url');
$params = array('username' => $this->username,
'password' => $this->password,
'prod' => $data['productid'],
'mdn' => $data['mdn']);
try {
$reply = $client->__soapCall("CanLoadProduct", $params);
} catch (Exception $e) {
echo 'Error: ', $e->getMessage(), "\n";
print_r($params);
die();
}
if($reply['result'] == 1){
return TRUE; // 1 = true
} else {
return FALSE;
}
}
Ok như vậy chức năng này, kết nối với một webservice, các yếu tố cần thiết là: username, password, prod, MDN, tất cả 4 trong số đó Tôi cung cấp như là một phần của mảng $ params. Tên người dùng/Mật khẩu được xác định trước đó và hoạt động tốt, vì 8 hàm khác sử dụng dịch vụ web mà không gặp bất kỳ sự cố nào.
Mảng $ data [] (mà tôi chuyển đến hàm), chứa: $ data ['productid'] $ data ['mdn'] không có gì khác được sử dụng.
Tôi nhận
SOAP-ERROR: Encoding: Violation of encoding rules
vì một lý do không giải thích được, và Googling lỗi này được tôi đâu. Bất cứ ai khác chạy vào điều này? Chạy PHP 5.2.9-2. Điều kỳ lạ là đây là giống với chức năng này mà hoạt động 100%:
function GetPIN($productid){
$client = new SoapClient('wsdl-url');
$params = array('username' => $this->username,
'password' => $this->password,
'prod' => $productid);
try {
$reply = $client->__soapCall("GetPIN", $params);
} catch (Exception $e) {
echo 'Error: ', $e->getMessage(), "\n";
die();
}
return $reply;
}
Đây là WSDL (nên đăng này đầu tiên):
<?xml version="1.0" encoding="ISO-8859-1"?>
<definitions 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/"
xmlns:tns="ready:test" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="ready:test">
<types>
<xsd:schema targetNamespace="ready:test"
>
<xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<xsd:import namespace="http://schemas.xmlsoap.org/wsdl/" />
</xsd:schema>
</types>
<message name="CanLoadProductRequest">
<part name="username" type="xsd:string" />
<part name="password" type="xsd:string" />
<part name="prod" type="xsd:string" />
<part name="mdn" type="xsd:string" />
<part name="esn" type="xsd:string" /></message>
<message name="CanLoadProductResponse">
<part name="result" type="xsd:int" /></message>
<portType name="CanLoadProductPortType">
<operation name="CanLoadProduct">
<input message="tns:CanLoadProductRequest"/>
<output message="tns:CanLoadProductResponse"/>
</operation>
</portType>
<binding name="CanLoadProductBinding" type="tns:CanLoadProductPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="CanLoadProduct">
<soap:operation soapAction="{url-removed}" style="rpc"/>
<input>
<soap:body use="encoded" namespace=""
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace=""
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="CanLoadProduct">
<port name="CanLoadProductPort" binding="tns:CanLoadProductBinding">
<soap:address location="{url-removed}"/>
</port>
</service>
</definitions>
Nếu đây là khách hàng .NET, tôi sẽ cố gắng mã hóa "prod" và "mdn" mã hóa cứng để được biết các giá trị tốt và xem điều gì xảy ra. Nếu nó hoạt động, tôi sẽ loại bỏ một mã cứng tại một thời điểm để xem cái nào là vấn đề. Sau đó tôi sẽ xem xét giá trị thất bại để xem có điều gì đặc biệt về nó hay không. –
Đó cũng là suy nghĩ đầu tiên của tôi. –
Tôi đã cố gắng mã hóa nó, nhưng tôi nhận được kết quả tương tự, nó rất lạ. Tôi không biết về bất kỳ phương pháp nào khác của sự cố khi chụp ảnh này. – Jakub