HMAC-SHA512
Toutes les requetes transactionnelles (cash-out, cash-in, refund) exigent une signature HMAC-SHA512 pour garantir l'integrite et l'authenticite.
Fonctionnement
- Serialisez le body de la requete en JSON
- Generez la signature HMAC-SHA512 en utilisant votre
client_secretcomme cle - Envoyez la signature dans l'en-tete
hmac
En-tetes Obligatoires
| En-tete | Valeur |
|---|---|
Authorization | Bearer {access_token} |
Content-Type | application/json |
hmac | Signature HMAC-SHA512 en hexadecimal |
Exemples
JavaScript (Node.js)
javascript
const crypto = require('crypto');
const body = JSON.stringify({
amount: 10000,
pix_key: "12345678901",
description: "Paiement"
});
const hmac = crypto
.createHmac('sha512', 'votre-api-key-secret')
.update(body)
.digest('hex');
// Envoyer comme en-tete : hmac: {valeur}Python
python
import hmac
import hashlib
import json
body = json.dumps({
"amount": 10000,
"pix_key": "12345678901",
"description": "Paiement"
})
signature = hmac.new(
b"votre-api-key-secret",
body.encode("utf-8"),
hashlib.sha512
).hexdigest()PHP
php
$body = json_encode([
'amount' => 10000,
'pix_key' => '12345678901',
'description' => 'Paiement'
]);
$hmac = hash_hmac('sha512', $body, 'votre-api-key-secret');Java
java
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
String body = "{\"amount\":10000,\"pix_key\":\"12345678901\",\"description\":\"Paiement\"}";
String secret = "votre-api-key-secret";
Mac mac = Mac.getInstance("HmacSHA512");
SecretKeySpec keySpec = new SecretKeySpec(secret.getBytes(), "HmacSHA512");
mac.init(keySpec);
byte[] hash = mac.doFinal(body.getBytes());
StringBuilder sb = new StringBuilder();
for (byte b : hash) {
sb.append(String.format("%02x", b));
}
String hmac = sb.toString();C#
csharp
using System.Security.Cryptography;
using System.Text;
var body = "{\"amount\":10000,\"pix_key\":\"12345678901\",\"description\":\"Paiement\"}";
var secret = Encoding.UTF8.GetBytes("votre-api-key-secret");
using var hmacSha512 = new HMACSHA512(secret);
var hash = hmacSha512.ComputeHash(Encoding.UTF8.GetBytes(body));
var hmac = BitConverter.ToString(hash).Replace("-", "").ToLower();Bash (curl)
bash
BODY='{"amount":10000,"pix_key":"12345678901","description":"Paiement"}'
SECRET="votre-api-key-secret"
HMAC=$(echo -n "$BODY" | openssl dgst -sha512 -hmac "$SECRET" | awk '{print $2}')
curl -X POST https://api.owem.com.br/api/v2/external/pix/cash-out \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "hmac: $HMAC" \
-d "$BODY"Validation
L'API valide le HMAC recu par rapport au body de la requete. Si la signature ne correspond pas :
json
{
"worked": false,
"detail": "HMAC invalide"
}Important
- Utilisez le body exactement tel qu'envoye dans la requete (meme serialisation JSON)
- Le
client_secretde l'API Key est la cle HMAC - La signature doit etre en format hexadecimal en minuscules