2016-07-28 5 views
1

Wir versuchen, mit einer API verbinden, um Leads & einige andere Funktionen durchzuführen. Wir verwenden VB6 und leider bekommen wir nicht viel Hilfe von den Leuten mit der API.Kann jemand C# "HttpWebRequest" in VB6 konvertieren?

Sie haben uns einen in C# geschriebenen Code geschickt. Wir müssen dasselbe tun, wie sie es tun, aber in VB6. Wir können das "HttpWebRequest" nicht verwenden, weil es aus unserer Sicht nicht mit VB6 funktioniert.

Dies ist der Code, den wir erhalten:

public class LeadField 
{ 
    public string FieldCode; 
    public string FieldValue; 
} 
public class aLink 
{ 
    public string href; 
    public string methods; 
    public string rel = "lead"; 
    public string description = "Get, update, or delete the lead"; 
} 
public class ReturnLead 
{ 
    public string message; 
    public LeadField[] detail; 
    public aLink[] links; 
} 

if (objSales.Count == 1) 
{ 
ArrayList objLeadField = new ArrayList(); 
csDealSheet objDealSheet = objSales.First(); 

objLeadField.Add(new LeadField() { FieldCode = "AgentCode", FieldValue = objDealSheet.DataObject.REP.ToString() }); 
objLeadField.Add(new LeadField() { FieldCode = "VendorCode", FieldValue = "FL 01" }); 
objLeadField.Add(new LeadField() { FieldCode = "CompanyName", FieldValue = objDealSheet.DataObject.COMPANY }); 
objLeadField.Add(new LeadField() { FieldCode = "AccountNumber", FieldValue = objDealSheet.DataObject.Account.ToUpper() }); 
objLeadField.Add(new LeadField() { FieldCode = "ContactFirstName", FieldValue = objDealSheet.DataObject.FirstName }); 
objLeadField.Add(new LeadField() { FieldCode = "ContactLastName", FieldValue = objDealSheet.DataObject.LastName }); 
objLeadField.Add(new LeadField() { FieldCode = "PrimaryPhone", FieldValue = objDealSheet.DataObject.PHONE10 }); 
//objLeadField.Add(new LeadField() { FieldCode = "LanguageCode", FieldValue = objDealSheet.DataObject.LANGUAGE.Replace("E", "English").Replace("S", "Spanish") }); 
objLeadField.Add(new LeadField() { FieldCode = "NumberOfAccounts", FieldValue = "1" }); 
objLeadField.Add(new LeadField() { FieldCode = "ProductTypeCode", FieldValue = objDealSheet.DataObject.Commodity }); 
objLeadField.Add(new LeadField() { FieldCode = "ProviderCode", FieldValue = objDealSheet.DataObject.UTILITY.ToUpper()}); 
objLeadField.Add(new LeadField() { FieldCode = "AccountHolderFullName", FieldValue = objDealSheet.DataObject.FirstName + " " + objDealSheet.DataObject.LastName }); 
objLeadField.Add(new LeadField() { FieldCode = "ProductCode", FieldValue = objDealSheet.DataObject.PROGRAM }); 
objLeadField.Add(new LeadField() { FieldCode = "ServiceAddress1", FieldValue = objDealSheet.DataObject.ST_NUMB + " " + objDealSheet.DataObject.ADDR }); 
objLeadField.Add(new LeadField() { FieldCode = "ServiceAddress2", FieldValue = objDealSheet.DataObject.UNIT }); 
objLeadField.Add(new LeadField() { FieldCode = "ServiceAddressCity", FieldValue = objDealSheet.DataObject.CITY }); 
objLeadField.Add(new LeadField() { FieldCode = "ServiceAddressPostalCode", FieldValue = objDealSheet.DataObject.ZIP }); 
objLeadField.Add(new LeadField() { FieldCode = "ServiceAddressState", FieldValue = objDealSheet.DataObject.ST }); 
objLeadField.Add(new LeadField() { FieldCode = "ServiceAddressCountry", FieldValue = objDealSheet.DataObject.COUNTRY.Replace("US", "USA") }); 
objLeadField.Add(new LeadField() { FieldCode = "BillingAddress1", FieldValue = objDealSheet.DataObject.BILLNUMB + " " + objDealSheet.DataObject.BILLADDR }); 
objLeadField.Add(new LeadField() { FieldCode = "BillingAddress2", FieldValue = objDealSheet.DataObject.BILLUNIT }); 
objLeadField.Add(new LeadField() { FieldCode = "BillingAddressCity", FieldValue = objDealSheet.DataObject.BILLCITY }); 
objLeadField.Add(new LeadField() { FieldCode = "BillingAddressPostalCode", FieldValue = objDealSheet.DataObject.BILLZIP }); 
objLeadField.Add(new LeadField() { FieldCode = "BillingAddressState", FieldValue = objDealSheet.DataObject.BILLST }); 
objLeadField.Add(new LeadField() { FieldCode = "BillingAddressCountry", FieldValue = objDealSheet.DataObject.BILLCOUNTR.Replace("US", "USA") }); 

//Send one lead 
StringBuilder sb = new StringBuilder(); 
new JavaScriptSerializer().Serialize(objLeadField, sb); 
string format = sb.ToString(); 
format = "[" + format.Substring(1, format.Length - 2) + "]"; 
} 


//Create the web request 


string url="https://www.dummyurl.com/leads"; 

HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; 

request.Method = "POST"; 
request.ContentType = "application/json; charset=utf-8"; 
// Create a byte array of the data we want to send 
byte[] byteData = UTF8Encoding.UTF8.GetBytes(Lead); 

// Set the content length in the request headers 
request.ContentLength = byteData.Length; 
string Username=********; 
string Password=********; 
request.Headers.Add("userName",Username); 
request.Headers.Add("password",Password); 
} 

// Write data 
using (Stream postStream = request.GetRequestStream()) 
postStream.Write(byteData, 0, byteData.Length); 

// Get response 
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
{ 
// Get the response stream 
StreamReader reader = new StreamReader(response.GetResponseStream()); 
// Save as string 
string res = reader.ReadToEnd(); 
if (res.Length > 0) 
{ 
    List<ReturnLead> ServRes = new JavaScriptSerializer().Deserialize<List<ReturnLead>>(res); 
    ReturnLead lead = ServRes.First(); 
    string LeadID = lead.links[0].href.Substring(lead.links[0].href.LastIndexOf("/") + 1, lead.links[0].href.Length - lead.links[0].href.LastIndexOf("/") - 1); 
} 
} 

Wir haben an vielen VB6/JSON/POST-Anfragen einen Blick zu nehmen und waren in der Lage, etwas zusammen zu stellen, aber es hat nicht einmal fast Arbeit . Wir haben das vorher noch nie in VB6 gemacht und sind nicht in C# versiert.

Ich frage mich nur, ob jemand uns einen Start oder eine VB6 Richtung geben kann, um dies zu portieren.

Danke!

+0

In VB6 haben Sie keine integrierte Funktionalität zum Ausführen von Webanforderungen. Du musst es selber machen. Weitere Informationen finden Sie unter http://www.vbforums.com/showthread.php?334645-Winsock-Making-HTTP-POST-GET-Requests. – Kevin

Antwort

2

Dies ist VBScript, so dass Sie in VB6/VBA einfügen können. Dies verwendet Microsoft.XMLHTTP Objekt. Sie könnten auch den Internet Explorer gescriptet haben (oder den IE zu einem Teil Ihrer App gemacht haben). Siehe https://msdn.microsoft.com/en-us/library/ms537505(v=vs.85).aspx für die XMLHTTP-Hilfe.

Dies lädt den Sicherheitsscanner von MS-Website für Vista 32 Bit herunter.

Set fso = CreateObject("Scripting.FileSystemObject") 
Set Outp = Wscript.Stdout 
Set wshShell = CreateObject("Wscript.Shell") 
Set ShApp = CreateObject("Shell.Application") 
On Error Resume Next 
Set File = WScript.CreateObject("Microsoft.XMLHTTP") 
File.Open "GET", "http://definitionupdates.microsoft.com/download/definitionupdates/safetyscanner/x86/msert.exe:200", False 
File.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; .NET4.0E; BCD2000; BCD2000)" 
File.Send 
If err.number <> 0 then 
    wscript.echo "" 
    wscript.echo "Error getting file" 
    wscript.echo "==================" 
    wscript.echo "" 
    wscript.echo "Error " & err.number & "(0x" & hex(err.number) & ") " & err.description 
    wscript.echo "Source " & err.source 
    wscript.echo "" 
    wscript.echo "HTTP Error " & File.Status & " " & File.StatusText 
    wscript.echo File.getAllResponseHeaders 
else 
    On Error Goto 0 
    Set BS = CreateObject("ADODB.Stream") 
    BS.type = 1 
    BS.open 
    BS.Write File.ResponseBody 
    BS.SaveToFile ShApp.Namespace(&h10).self.path & "\safetyscanner.exe", 2 
    wshshell.Run "c:\users\safetyscanner.exe", 1, False 
End If 
0

Vielen Dank für Ihre Antworten Jungs, und danke Noodles, für die Buchung des Codes. Obwohl es sich nicht um eine direkte Konvertierung des C# -Skripts handelte, das wir ursprünglich erhalten hatten, schafften wir es, Code in VB6 zu schreiben, um das zu tun, was wir tun mussten.

Im Wesentlichen verwenden wir das MSXML2 und es ist ServerXMLHTTP, um eine Webanforderung einzurichten. Wir können uns anmelden, POST-Daten abrufen und die Antwort abrufen. Wir müssen noch etwas mehr tun, um Array-Daten zu veröffentlichen, im Gegensatz zu einer einzelnen JSON-String-Daten, aber wir sind so weit gekommen und sind ziemlich hoffnungsvoll, dass wir weiterkommen werden.

Es folgt der Code, den wir geschrieben, die ziemlich genau das tut, was der C# -Code tat, falls es ist hilfreich:

Dim sUrl As String 
Dim Xmlhttp As New MSXML2.ServerXMLHTTP60 

strJSONToSend = "[{""FieldCode"": ""AccountHolderFirstName"",""FieldValue"": ""John""}]" 

sUrl = "https://www.dummyurl.com/lead" 
Xmlhttp.open "POST", sUrl, False 
Xmlhttp.setRequestHeader "userName", "****" 
Xmlhttp.setRequestHeader "password", "****" 
Xmlhttp.setOption 2, SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS 
Xmlhttp.setRequestHeader "Content-Type", "application/json; charset=utf-8" 

Xmlhttp.send strjsontosend 
domResponse = Xmlhttp.responseText 
Text1.Text = Xmlhttp.responseText 

Danke Jungs!