Coinbase api React Native中的Coinbase API密钥身份验证

Coinbase api React Native中的Coinbase API密钥身份验证,coinbase-api,Coinbase Api,我能够从React Native连接到Coinbase公共API,没有任何问题。我正在尝试让API密钥验证正常工作。我认为我的代码看起来不错,但我遇到了一个401错误。我在Bittrex上也做了同样的事情,它毫无问题地工作了 我已经模拟了一段代码来说明这个问题 const key = 'XXXXXXXXXXXXXXXX' const secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; const passphase = 'PASSPHASE' const

我能够从React Native连接到Coinbase公共API,没有任何问题。我正在尝试让API密钥验证正常工作。我认为我的代码看起来不错,但我遇到了一个401错误。我在Bittrex上也做了同样的事情,它毫无问题地工作了

我已经模拟了一段代码来说明这个问题

const key = 'XXXXXXXXXXXXXXXX'
const secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const passphase = 'PASSPHASE'

const method = 'POST';
const timestamp = Date.now() / 1000;
const requestPath = '/orders';
const body = '';
const prehash = timestamp + method + requestPath + body;
const secretBase64 = Buffer(secret, 'base64');
const signed = CryptoJS.HmacSHA512(prehash, key);
const signedBase64 = new 
Buffer(signed.toString()).toString('base64');

axios
  .put(url, {
    timeout: axiosTimeout,
    headers: {
      'CB-ACCESS-KEY': key,
      'CB-ACCESS-SIGN': signedBase64,
      'CB-ACCESS-TIMESTAMP': timestamp,
      'CB-ACCESS-PASSPHRASE': passphrase
   },
   debug: true
 })
 .then(response => {
    console.log(response);
 })
   .catch(error => {
       console.log(error.message);
    });
});
我在Coinbase上创建了一个只读API密钥,权限为:wallet:orders:read

我使用CryptoJS而不是CryptoJS,但这不是一个问题,因为它适用于其他交换,如Bittrex。我将签名密码转换为Base64,但我认为问题可能出在这一行

在上面的示例中,我没有使用有效的密钥、机密或密码短语,但使用实际的密钥它不起作用


有人看到问题了吗

我一直在Coinbase上遵循这个示例:

我知道“crypto”和“crypto js”之间有一些区别

我认为应该是这样的:

const method = 'POST';
const timestamp = Date.now() / 1000;
const requestPath = url.replace(baseURL, '');
const body = JSON.stringify({
    price: '1.0',
    size: '1.0',
    side: 'buy',
    product_id: 'BTC-USD'
});
const prehash = timestamp + method + requestPath + body;
const keyBase64 = Buffer(secret, 'base64');
const signed = CryptoJS.HmacSHA512(prehash, secret).toString(CryptoJS.enc.Base64);

const headers = {
  'CB-ACCESS-KEY': keyBase64,
  'CB-ACCESS-SIGN': signed,
  'CB-ACCESS-TIMESTAMP': timestamp,
  'CB-ACCESS-PASSPHRASE': passphrase
}
中的预哈希('what')如下所示。。。 1554714678.037发布/订单{“价格”:“1.0”,“大小”:“1.0”,“侧面”:“购买”,“产品id”:“BTC-USD”}

Coinbase上的注释说密钥需要base64解码,但他们在示例中使用了秘密。它还表示,在添加到报头之前,负载需要进行base64编码。我认为我做的都是正确的,但仍然收到错误信息:


错误:请求失败,状态代码为401

当我在Coinbase上创建API密钥时,我拥有正确的权限。它提供了一代又一代的密钥和秘密。没有提到护照。我在文档和他们的代码示例中看到,他们提供了passphase,但这是做什么的,应该在Coinbase中定义在哪里。也许这就是问题所在


我已将此添加到codesandbox.io,以便更容易了解我在说什么

我一直在Coinbase上遵循这个示例:

我知道“crypto”和“crypto js”之间有一些区别

我认为应该是这样的:

const method = 'POST';
const timestamp = Date.now() / 1000;
const requestPath = url.replace(baseURL, '');
const body = JSON.stringify({
    price: '1.0',
    size: '1.0',
    side: 'buy',
    product_id: 'BTC-USD'
});
const prehash = timestamp + method + requestPath + body;
const keyBase64 = Buffer(secret, 'base64');
const signed = CryptoJS.HmacSHA512(prehash, secret).toString(CryptoJS.enc.Base64);

const headers = {
  'CB-ACCESS-KEY': keyBase64,
  'CB-ACCESS-SIGN': signed,
  'CB-ACCESS-TIMESTAMP': timestamp,
  'CB-ACCESS-PASSPHRASE': passphrase
}
中的预哈希('what')如下所示。。。 1554714678.037发布/订单{“价格”:“1.0”,“大小”:“1.0”,“侧面”:“购买”,“产品id”:“BTC-USD”}

Coinbase上的注释说密钥需要base64解码,但他们在示例中使用了秘密。它还表示,在添加到报头之前,负载需要进行base64编码。我认为我做的都是正确的,但仍然收到错误信息:


错误:请求失败,状态代码为401

当我在Coinbase上创建API密钥时,我拥有正确的权限。它提供了一代又一代的密钥和秘密。没有提到护照。我在文档和他们的代码示例中看到,他们提供了passphase,但这是做什么的,应该在Coinbase中定义在哪里。也许这就是问题所在


我已将此添加到codesandbox.io,以便更容易了解我在说什么

请将错误放在问题本身,而不是图像中。错误:请求失败,状态代码401I我已将其添加到codesandbox.io中,以便更容易了解我在说什么。。。请将错误放在问题本身,而不是图像中。错误:请求失败,状态代码401I我已将其添加到codesandbox.io中,以便更容易了解我在说什么。。。