C# で Magento API に接続すると、ログインの成功時に例外がスローされます。
// connect to the first store
_magentoService = new MagentoService {Url = "http://store1.com/index.php/api/v2_soap"};
_magentoService.login(user1, password1);
// later on, connect to the second store (note the different url)
_magentoService = new MagentoService {Url = "http://store2.com/index.php/api/v2_soap"};
_magentoService.login(user2, password2);
最初のストアに接続すると、次が返されます。
<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:Magento" 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:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:loginResponse><loginReturn xsi:type="xsd:string">bec0144c8642f227e8fb3d032f40xxxx</loginReturn></ns1:loginResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
これは、ログインが成功した場合に期待される正確な応答です。2 番目のストアに接続しても、まったく同じ結果が返され、例外もスローされます。
System.Net.WebException was caught
Message=The request failed with the error message:
<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:Magento" 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:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:loginResponse><loginReturn xsi:type="xsd:string">bec0144c8642f227e8fb3d032f40zzzz</loginReturn></ns1:loginResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
Source=System.Web.Services
StackTrace:
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
ログインが成功したときに例外がスローされるのはなぜですか? 最初のサイト (成功) は Magento v1.6 で、失敗しているストアは Magento v1.7 です。
Web リファレンス経由で Magento を使用しています。login() メソッド用に生成されたコードは以下のとおりです。this.Invoke の呼び出しで例外が発生します。
[System.Web.Services.Protocols.SoapRpcMethodAttribute("urn:Mage_Api_Model_Server_V2_HandlerAction", RequestNamespace="urn:Magento", ResponseNamespace="urn:Magento")]
[return: System.Xml.Serialization.SoapElementAttribute("loginReturn")]
public string login(string username, string apiKey) {
object[] results = this.Invoke("login", new object[] {
username,
apiKey});
return ((string)(results[0]));
}