2012-02-19 39 views
0

我幾乎完成了從C#到VB.NET翻譯,但是,我碰到一些小錯誤:小錯誤翻譯從C#代碼到VB.NET


  • 「issuerId」已在此類中聲明爲'Private Shared issuerid()As String'。第17行
  • '1維數組的字符串'類型的值不能轉換爲'字符串'。
    line 215
  • '1維數組的字符串'類型的值不能轉換爲'字符串'。 線223

原代碼

using System; 

namespace sisow 
{ 
public class Sisow 
{ 
    private static string[] issuerid; 
    private static string[] issuername; 
    private static DateTime lastcheck; 

    private string response; 

    // Merchant data 
    public string merchantId; 
    public string merchantKey; 
    public string shopId;   // voor toekomstige doeleinden 

    // Transaction data 
    public string payment;   // empty=iDEAL; ideal=iDEAL; sofort=DIRECTebanking; mistercash=MisterCash 
    public string issuerId;   // mandatory; sisow bank code 
    public string purchaseId;  // mandatory; max 16 alphanumeric 
    public string entranceCode;  // max 40 strict alphanumeric (letters and numbers only) 
    public string description;  // mandatory; max 32 alphanumeric 
    public double amount;   // mandatory; min 0.45 
    public string notifyUrl; 
    public string returnUrl;  // mandatory 
    public string cancelUrl; 
    public string callbackUrl; 

    // Status data 
    public string status; 
    public DateTime timeStamp; 
    public string consumerAccount; 
    public string consumerName; 
    public string consumerCity; 

    // Result/check data 
    public string trxId; 
    public string issuerUrl; 

    // Error data 
    public string errorCode; 
    public string errorMessage; 

    // Status 
    public const string statusSuccess = "Success"; 
    public const string statusCancelled = "Cancelled"; 
    public const string statusExpired = "Expired"; 
    public const string statusFailure = "Failure"; 
    public const string statusOpen = "Open"; 

    public Sisow(string merchantid, string merchantkey) 
    { 
     this.merchantId = merchantid; 
     this.merchantKey = merchantkey; 
     shopId = ""; 
    } 

    // voor toekomstige doeleinden 
    public Sisow(string merchantid, string merchantkey, string shopid) 
    { 
     this.merchantId = merchantid; 
     this.merchantKey = merchantkey; 
     this.shopId = shopid; 
    } 

    private void error() 
    { 
     errorCode = parse("errorcode"); 
     errorMessage = System.Web.HttpUtility.UrlDecode(parse("errormessage")); 
    } 

    private string parse(string search) 
    { 
     return parse(response, search); 
    } 

    private string parse(string xml, string search) 
    { 
     int start, end; 

     if ((start = xml.IndexOf("<" + search + ">")) < 0) 
      return null; 
     start += search.Length + 2; 
     if ((end = xml.IndexOf("</" + search + ">", start)) < 0) 
      return null; 
     return xml.Substring(start, end - start); 
    } 

    private bool send(string method, params string[] keyvalue) 
    { 
     string parms = ""; 
     string url = "https://www.sisow.nl/Sisow/iDeal/RestHandler.ashx/" + method; 
     try 
     { 
      for (int i = 0; i + 1 < keyvalue.Length; i += 2) 
      { 
       if (string.IsNullOrEmpty(keyvalue[i + 1])) 
        continue; 
       if (!string.IsNullOrEmpty(parms)) 
        parms += "&"; 
       parms += keyvalue[i] + "=" + System.Web.HttpUtility.UrlEncode(keyvalue[i + 1]); 
      } 
      System.Net.HttpWebRequest hwr = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url); 
      hwr.ContentType = "application/x-www-form-urlencoded"; 
      hwr.Method = "POST"; 
      hwr.ContentLength = parms.Length; 
      System.IO.StreamWriter sw = new System.IO.StreamWriter(hwr.GetRequestStream()); 
      sw.Write(parms); 
      sw.Flush(); 
      sw.Close(); 
      System.Net.HttpWebResponse hws = (System.Net.HttpWebResponse)hwr.GetResponse(); 
      System.IO.StreamReader sr = new System.IO.StreamReader(hws.GetResponseStream()); 
      response = sr.ReadToEnd(); 
      hws.Close(); 
      return true; 
     } 
     catch (Exception) 
     { 
      response = ""; 
      error(); 
      return false; 
     } 
    } 

    private int getDirectory() 
    { 
     if (issuerid != null && lastcheck.AddDays(1).CompareTo(DateTime.Now) >= 0) 
      return 0; 
     if (!send("DirectoryRequest")) 
      return -1; 
     string search = parse("directory"); 
     if (string.IsNullOrEmpty(search)) 
     { 
      error(); 
      return -2; 
     } 
     string[] iss = search.Replace("<issuer>", "").Split(new string[] { "</issuer>" }, StringSplitOptions.RemoveEmptyEntries); 
     issuerid = new string[iss.Length]; 
     issuername = new string[iss.Length]; 
     for (int i = 0; i < iss.Length; i++) 
     { 
      issuerid[i] = parse(iss[i], "issuerid"); 
      issuername[i] = parse(iss[i], "issuername"); 
     } 
     lastcheck = DateTime.Now; 
     return 0; 
    } 

    // DirectoryRequest 
    public int DirectoryRequest(bool test, out string select) 
    { 
     int ex; 

     select = "<select id=\"sisowbank\" name=\"issuerid\">"; 
     ex = getDirectory(); 
     if (ex < 0) 
      return ex; 
     for (int i = 0; i < issuerid.Length; i++) 
     { 
      select += "<option value=\"" + issuerid[i] + "\">" + issuername[i] + "</option>"; 
     } 
     select += "</select>"; 
     return 0; 
    } 

    // DirectoryRequest 
    public int DirectoryRequest(bool test, out string[] issuers) 
    { 
     int ex; 

     issuers = null; 
     ex = getDirectory(); 
     if (ex < 0) 
      return ex; 
     issuers = new string[issuerid.Length * 2]; 
     for (int i = 0; i < issuerid.Length; i++) 
     { 
      issuers[i * 2] = issuerid[i]; 
      issuers[i * 2 + 1] = issuername[i]; 
     } 
     return 0; 
    } 

    // compute SHA1 
    private static string GetSHA1(string key) 
    { 
     System.Security.Cryptography.SHA1Managed sha = new System.Security.Cryptography.SHA1Managed(); 
     System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); 
     byte[] bytes = sha.ComputeHash(enc.GetBytes(key)); 
     //string sha1 = System.BitConverter.ToString(sha1).Replace("-", ""); 
     string sha1 = ""; 
     for (int j = 0; j < bytes.Length; j++) 
      sha1 += bytes[j].ToString("x2"); 
     return sha1; 
    } 

    // TransactionRequest 
    public int TransactionRequest() 
    { 
     trxId = issuerUrl = ""; 
     if (string.IsNullOrEmpty(merchantId)) 
      return -1; 
     if (string.IsNullOrEmpty(merchantKey)) 
      return -2; 
     if (string.IsNullOrEmpty(purchaseId)) 
      return -3; 
     if (amount < 0.45) 
      return -4; 
     if (string.IsNullOrEmpty(description)) 
      return -5; 
     if (string.IsNullOrEmpty(returnUrl)) 
      return -6; 
     if (string.IsNullOrEmpty(issuerId) && string.IsNullOrEmpty(payment)) 
      return -7; 
     if (string.IsNullOrEmpty(entranceCode)) 
      entranceCode = purchaseId; 
     string sha1 = GetSHA1(purchaseId + entranceCode + (amount * 100).ToString() + shopId + merchantId + merchantKey); 
     if (!send("TransactionRequest", "shopid", shopId, "merchantid", merchantId, "payment", payment, "issuerid", issuerId, "purchaseid", purchaseId, 
      "amount", (amount * 100).ToString(), "description", description, "entrancecode", entranceCode, "returnurl", returnUrl, 
      "cancelurl", cancelUrl, "callbackurl", callbackUrl, "notifyurl", notifyUrl, "sha1", sha1)) 
      return -8; 
     trxId = parse("trxid"); 
     if (string.IsNullOrEmpty(trxId)) 
     { 
      error(); 
      return -2; 
     } 
     issuerUrl = System.Web.HttpUtility.UrlDecode(parse("issuerurl")); 
     return 0; 
    } 

    private int GetStatus() 
    { 
     status = parse("status"); 
     if (string.IsNullOrEmpty(status)) 
     { 
      error(); 
      return -5; 
     } 
     timeStamp = DateTime.Parse(parse("timestamp")); 
     amount = long.Parse(parse("amount"))/100.0; 
     consumerAccount = parse("consumeraccount"); 
     consumerName = parse("consumername"); 
     consumerCity = parse("consumercity"); 
     purchaseId = parse("purchaseid"); 
     description = parse("description"); 
     entranceCode = parse("entrancecode"); 
     return 0; 
    } 

    // StatusRequest 
    public int StatusRequest() 
    { 
     if (string.IsNullOrEmpty(merchantId)) 
      return -1; 
     if (string.IsNullOrEmpty(merchantKey)) 
      return -2; 
     if (string.IsNullOrEmpty(trxId)) 
      return -3; 
     string sha1 = GetSHA1(trxId + shopId + merchantId + merchantKey); 
     if (!send("StatusRequest", "shopid", shopId, "merchantid", merchantId, "trxid", trxId, "sha1", sha1)) 
      return -4; 
     return GetStatus(); 
    } 

    // StatusRequest 
    public int StatusRequest(string trxid) 
    { 
     if (string.IsNullOrEmpty(merchantId)) 
      return -1; 
     if (string.IsNullOrEmpty(merchantKey)) 
      return -2; 
     if (string.IsNullOrEmpty(trxid)) 
      return -3; 
     trxId = trxid; 
     string sha1 = GetSHA1(trxId + shopId + merchantId + merchantKey); 
     if (!send("StatusRequest", "shopid", shopId, "merchantid", merchantId, "trxid", trxId, "sha1", sha1)) 
      return -4; 
     return GetStatus(); 
    } 
} 
} 

新的VB代碼

Namespace sisow 
Public Class Sisow 
    Private Shared issuerid As String() 
    Private Shared issuername As String() 
    Private Shared lastcheck As DateTime 

    Private response As String 

    ' Merchant data 
    Public merchantId As String 
    Public merchantKey As String 
    Public shopId As String 
    ' voor toekomstige doeleinden 
    ' Transaction data 
    Public payment As String 
    ' empty=iDEAL; ideal=iDEAL; sofort=DIRECTebanking; mistercash=MisterCash 
    Public issuerId As String 
    ' mandatory; sisow bank code 
    Public purchaseId As String 
    ' mandatory; max 16 alphanumeric 
    Public entranceCode As String 
    ' max 40 strict alphanumeric (letters and numbers only) 
    Public description As String 
    ' mandatory; max 32 alphanumeric 
    Public amount As Double 
    ' mandatory; min 0.45 
    Public notifyUrl As String 
    Public returnUrl As String 
    ' mandatory 
    Public cancelUrl As String 
    Public callbackUrl As String 

    ' Status data 
    Public status As String 
    Public timeStamp As DateTime 
    Public consumerAccount As String 
    Public consumerName As String 
    Public consumerCity As String 

    ' Result/check data 
    Public trxId As String 
    Public issuerUrl As String 

    ' Error data 
    Public errorCode As String 
    Public errorMessage As String 

    ' Status 
    Public Const statusSuccess As String = "Success" 
    Public Const statusCancelled As String = "Cancelled" 
    Public Const statusExpired As String = "Expired" 
    Public Const statusFailure As String = "Failure" 
    Public Const statusOpen As String = "Open" 

    Public Sub New(merchantid As String, merchantkey As String) 
     Me.merchantId = merchantid 
     Me.merchantKey = merchantkey 
     shopId = "" 
    End Sub 

    ' voor toekomstige doeleinden 
    Public Sub New(merchantid As String, merchantkey As String, shopid As String) 
     Me.merchantId = merchantid 
     Me.merchantKey = merchantkey 
     Me.shopId = shopid 
    End Sub 

    Private Sub [error]() 
     errorCode = parse("errorcode") 
     errorMessage = System.Web.HttpUtility.UrlDecode(parse("errormessage")) 
    End Sub 

    Private Function parse(search As String) As String 
     Return parse(response, search) 
    End Function 

    Private Function parse(xml As String, search As String) As String 
     Dim start As Integer, [end] As Integer 

     If (InlineAssignHelper(start, xml.IndexOf("<" & search & ">"))) < 0 Then 
      Return Nothing 
     End If 
     start += search.Length + 2 
     If (InlineAssignHelper([end], xml.IndexOf("</" & search & ">", start))) < 0 Then 
      Return Nothing 
     End If 
     Return xml.Substring(start, [end] - start) 
    End Function 

    Private Function send(method As String, ParamArray keyvalue As String()) As Boolean 
     Dim parms As String = "" 
     Dim url As String = "https://www.sisow.nl/Sisow/iDeal/RestHandler.ashx/" & method 
     Try 
      Dim i As Integer = 0 
      While i + 1 < keyvalue.Length 
       If String.IsNullOrEmpty(keyvalue(i + 1)) Then 
        Continue While 
       End If 
       If Not String.IsNullOrEmpty(parms) Then 
        parms += "&" 
       End If 
       parms += keyvalue(i) & "=" & System.Web.HttpUtility.UrlEncode(keyvalue(i + 1)) 
       i += 2 
      End While 
      Dim hwr As System.Net.HttpWebRequest = DirectCast(System.Net.WebRequest.Create(url), System.Net.HttpWebRequest) 
      hwr.ContentType = "application/x-www-form-urlencoded" 
      hwr.Method = "POST" 
      hwr.ContentLength = parms.Length 
      Dim sw As New System.IO.StreamWriter(hwr.GetRequestStream()) 
      sw.Write(parms) 
      sw.Flush() 
      sw.Close() 
      Dim hws As System.Net.HttpWebResponse = DirectCast(hwr.GetResponse(), System.Net.HttpWebResponse) 
      Dim sr As New System.IO.StreamReader(hws.GetResponseStream()) 
      response = sr.ReadToEnd() 
      hws.Close() 
      Return True 
     Catch generatedExceptionName As Exception 
      response = "" 
      [error]() 
      Return False 
     End Try 
    End Function 

    Private Function getDirectory() As Integer 
     If issuerid IsNot Nothing AndAlso lastcheck.AddDays(1).CompareTo(DateTime.Now) >= 0 Then 
      Return 0 
     End If 
     If Not send("DirectoryRequest") Then 
      Return -1 
     End If 
     Dim search As String = parse("directory") 
     If String.IsNullOrEmpty(search) Then 
      [error]() 
      Return -2 
     End If 
     Dim iss As String() = search.Replace("<issuer>", "").Split(New String() {"</issuer>"}, StringSplitOptions.RemoveEmptyEntries) 
     issuerid = New String(iss.Length - 1) {} 
     issuername = New String(iss.Length - 1) {} 
     For i As Integer = 0 To iss.Length - 1 
      issuerid(i) = parse(iss(i), "issuerid") 
      issuername(i) = parse(iss(i), "issuername") 
     Next 
     lastcheck = DateTime.Now 
     Return 0 
    End Function 

    ' DirectoryRequest 
    Public Function DirectoryRequest(test As Boolean, ByRef [select] As String) As Integer 
     Dim ex As Integer 

     [select] = "<select id=""sisowbank"" name=""issuerid"">" 
     ex = getDirectory() 
     If ex < 0 Then 
      Return ex 
     End If 
     For i As Integer = 0 To issuerid.Length - 1 
      [select] += "<option value=""" & issuerid(i) & """>" & issuername(i) & "</option>" 
     Next 
     [select] += "</select>" 
     Return 0 
    End Function 

    ' DirectoryRequest 
    Public Function DirectoryRequest(test As Boolean, ByRef issuers As String()) As Integer 
     Dim ex As Integer 

     issuers = Nothing 
     ex = getDirectory() 
     If ex < 0 Then 
      Return ex 
     End If 
     issuers = New String(issuerid.Length * 2 - 1) {} 
     For i As Integer = 0 To issuerid.Length - 1 
      issuers(i * 2) = issuerid(i) 
      issuers(i * 2 + 1) = issuername(i) 
     Next 
     Return 0 
    End Function 

    ' compute SHA1 
    Private Shared Function GetSHA1(key As String) As String 
     Dim sha As New System.Security.Cryptography.SHA1Managed() 
     Dim enc As New System.Text.UTF8Encoding() 
     Dim bytes As Byte() = sha.ComputeHash(enc.GetBytes(key)) 
     'string sha1 = System.BitConverter.ToString(sha1).Replace("-", ""); 
     Dim sha1 As String = "" 
     For j As Integer = 0 To bytes.Length - 1 
      sha1 += bytes(j).ToString("x2") 
     Next 
     Return sha1 
    End Function 

    ' TransactionRequest 
    Public Function TransactionRequest() As Integer 
     trxId = InlineAssignHelper(issuerUrl, "") 
     If String.IsNullOrEmpty(merchantId) Then 
      Return -1 
     End If 
     If String.IsNullOrEmpty(merchantKey) Then 
      Return -2 
     End If 
     If String.IsNullOrEmpty(purchaseId) Then 
      Return -3 
     End If 
     If amount < 0.45 Then 
      Return -4 
     End If 
     If String.IsNullOrEmpty(description) Then 
      Return -5 
     End If 
     If String.IsNullOrEmpty(returnUrl) Then 
      Return -6 
     End If 
     If String.IsNullOrEmpty(issuerId) AndAlso String.IsNullOrEmpty(payment) Then 
      Return -7 
     End If 
     If String.IsNullOrEmpty(entranceCode) Then 
      entranceCode = purchaseId 
     End If 
     Dim sha1 As String = GetSHA1(purchaseId & entranceCode & (amount * 100).ToString() & shopId & merchantId & merchantKey) 
     If Not send("TransactionRequest", "shopid", shopId, "merchantid", merchantId, "payment", _ 
     payment, "issuerid", issuerid, "purchaseid", purchaseId, "amount", _ 
     (amount * 100).ToString(), "description", description, "entrancecode", entranceCode, "returnurl", _ 
     returnUrl, "cancelurl", cancelUrl, "callbackurl", callbackUrl, "notifyurl", _ 
     notifyUrl, "sha1", sha1) Then 
      Return -8 
     End If 
     trxId = parse("trxid") 
     If String.IsNullOrEmpty(trxId) Then 
      [error]() 
      Return -2 
     End If 
     issuerUrl = System.Web.HttpUtility.UrlDecode(parse("issuerurl")) 
     Return 0 
    End Function 

    Private Function GetStatus() As Integer 
     status = parse("status") 
     If String.IsNullOrEmpty(status) Then 
      [error]() 
      Return -5 
     End If 
     timeStamp = DateTime.Parse(parse("timestamp")) 
     amount = Long.Parse(parse("amount"))/100.0 
     consumerAccount = parse("consumeraccount") 
     consumerName = parse("consumername") 
     consumerCity = parse("consumercity") 
     purchaseId = parse("purchaseid") 
     description = parse("description") 
     entranceCode = parse("entrancecode") 
     Return 0 
    End Function 

    ' StatusRequest 
    Public Function StatusRequest() As Integer 
     If String.IsNullOrEmpty(merchantId) Then 
      Return -1 
     End If 
     If String.IsNullOrEmpty(merchantKey) Then 
      Return -2 
     End If 
     If String.IsNullOrEmpty(trxId) Then 
      Return -3 
     End If 
     Dim sha1 As String = GetSHA1(trxId & shopId & merchantId & merchantKey) 
     If Not send("StatusRequest", "shopid", shopId, "merchantid", merchantId, "trxid", _ 
     trxId, "sha1", sha1) Then 
      Return -4 
     End If 
     Return GetStatus() 
    End Function 

    ' StatusRequest 
    Public Function StatusRequest(trxid__1 As String) As Integer 
     If String.IsNullOrEmpty(merchantId) Then 
      Return -1 
     End If 
     If String.IsNullOrEmpty(merchantKey) Then 
      Return -2 
     End If 
     If String.IsNullOrEmpty(trxid__1) Then 
      Return -3 
     End If 
     trxId = trxid__1 
     Dim sha1 As String = GetSHA1(trxId & shopId & merchantId & merchantKey) 
     If Not send("StatusRequest", "shopid", shopId, "merchantid", merchantId, "trxid", _ 
     trxId, "sha1", sha1) Then 
      Return -4 
     End If 
     Return GetStatus() 
    End Function 
    Private Shared Function InlineAssignHelper(Of T)(ByRef target As T, value As T) As T 
     target = value 
     Return value 
    End Function 
End Class 
End Namespace 

回答

4

你有問題,因爲VB.NET是不區分大小寫的,而C#ISN 「T。

這意味着,在那裏,說,兩個變量與類似名稱只有大小寫不定義 - 例如issuerIdissuerid - 他們是在C#不同,但認爲在VB.NET相同。

+0

我只是打字! ; O) – 2012-02-19 11:56:10