現在の Coinbase Php Gem を変更して、新しい Key+Secret API 認証を使用します。私は完全に彼らの指示に従っていると思いますが、私はいつも応答を受け取ります:"error":"ACCESS_SIGNATURE does not validate"
これまでのところ、私は持っています:
- 署名が小文字の 16 進ハッシュであることを確認しました
- 私のアクセスキーが受け入れられたことを CB コールバックから確認しました
- ノンスが有効であることを CB コールバックから確認しました
- API シークレット キーが正しいことを確認しました
https://coinbase.com/api/v1/buttons
私のテストは、いくつかの $params を使用した POST リクエストです。古いAPIメソッドを使用して機能しました。この新しい API メソッドで何が間違っているのかわかりません。
変更された Coinbase_Rpc::request メソッドは次のとおりです。
public function request($method, $url, $params)
{
if ($this->_apiKey === null) {
throw new Coinbase_ApiException("Invalid API key", 500, "An invalid API key was provided.");
}
$url = Coinbase::API_BASE . $url;
$nonce = (int)(microtime(true) * 100);
// Create query string
$queryString = http_build_query($params);
// Initialize CURL
$curl = curl_init();
$curlOpts = array();
// HTTP method
$method = strtolower($method);
if ($method == 'get') {
$curlOpts[CURLOPT_HTTPGET] = 1;
$url .= "?" . $queryString;
} else if ($method == 'post') {
$curlOpts[CURLOPT_POST] = 1;
$curlOpts[CURLOPT_POSTFIELDS] = $queryString;
} else if ($method == 'delete') {
$curlOpts[CURLOPT_CUSTOMREQUEST] = "DELETE";
$url .= "?" . $queryString;
} else if ($method == 'put') {
$curlOpts[CURLOPT_CUSTOMREQUEST] = "PUT";
$curlOpts[CURLOPT_POSTFIELDS] = $queryString;
}
// Headers
$headers = array(
'User-Agent: CoinbasePHP/v1',
'Accept: */*',
'Connection: close',
'Host: coinbase.com',
'ACCESS_KEY: ' . $this->_apiKey,
'ACCESS_NONCE: ' . $nonce,
'ACCESS_SIGNATURE: ' . hash_hmac("sha256", $nonce . $url, $this->_apiSecret)
);
// CURL options
$curlOpts[CURLOPT_URL] = $url;
$curlOpts[CURLOPT_HTTPHEADER] = $headers;
$curlOpts[CURLOPT_CAINFO] = dirname(__FILE__) . '/ca-coinbase.crt';
$curlOpts[CURLOPT_RETURNTRANSFER] = true;
// Do request
curl_setopt_array($curl, $curlOpts);
$response = $this->_requestor->doCurlRequest($curl);
// Decode response
try {
$json = json_decode($response['body']);
} catch (Exception $e) {
throw new Coinbase_ConnectionException("Invalid response body", $response['statusCode'], $response['body']);
}
if ($json === null) {
throw new Coinbase_ApiException("Invalid response body", $response['statusCode'], $response['body']);
}
if (isset($json->error)) {
throw new Coinbase_ApiException($json->error, $response['statusCode'], $response['body']);
} else if (isset($json->errors)) {
throw new Coinbase_ApiException(implode($json->errors, ', '), $response['statusCode'], $response['body']);
}
return $json;
}
何か案は?
編集: 上記は変更されていませんが、修正されており、完全な PHP Gem はこちらから入手できます: https://github.com/Luth/CoinbasePhpGem