How to call the Magento API from VB.NET

10,932

Solution 1

Function getHTTPStream() As String
    Dim myh As HttpWebRequest = _
    HttpWebRequest.Create("http://yourmagentoweb/soap/api/?wsdl")
    myh.Timeout = 30000
    myh.UserAgent = "Test"
    Dim myR As HttpWebResponse = myh.GetResponse()
    Dim myEnc As Encoding = Encoding.GetEncoding(1252)
    Dim mySr As StreamReader = New StreamReader(myR.GetResponseStream(), myEnc)

    Return mySr.ReadToEnd()
End Function

That code needs tweaking obviously- i have not got time to prettify this stuff


from Abid Hussain's link

1. Using wdsl tool I created a .vb source file by calling:

wsdl /language:VB /out:MageProxyClass.vb http:///api/v2_soap?wsdl

2. Afterwards I used the VB Comand Line Editor to compile the sourcefile into a dll.

vbc /out:MageProxyClass.dll /t:library /r:System.XML.dll,System.Web.Services.dll MageProxyClass.vb

3. Finally I was able to create an instance of MagentoService class defined in my MageProxyClass.dll

Private WithEvents msvc As New MagentoService() 

4. Example:

 Public Class main
    Private WithEvents msvc As New MagentoService()
    Private ssid As String
    Private Sub main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ListBox1.Items.Clear()
        ListBox1.Items.Add("Trying to connect")
        msvc.loginAsync("xxxx", "xxxxxxxxxxxxxxxx")
    End Sub

    Public Sub MageLoginComplete(ByVal sender As System.Object, ByVal e As loginCompletedEventArgs) Handles msvc.loginCompleted
        ListBox1.Items.Add("Login completed")
        ssid = e.Result
        ListBox1.Items.Add(String.Concat("Session ID: ", ssid))
    End Sub
End Class 

Solution 2

Finally got this working.

Add your webservice as usual (it will fail to compile but add it anyway)

Open Magento.wsdl (or whatever your VS has called the wsdl file in your web reference) and remove the call to catalogProductAttributeRemove completely.

 <!--wsdl:operation name="catalogProductAttributeRemove">
    <wsdl:documentation>Delete attribute</wsdl:documentation>
    <wsdl:input message="typens:catalogProductAttributeRemoveRequest" />
    <wsdl:output message="typens:catalogProductAttributeRemoveResponse" />
</wsdl:operation-->

Fire up the Visual Studio Command Prompt and navigate to your project, then the "Web References"

Type: wsdl /language:VB /out:Reference.vb Magento.wsdl /namespace:com.yourwebservicename.www

This will correctly generate the reference.vb file you need to continue.

Solution 3

You may want to give this example a try

Also a more detailed C# library for Magento can be found here:

Share:
10,932
Max Hodges
Author by

Max Hodges

Founder &amp; CEO White Rabbit Express, Blackship.com, OMGJapan.com, White Rabbit Press http://whiterabbitexpress.com

Updated on June 25, 2022

Comments

  • Max Hodges
    Max Hodges almost 2 years

    Magento has an API and it seems some people are using it via VB.NET but I cannot get it to work after trying for many hours.

    I’m on Magento 1.7.0.2 Trying to get a VB.NET app working with the API. I’m using the WS-I compliant web service setting.

    Error 1 Custom tool error: Unable to import WebService/Schema. Unable to import binding ‘Mage_Api_Model_Server_Wsi_HandlerBinding’ from namespace ‘urn:Magento’. The operation ‘catalogProductAttributeRemove’ on portType ‘Mage_Api_Model_Server_Wsi_HandlerPortType’ from namespace ‘urn:Magento’ had the following syntax error: The operation has no matching binding. Check if the operation, input and output names in the Binding section match with the corresponding names in the PortType section. d:\Documents\Visual Studio 2010\Projects\Mage\Mage\My Project\Settings.settings 1 1 Mage

    if I try to add it as a Service Reference (instead of a Web Reference) I get a different set of errors.

    Cannot import wsdl:binding Cannot import wsdl:port Cannot import wsdl:portType

    Error 5 Custom tool error: Failed to generate code for the service reference ‘ServiceReference1’. Please check other error and warning messages for details. d:\Documents\Visual Studio 2010\Projects\Mage\Mage\Service References\ServiceReference1\Reference.svcmap 1 1 Mage

    Warning 3 Custom tool warning: Cannot import wsdl:binding Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on. XPath to wsdl:portType: //wsdl:definitions[@targetNamespace=’urn:Magento’]/wsdl:portType[@name=’Mage_Api_Model_Server_Wsi_HandlerPortType’] XPath to Error Source: //wsdl:definitions[@targetNamespace=’urn:Magento’]/wsdl:binding[@name=’Mage_Api_Model_Server_Wsi_HandlerBinding’] d:\Documents\Visual Studio 2010\Projects\Mage\Mage\Service References\ServiceReference1\Reference.svcmap 1 1 Mage

    Warning 4 Custom tool warning: Cannot import wsdl:port Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on. XPath to wsdl:binding: //wsdl:definitions[@targetNamespace=’urn:Magento’]/wsdl:binding[@name=’Mage_Api_Model_Server_Wsi_HandlerBinding’] XPath to Error Source: //wsdl:definitions[@targetNamespace=’urn:Magento’]/wsdl:service[@name=’MagentoService’]/wsdl:port[@name=’Mage_Api_Model_Server_Wsi_HandlerPort’] d:\Documents\Visual Studio 2010\Projects\Mage\Mage\Service References\ServiceReference1\Reference.svcmap 1 1 Mage

    Warning 2 Custom tool warning: Cannot import wsdl:portType Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.XmlSerializerMessageContractImporter Error: Element message named catalogProductAttributeRemoveRequest from namespace urn:Magento is missing. XPath to Error Source: //wsdl:definitions[@targetNamespace=’urn:Magento’]/wsdl:portType[@name=’Mage_Api_Model_Server_Wsi_HandlerPortType’] d:\Documents\Visual Studio 2010\Projects\Mage\Mage\Service References\ServiceReference1\Reference.svcmap 1 1 Mage

    Can someone give me very explicit instruction/code on how to make a call and get a result? I can't even seem to get the initial configuration correct. I've downloaded some code others have provided online, but if doesn't work--probably because it was for a earlier version.

  • Max Hodges
    Max Hodges over 11 years
    i had following these instructions before posting, but they didn't work. Shouldn't need to compile the code into a DLL anyway just access it in a VB.NET project anyway. Did you actually get it to work? I'm going to create a new bounty because although stackoverflow automatically awarded you the points, my problem remains without a solution.