首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bittrex返回APIKEY_NOT_PROVIDED

Bittrex返回APIKEY_NOT_PROVIDED
EN

Stack Overflow用户
提问于 2017-06-18 01:13:26
回答 2查看 4.3K关注 0票数 4

我试图在我的示例iOS应用程序中调用Bittrex。

我收到了以下信息。

返回消息

代码语言:javascript
复制
SUCCESS: {
    message = "APIKEY_NOT_PROVIDED";
    result = "<null>";
    success = 0;
}

我检查了HTTP请求,每个was如下所示。

API请求

代码语言:javascript
复制
$ curl -i \
    -b "__cfduid=dea9a55b977dded0f94ad14f7158f03e91497078592" \
    -H "Content-Type: application/json" \
    -H "Accept-Language: en;q=1.0" \
    -H "apisign: 41a5b3a98d7da9bee01ddb8ab72dee...." \
    -H "User-Agent: SampleApp/1.0 (com.sampleapp.SampleApp; build:1; iOS 10.3.1) Alamofire/4.4.0" \
    -H "Accept-Encoding: gzip;q=1.0, compress;q=0.5" \
    -d "{\"apikey\":\"f23439b...\",\"nonce\":\"1497703898.0\"}" \
"https://bittrex.com/api/v1.1/account/getbalances"

我的代码如下所示。

代码语言:javascript
复制
let timeInterval = NSDate().timeIntervalSince1970
let epochtime = String(floor(timeInterval))
let parameters = "apikey=" + "f23439b..." + "&" + "nonce=" + epochtime
let url = path + "getbalances" + "?" + parameters
let secretKey: String = "df8a62...".hmac(algorithm: CryptoAlgorithm.SHA512, key: url)

Alamofire.request(path + "getbalances", 
                  method: .get, 
                  parameters: ["apikey":"f23439b...", "nonce":epochtime], 
                  encoding: JSONEncoding.default, 
                  headers: ["apisign":secretKey])
    .responseJSON(completionHandler: { response in
        let json = response.result.value as! NSDictionary
        let success = json["success"] as! CFBoolean
        if (success == kCFBooleanTrue) {
            //do something
            print(json)
        } else {
            let reason = response.result.description as AnyObject
            print(reason)
        }
    })

环境

  • macOS Sierra
  • XCode 8.3.3
  • Swift 3
  • 阿拉莫火4.4
EN

回答 2

Stack Overflow用户

发布于 2017-08-10 21:50:19

我相信您对新的V1.1 API有问题,您需要用HMAC- the 512加密秘密:

对于这个版本,我们使用标准的HMAC-HMAC 512签名。将apikeynonce附加到请求中,并计算HMAC哈希,并将其包含在apisign头下。注:现在不受尊重,但以后会强制执行。

不是iOS专家,但这可能会帮助您:

代码语言:javascript
复制
$apikey='xxx';
$apisecret='xxx';
$nonce=time();
$uri='https://bittrex.com/api/v1.1/market/getopenorders?apikey='.$apikey.'&nonce='.$nonce;
$sign=hash_hmac('sha512',$uri,$apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
$execResult = curl_exec($ch);
$obj = json_decode($execResult);
票数 6
EN

Stack Overflow用户

发布于 2018-02-01 17:18:12

看起来是一个简单的错误/您应该使用api秘密,并且我认为字符串的预设应该是uri(而不是url)。有一个使用Crypro库的快速BittrexKit库--方法签名略有不同。

代码语言:javascript
复制
let secretKey: String = URI.hmac(algorithm: CryptoAlgorithm.SHA512, key: APISECRET)

https://github.com/yuzushioh/BittrexKit摘樱桃

代码语言:javascript
复制
import Crypto

    guard let sign = HMAC.sign(message: uri, algorithm: .sha512, key: auth.apiSecret) else {
        print("Bittrex: HMAC failed")
    }



  private func buildURI() -> String? {
    let url = path.isEmpty ? baseURL : baseURL.appendingPathComponent(path)

    guard var components = URLComponents(url: url, resolvingAgainstBaseURL: true) else {
        return nil
    }

    if let queryParameters = queryParameters, !queryParameters.isEmpty {
        components.percentEncodedQuery = URLEncodedSerialization.string(from: queryParameters)
    }

    guard let uri = components.url?.absoluteString else {
        return nil
    }

    return uri
  }

(如果有人在使用alamofire进行这方面的工作,我欢迎任何编辑。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44610874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档