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.
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With