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)

查看:86
本文介绍了C#如何在HTTPS(Magento 1.9.3.3)中使用SOAP V2添加客户数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发C#winapp,以将客户数据添加到Magento服务器.我的服务器正在使用Magento 1.9.3.3.我尝试使用https协议向服务器添加数据时遇到问题.如果使用http,则下面的代码可以完美地工作.

I'm developing a C# winapp to add customer data to Magento server. My server is using Magento 1.9.3.3. I have a problem when I tried to add data to the server, using https protocol. The code below works flawlessly if using http.

这是我的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>

这是创建客户的代码.

    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"'

如果我将安全模式更改为http,它可以正常工作,但是我需要使用https. 我尝试复制网址 https://192.168.1.72/magento /index.php/api/v2_soap/index/?wsdl=1 并输入浏览器结果是显示XML .

If I change the security mode to http, it works flawlessly but I need to use 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.

最后,我正在使用来自Apache 2.4的OpenSSL,并且已经允许通过php.ini进行SSL扩展,但是在我的localhost中说它是不安全的.

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.

更新:仍然不起作用.我从Rom Eh的答案中得到了这个错误

UPDATE: Still doesn't work. I got this error from Rom Eh's answer

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是我的同事,几天前我们已经解决了此问题,我将其发布给对这个问题有好奇心的人.

OP is my coworker and we already fixed this issue days ago and I'm posting this for people who curious about this issue.

首先,他的app.config完全没问题. Transport模式下的basicHttpBinding可以与HTTPS一起使用,但是实际的问题是他的SSL是自签名证书. Visual Studio的错误报告没有提供足够的信息,您还必须查看Apache错误日志(error.log).它总是在下面抛出这些错误

Firstly, his app.config is absolutely fine. The basicHttpBinding with Transport mode can be used with HTTPS but the actual problem is his SSL is a self-signed certificate. The error report from Visual Studio isn't giving enough info, you must look at the Apache error log (error.log) too. 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

这表明问题是OpenSSL未能验证其证书.因此,我们更改了使用合法SSL的测试环境,并且一切正常.

It showed the problem was OpenSSL failed to verify his certificate. So we changed the test environment that uses legit SSL and everything works without any problem.

这篇关于C#如何在HTTPS(Magento 1.9.3.3)中使用SOAP V2添加客户数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆