简体   繁体   English

C#如何在HTTPS(Magento 1.9.3.3)中使用SOAP V2添加客户数据

[英]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 &quot;https://192.168.1.72/magento/index.php/api/v2_soap/index/?wsdl=1&quot; 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM