[英]C# How do I add customer data using SOAP V2 in HTTPS (Magento 1.9.3.3)
I'm developing a C# winapp to add customer data to Magento server. 我正在开发C#winapp,以将客户数据添加到Magento服务器。 My server is using Magento 1.9.3.3.
我的服务器正在使用Magento 1.9.3.3。 I have a problem when I tried to add data to the server, using
https
protocol. 当我尝试使用
https
协议向服务器添加数据时遇到问题。 The code below works flawlessly if using http
. 如果使用
http
则下面的代码可以完美地工作。
This is my App.config
file. 这是我的
App.config
文件。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="httpsBinding" allowCookies="true" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="Transport">
<transport clientCredentialType="None"
proxyCredentialType="None" realm=""/>
<message clientCredentialType="Certificate" algorithmSuite="Default"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://192.168.1.72/magento/index.php/api/v2_soap/index/"
binding="basicHttpBinding" bindingConfiguration="httpsBinding"
contract="MagentoService.PortType" name="Port" />
</client>
</system.serviceModel>
</configuration>
and this is code for create customer. 这是创建客户的代码。
PortTypeClient mservice = new PortTypeClient();
var mlogin = mservice.login("SoapUser", "ApiKey"); //login
try
{
int newCustomerCreateID = 0;
filters myfilter = new filters();
// Create Customer
customerCustomerEntityToCreate customerCreate = new customerCustomerEntityToCreate();
customerCreate.email = "tarasdzxc@gmail.com";
customerCreate.password = "0000000000";
customerCreate.firstname = "tarawat";
customerCreate.lastname = "kingposs";
customerCreate.middlename = "";
customerCreate.store_id = 1;
customerCreate.store_idSpecified = true;
customerCreate.website_id = 1;
customerCreate.website_idSpecified = true;
customerCreate.group_id = 1;
customerCreate.group_idSpecified = true;
customerCreate.prefix = "MR";
customerCreate.dob = "10/01/1995";
customerCreate.gender = Int32.Parse("1"); //1-Male;2-Female
customerCreate.genderSpecified = true;
newCustomerCreateID =
mservice.customerCustomerCreate(mlogin, customerCreate);
MessageBox.Show(newCustomerCreateID.ToString());
mservice.endSession(mlogin);
}
catch (Exception ex)
{
//Unable to create account
MessageBox.Show(ex.ToString());
}
after I ran it and it gave me this error: 在我运行它之后,它给了我这个错误:
System.ServiceModel.FaultException: 'SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://192.168.1.72/magento/index.php/api/v2_soap/index/?wsdl=1' : failed to load external entity "https://192.168.1.72/magento/index.php/api/v2_soap/index/?wsdl=1"'
If I change the security mode to http
, it works flawlessly but I need to use https
. 如果我将安全模式更改为
http
,那么它可以正常工作,但是我需要使用https
。 I tried copy url https://192.168.1.72/magento/index.php/api/v2_soap/index/?wsdl=1 and enter to browser results is show XML like this . 我尝试复制URL https://192.168.1.72/magento/index.php/api/v2_soap/index/?wsdl=1并输入到浏览器结果是显示XML 像这样 。
Lastly, I'm using OpenSSL from Apache 2.4 and I already allowed SSL extension from my php.ini
but in my localhost
said it unsecure. 最后,我正在使用来自Apache 2.4的OpenSSL,并且已经允许从
php.ini
进行SSL扩展,但是在我的localhost
说它是不安全的。
UPDATE : Still doesn't work. 更新 :仍然不起作用。 I got this error from Rom Eh's answer
我从Rom Eh的答案中得到了这个错误
System.ServiceModel.ProtocolException: 'The content type text/xml; charset=utf-8 of the response message does not match the content type of the binding (application/soap+xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 470 bytes of the response were: '<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>WSDL</faultcode><faultstring>SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://192.168.1.72/magento2/index.php/api/v2_soap/index/?wsdl=1' : failed to load external entity "https://192.168.1.72/magento2/index.php/api/v2_soap/index/?wsdl=1"
</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
OP is my coworker and we already fixed this issue days ago and I'm posting this for people who curious about this issue. OP是我的同事,几天前我们已经解决了此问题,我将其发布给对这个问题感到好奇的人。
Firstly, his app.config
is absolutely fine . 首先, 他的
app.config
绝对不错 。 The basicHttpBinding
with Transport
mode can be used with HTTPS
but the actual problem is his SSL is a self-signed certificate . 带
Transport
模式的basicHttpBinding
可以与HTTPS
一起使用,但实际的问题是他的SSL是自签名证书 。 The error report from Visual Studio isn't giving enough info, you must look at the Apache error log (error.log) too. Visual Studio的错误报告没有提供足够的信息,您也必须查看Apache错误日志(error.log)。 It always throws these error below
它总是在下面抛出这些错误
SoapServer::SoapServer(): SSL operation failed with code 1. OpenSSL Error messages:\nerror:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in C:\\xampp\\htdocs\\magento\\lib\\Zend\\Soap\\Server.php on line 814
SoapServer::SoapServer(): Failed to enable crypto in C:\\xampp\\htdocs\\magento\\lib\\Zend\\Soap\\Server.php on line 814
SoapServer::SoapServer(): I/O warning : failed to load external entity "https://192.168.1.72/magento/index.php/api/v2_soap/index/?wsdl=1" in C:\\xampp\\htdocs\\magento\\lib\\Zend\\Soap\\Server.php on line 814
PHP Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://192.168.1.72/magento/index.php/api/v2_soap/index/?wsdl=1' : failed to load external entity "https://192.168.1.72/magento/index.php/api/v2_soap/index/?wsdl=1"\n in C:\\xampp\\htdocs\\magento\\lib\\Zend\\Soap\\Server.php on line 814
It showed the problem was OpenSSL failed to verify his certificate. 它表明问题是OpenSSL无法验证他的证书。 So we changed the test environment that uses legit SSL and everything works without any problem.
因此,我们更改了使用合法SSL的测试环境,并且一切正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.