1️⃣API Get Token
API này cho phép đối tác cấp quyền truy cập để VietQR có thể kết nối và đồng bộ dữ liệu với API Transaction Sync (đồng bộ biến động số dư). Để cấp quyền, đối tác cần cấu hình và tạo điểm nhận dữ liệu
2.1 POST
Get Token
2.1 POST
Get Tokenhttps://<your-host>/<your-basepath>/api/token_generate
Headers
Content-Type
application/json
Authorization
Basic Authentication: Base64[username:password
]
username
và password
của API này sẽ do bạn định nghĩa và cung cấp cho VietQR.
Body
access_token
String
Yes
Là Bearer Token do đối tác cung cấp.
token_type
String
Yes
Là dạng token dạng “Bearer”.
expires_in
String
Yes
Thời gian hết hạn của token.
Response
{
"access_token": "bearer_token",
"token_type": "Bearer",
"expires_in": 300
}
2.2 - Code cài đặt
Test với Posmant :
curl --location --request POST 'https://uat8.thuythu.vn/mrtao/wp-json/tt-vietqr/api/token_generate' \ --header 'Authorization: Basic dGFpcGhpbTRrOjYxZTU1ZmU0LTBhNjMtNGU4Zi1hZDgyLTBlNjFiYzk4M\mRlNA=='
namespace YourNamespace.Controllers
{
[Route("vqr/api")]
[ApiController]
public class TokenController : ControllerBase
{
private const string VALID_USERNAME = "customer-vietqrtest-user2468";
private const string VALID_PASSWORD = "Y3VzdG9tZXItdmlldHFydGVzdC11c2VyMjQ2ODpZM1Z6ZEc5dFpYSXRkbWxsZEhGeWRHVnpkQzExYzJWeU1qUTJPQT09"; // Base64 của username:password
private const string SECRET_KEY = "your-256-bit-secret"; // Bí mật để ký JWT token
[HttpPost("token_generate")]
public IActionResult GenerateToken([FromHeader] string Authorization)
{
// Kiểm tra Authorization header
if (string.IsNullOrEmpty(Authorization) || !Authorization.StartsWith("Basic "))
{
return BadRequest("Authorization header is missing or invalid");
}
// Giải mã Base64
var base64Credentials = Authorization.Substring("Basic ".Length).Trim();
var credentials = Encoding.UTF8.GetString(Convert.FromBase64String(base64Credentials));
var values = credentials.Split(':', 2);
if (values.Length != 2)
{
return BadRequest("Invalid Authorization header format");
}
var username = values[0];
var password = values[1];
// Kiểm tra username và password
if (username == VALID_USERNAME && password == VALID_PASSWORD)
{
var token = GenerateJwtToken(username);
return Ok(new
{
access_token = token,
token_type = "Bearer",
expires_in = 300 // Thời gian hết hạn token
});
}
else
{
return Unauthorized("Invalid credentials");
}
}
// Hàm tạo JWT token
private string GenerateJwtToken(string username)
{
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(SECRET_KEY);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.Name, username)
}),
Expires = DateTime.UtcNow.AddMinutes(5), // Token hết hạn sau 5 phút
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha512Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
return tokenHandler.WriteToken(token);
}
}
}
// Đây là Sample Code mang tính chất tham khảo