HMAC Signatures
Để đảm bảo tính xác thực và toàn vẹn dữ liệu, Fundiin yêu cầu các platform request và callback được ký. Chữ ký này dựa trên HMAC (Hash-based Message Authentication Code), được tính bằng request body và secret key chỉ bạn và Fundiin biết.
Chữ ký
Trư ớc khi gửi một yêu cầu tới Fundiin, bạn cần tạo chữ ký và gán vào header. Khi Fundiin nhận được yêu cầu, chữ ký cũng được tạo bằng cách sử dụng request body và secret key, được lưu trữ trên phía Fundiin. Bằng cách xác minh rằng cả hai chữ ký là giống nhau, Fundiin có thể đảm bảo yêu cầu là từ đối tác và không bị sửa đổi trong quá trình truyền tải.
Xác minh callback
Bạn cũng có thể xác minh callback nhận từ Fundiin bằng cách tạo chữ ký tương ứng và so sánh với chữ ký trong header. Việc này giúp xác nhận callback được gửi bởi Fundiin và không bị sửa đổi trong quá trình truyền tải.
Signature Generator
Dùng tool này để tạo chữ ký HMAC SHA-256 của Fundiin từ raw request body cho merchant APIs hoặc lender webhooks.
Tạo HMAC SHA-256 signature
Dán raw request body đúng như body sẽ gửi đi. Fundiin ký raw text, nên whitespace và thứ tự field đều ảnh hưởng signature.
e13b8e7a619dc37b065714a69fe46157da30e9d67d7db51f86114f84ad6067e8Tạo Chữ ký
Fundiin sử dụng thuật toán HMAC SHA-256 để tạo chữ ký
signature = HMAC(algorihtm, secretKey, body)
With:
- algorithm: Thuật toán bảo mật. Giá trị mặc định của thuật toán được sử dụng là
HMAC SHA-256. - secretKey: Key được cung cấp bởi Fundiin trong quá trình đăng ký.
- body: Dữ liệu được sử dụng để tạo chữ ký
Vui lòng đảm bảo thực hiện quá trình tạo chữ ký này chính xác để đảm bảo việc giao tiếp với API của Fundiin là an toàn và xác thực.
Chữ ký HMAC SHA-256 được tạo bằng cách sử dụng request body và secret key được cung cấp, sau đó được mã hóa dưới định dạng hexa.
Cách tạo chữ ký HMAC SHA-256 cho các ngôn ngữ lập trình thông dụng:
- Java
- Node
- .NET
- PHP
- PYTHON
- GO
- RUBY
- PERL
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class SignatureGenerator {
public static String generateHmacSHA256Signature(String secretKey, String data) {
try {
Mac hmacSHA256 = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(), "HmacSHA256");
hmacSHA256.init(secretKeySpec);
byte[] hash = hmacSHA256.doFinal(data.getBytes());
StringBuilder result = new StringBuilder();
for (byte b : hash) {
result.append(String.format("%02x", b));
}
return result.toString();
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
e.printStackTrace();
return null;
}
}
}
const crypto = require('crypto');
function generateHmacSHA256Signature(secretKey, data) {
const hmac = crypto.createHmac('sha256', secretKey);
hmac.update(data);
return hmac.digest('hex');
}
using System;
using System.Security.Cryptography;
using System.Text;
public class SignatureGenerator
{
public static string GenerateHmacSHA256Signature(string secretKey, string data)
{
byte[] keyBytes = Encoding.UTF8.GetBytes(secretKey);
byte[] dataBytes = Encoding.UTF8.GetBytes(data);
using (var hmacSHA256 = new HMACSHA256(keyBytes))
{
byte[] hashBytes = hmacSHA256.ComputeHash(dataBytes);
StringBuilder result = new StringBuilder();
foreach (byte b in hashBytes)
{
result.Append(b.ToString("x2"));
}
return result.ToString();
}
}
}
function generateHmacSHA256Signature($secretKey, $data)
{
$hash = hash_hmac('sha256', $data, $secretKey, true);
return bin2hex($hash);
}
import hashlib
import hmac
def generate_hmac_sha256_signature(secret_key, data):
message = data.encode('utf-8')
secret = secret_key.encode('utf-8')
signature = hmac.new(secret, message, hashlib.sha256)
return signature.hexdigest()
package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
"fmt"
)
func generateHmacSHA256Signature(secretKey, data string) string {
key := []byte(secretKey)
message := []byte(data)
hmacSHA256 := hmac.New(sha256.New, key)
hmacSHA256.Write(message)
hash := hmacSHA256.Sum(nil)
return hex.EncodeToString(hash)
}
require 'openssl'
def generate_hmac_sha256_signature(secret_key, data)
hmac = OpenSSL::HMAC.hexdigest('sha256', secret_key, data)
end
use Digest::SHA qw(hmac_sha256_hex);
sub generate_hmac_sha256_signature {
my ($secret_key, $data) = @_;
my $signature = hmac_sha256_hex($data, $secret_key);
return $signature;
}