2017-08-18 1 views
0

J'essaie d'utiliser R pour envoyer une demande cryptée à un API.POST requête cryptée avec le corps JSON sur R

Spécifiquement la demande /v3/orders/.

Il nécessite l'utilisation d'une API key et secret, ainsi qu'une augmentation de nonce.

En utilisant openssl, jsonlite et httr bibliothèques:

Le corps doit être JSON codé:

book<-"btc_eth" 
side<-"sell" 
major<-"0.1" 
price<-"100" 
type<-"limit" 

Payload<-toJSON(data.frame(book=book,side=side,major=major,price=price,type=type)) 

Il exige également un en-tête d'autorisation construite avec un SHA256 crypté signature.

N<-NONCE() # "1503033312" 

method<-"POST" 

Path<-"/v3/orders/" 

Signature<-sha256(paste0(N,method,Path,Payload),secret) 

header<-paste0("Bitso ",key,":",N,":",Signature) 

Enfin, la demande devrait ressembler à ceci:

url<-"https://api.bitso.com/v3/orders/" 

r<-POST(url, body = Payload, add_headers(Authorization=header)) 

Je suis en mesure d'afficher les demandes avec une charge utile vide à cette API avant, mais cet appel envoie une erreur non prise en charge de type de média, quelque chose au sujet de la comme je suis codage JSON le paylod provoque cela.

Il existe des exemples Ruby et PHP sur la façon de placer cette demande here.

Répondre

0

Alors, j'ai finalement été en mesure d'envoyer la demande.

Je dois remercier Colin Fay pour sa réponse sur la façon d'éliminer les crochets.

La chose était, l'en-tête devait être construit avec le corps sans crochets JSON, mais le corps a dû être envoyé comme une liste avec le codage JSON automatique de la manière suivante:

NC<-NONCE() 

mthd<-"POST" 

Pyld<- toJSON(data.frame(book=book,side=side,major=major,price=price,type=type)) 

Pyld <- gsub("\\[|\\]", "", Pyld) 

body<-list(book=book,side=side,major=major,price=price,type=type) 

url<-"https://api.bitso.com/v3/orders/" 

Pth<-"/v3/orders/" 

hdr<-paste0("Bitso ",ky,":",NC,":",sha256(paste0(NC,mthd,Pth,Pyld),scrt)) 

r<-POST(url, body = body, add_headers(Authorization=hdr),encode="json",verbose()) 
0

Comme je n'ai pas de clé à essayer, ceci est une réponse d'un cas auquel je devais faire face - vous pourriez vouloir changer un peu votre appel JSON. toJSON met un support de chaque côté de votre appel. Donc, vous devez les supprimer:

# Go from 
Payload<- jsonlite::toJSON(data.frame(book=book,side=side,major=major,price=price,type=type)) 
Payload 
[{"book":"btc_eth","side":"sell","major":"0.1","price":"100","type":"limit"}] 

# To 
Payload <- gsub("\\[|\\]", "", Payload) 
Payload 
{"book":"btc_eth","side":"sell","major":"0.1","price":"100","type":"limit"} 

Laissez-moi savoir si cela fonctionne,

Best,

Colin

+0

j'ai pu poster ma demande , enlever les crochets était crucial. Nous vous remercions de votre aide. J'ai répondu à ma propre question. –