peterhuynh Posted March 5, 2015 Share Posted March 5, 2015 I'm two months into learning php - my first programming language. I'm thankful for all the support I've received from this board. This script is supposed to retrieve a balance from a bitcoin exchange. (Note: it is a dummy account, so no money actually in it.) Here is the script: <?php date_default_timezone_set("EST"); $nonce = date("Y-m-d H:i:s e"); $secret = 'banana'; $public = 'aGjnonYmA3gEQv6JzgEwcyR7cpa3ARxMlTUweXBer3xM'; $private = '2D0ndrWpzWasfDNIWfvKNizeE2cxmqJhQf31ubf0boyd'; $data = array( "t" => $nonce, "secret" => $secret ); $hash = hash_hmac('sha256', json_encode($data), $private); $headers = array( 'Accept: application/json', 'X-Auth: '. $public, 'X-Auth-Hash: '. $hash ); $header_data = json_encode($headers); $ch = curl_init('https://sandbox.cointrader.net/api4/account/balance'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($header_data)) ); $result = curl_exec($ch); curl_close($ch); var_dump($result); ?> The POST parameters are "time" and "secret". Time is supposed to be formatted a certain way, which I've done, and the secret is the word 'banana'. The exchange provides me with this message: string(205) "{"success":false,"message":"Unauthorized","data":{"errorCode":"401","message":"Headers or JSON POST missing tonce, corrupt or incomplete. Data: {\"t\":\"2015-03-04 22:33:57 EST\",\"secret\":\"banana\"}"}} " Link to comment https://forums.phpfreaks.com/topic/295111-headers-or-json-post-missing-tonce-corrupt-or-incomplete/ Share on other sites More sharing options...
CroNiX Posted March 6, 2015 Share Posted March 6, 2015 I don't think the postfields is supposed to be a json string. It should be a querystring Try curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data, '', '&')); Link to comment https://forums.phpfreaks.com/topic/295111-headers-or-json-post-missing-tonce-corrupt-or-incomplete/#findComment-1507729 Share on other sites More sharing options...
peterhuynh Posted March 6, 2015 Author Share Posted March 6, 2015 On 3/6/2015 at 12:26 AM, CroNiX said: I don't think the postfields is supposed to be a json string. It should be a querystring Try curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data, '', '&')); AuthenticationAuthentication is accomplished with a private/public key combination that utilizes HMAC-SHA256. Parameter names AND values (total quantity, price, etc.) are passed as strings in JSON format in POST body of the request. To use the API users must first generate a key pair in the User Profile API section of the site. Multiple keypair combinations can be generated per account. NOTE: All POST parameters in JSON (payload) must be sent in string format (quoted). All connections must be be transmitted over HTTPS/SSL. Link to comment https://forums.phpfreaks.com/topic/295111-headers-or-json-post-missing-tonce-corrupt-or-incomplete/#findComment-1507738 Share on other sites More sharing options...
peterhuynh Posted March 6, 2015 Author Share Posted March 6, 2015 I FIGURED IT OUT!!! Link to comment https://forums.phpfreaks.com/topic/295111-headers-or-json-post-missing-tonce-corrupt-or-incomplete/#findComment-1507739 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.