2013-06-08 3 views
1
<?php 

    function bter_query($path, array $req = array()) { 
     // API settings, add your Key and Secret at here 
     $key = 'key here'; 
     $secret = 'secrethere'; 

     // generate a nonce to avoid problems with 32bits systems 
     $mt = explode(' ', microtime()); 
     $req['nonce'] = $mt[1].substr($mt[0], 2, 6); 

     // generate the POST data string 
     $post_data = http_build_query($req, '', '&'); 
     $sign = hash_hmac('sha512', $post_data, $secret); 

     // generate the extra headers 
     $headers = array(
      'KEY: '.$key, 
      'SIGN: '.$sign, 
     ); 


     // curl handle (initialize if required) 
    static $ch = null; 
     if (is_null($ch)) { 
      $ch = curl_init(); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
      curl_setopt($ch, CURLOPT_USERAGENT, 
       'Mozilla/4.0 (compatible; Bter PHP bot; '.php_uname('a').'; PHP/'.phpversion().')' 
       ); 
     } 
     curl_setopt($ch, CURLOPT_URL, 'https://bter.com/api/'.$path); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 
     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 

     // run the query 
     $res = curl_exec($ch); 

     if ($res === false) throw new Exception('Curl error: '.curl_error($ch)); 
     //echo $res; 
     $dec = json_decode($res, true); 
     if (!$dec) throw new Exception('Invalid data: '.$res); 
     return $dec; 
    } 


    try { 
     // example 1: get funds 
     var_dump(bter_query('1/private/getfunds')); 

    } catch (Exception $e) { 
     echo "Error:".$e->getMessage(); 

    } 
?> 

Привет, ребята, мне нужно, чтобы преобразовать выше PHP код VBNET Я использую следующие функции:Преобразование PHP для VB.NET

Private Function StringToSHA512(ByVal content As String) As String 
    Dim M5 As New SHA512Managed 
    Dim bytestring() As Byte = Encoding.UTF8.GetBytes(content) 
    bytestring = M5.ComputeHash(bytestring) 
    Dim signer As String = Nothing 
    For Each bt As Byte In bytestring 
     signer &= bt.ToString("x2") 
    Next 
    Return signer 
End Function 

Private Function GetUnixTimestamp(ByVal currDate As DateTime) As Integer 
    'create Timespan by subtracting the value provided from the Unix Epoch 
    Dim span As TimeSpan = (currDate - New DateTime(2012, 1, 1, 0, 0, 0, 0).ToLocalTime()) 
    'return the total seconds (which is a UNIX timestamp) 
    Return span.TotalSeconds 
End Function 

    Private Function response(ByVal postdata As String) As String 
     Dim postReq As HttpWebRequest 
     Try 
      postReq = DirectCast(WebRequest.Create("https://bter.com/api/1/private/getfunds"), HttpWebRequest) 
      Dim keyer As String = LCase("Keyhere") 'your key goes here 
      Dim secret As String = "SecretHere" 'your secret goes here 
      Dim KeyByte() As Byte = Encoding.ASCII.GetBytes(secret) 
      Dim HMAcSha As New HMACSHA512(Encoding.ASCII.GetBytes(secret)) 
      Dim messagebyte() As Byte = Encoding.ASCII.GetBytes(postdata) 
      Dim hashmessage() As Byte = HMAcSha.ComputeHash(messagebyte) 
      Dim Sign As String = BitConverter.ToString(hashmessage) 
      Sign = Sign.Replace("-", "") 
      postReq.Method = "POST" 
      postReq.KeepAlive = False 
      postReq.Headers.Add("Key", keyer) 
      postReq.Headers.Add("Sign", LCase(Sign)) 
      postReq.ContentType = "application/x-www-form-urlencoded" 
      postReq.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729)" 
      postReq.ContentLength = messagebyte.Length 
      Dim postreqstream As Stream = postReq.GetRequestStream() 
      postreqstream.Write(messagebyte, 0, messagebyte.Length) 
      postreqstream.Dispose() 
      Dim PostRes As HttpWebResponse = DirectCast(postReq.GetResponse(), HttpWebResponse) 
      Dim postreqreader As New StreamReader(PostRes.GetResponseStream()) 
      response = postreqreader.ReadToEnd.Replace(Chr(34), Chr(39)) 
      postreqreader.Dispose() 
      PostRes.Close() 
     Catch ex As Exception 
      response = "" 
     End Try 
    End Function 

Но когда я называю ответ («одноразовое значение =» & GetUnixtimestamp (теперь)) возвращает:

{ 'результат': 'ложный', 'сообщение': 'Ошибка: недопустимый данных'}

Что я делаю не так?

ответ

0

Kow Это старая нить, но у меня/была такая же проблема. Вот мое решение:

randomn = CLng(DateTime.UtcNow.Subtract(New DateTime(1970, 1, 1)).TotalSeconds) 
postData = "method=" & lstmeth.SelectedItem & "&nonce=" & randomn 
Смежные вопросы