Phía đối tác: Setup API

Phía đối tác: Setup API:

I.1B. TOKEN:

Định nghĩa: đối tác khởi tạo url và tạo user để cho VietQR đăng nhập vào và lấy bearer để thực hiện API gửi transaction-sync (thông báo thanh toán thành công) URL:

https://[domainkhách]/ vqr/api/token_generate

Authorization : BASIC User: đối tác khởi tạo cho VietQR Pass: đối tác khởi tạo cho VietQR

Output: GIẢI THÍCH: access_token: bearer token expires_in: 59s hiệu lực trong 59 giây

OUTPUT KHÁCH HÀNG PHẢI SET: {

"access_token": "eyJhbGciOiJIUzUxMiJ9.eyJhdXRob3JpdGllcyI6WyJST0xFX1VTRVIiXSwidXNlciI6IlkzVnpkRzl0WlhJdGJtRjJhWFJ5WVdOckxYVnpaWEl5TXpVdyIsImlhdCI6MTcxMzY2OTU0OCwiZXhwIjoxNzEzNjY5NjA3fQ.eAm351aXb9Bk_zEmJagboSN_Qv3NVUIM185qp01Upmw3wkV40q8B8R3Qp1QL4w3_3lWPy-ozzxDLSKClDHxsFQ",

"token_type": "Bearer",

"expires_in": 59

}

I.2B. Transaction-sync

Định nghĩa: Đối tác setup url để nhận thông báo thanh toán thành công và thông tin của giao dịch. VietQR sẽ thực hiện lấy Bearer => truyền API transactionsync

Đối tác thực hiện trả output như bên dưới nhằm mục đích thông báo rằng đối tác đã nhận được đầy đủ thông tin giao dịch => vietqr sẽ đánh dấu giao dịch thành công trên hệ thống để phục vụ API Check-order

URL: https://[domainkhách]/vqr/bank/api/transaction-sync AUTH : Bearer token (lấy từ API token)

Output trả lại VietQR sau khi nhận được thông tin thanh toán

OUTPUT TRẢ LẠI CHO VIETQR:

{

" error ": false,

"errorReason": "000",

"toastMessage":

"object": {

"reftransactionid": "360f6fb1-07ad-40bb-ba5e-52e7b282baa7"

}

}

GIẢI THÍCH:

Error : lỗi (false là không có lỗi xảy ra/ true là có lỗi xảy ra)

errorReason: mã lỗi

object trạng thái lỗi (nội dung, vị trí lỗi/ không có thì trả lại reftransactionid tự sinh ra )

reftransactionid chuỗi string được khách hàng lưu trữ và trả lại thông tin cho VietQR để đối soát

LƯU Ý: Việc bảo mật sẽ do 2 phía cùng thực hiện

II.CHI TIẾT THỰC HIỆN API PHÍA ĐỐI TÁC

1B. Đầu tiên phía đối tác thực hiện API lấy token “bearer” API 1B.

URL: http://112.78.1.220:8084/vqr/api/token_generate

METHOD: POST

USER: VIETQR CUNG CẤP PASS: VIETQR CUNG CẤP

EXAMPLE:

OUTPUT: {

"access_token": "eyJhbGciOiJIUzUxMiJ9.eyJhdXRob3JpdGllcyI6WyJST0xFX1VTRVIiXSwidXNlciI6IlkzVnpkRzl0WlhJdGJtRjJhWFJ5WVdOckxYVnpaWEl5TXpVdyIsImlhdCI6MTcxMzY2OTU0OCwiZXhwIjoxNzEzNjY5NjA3fQ.eAm351aXb9Bk_zEmJagboSN_Qv3NVUIM185qp01Upmw3wkV40q8B8R3Qp1QL4w3_3lWPy-ozzxDLSKClDHxsFQ",

"token_type": "Bearer",

"expires_in": 59

}

Lưu ý: Đối tác cần setup trước API này và cung cấp cho VietQR để VietQR có thể lấy được mã Bearer làm định danh, sau đó cấp lại tài khoản cho đối tác thực hiện API

2B. Sau khi có được bearer token sử dụng bearer token để thực thi API tạo QR code (API 2B)

Giải thích: Khi có một đơn hàng, yêu cầu thanh toán thì đối tác thực hiện API này để tạo mã QR, mã QR được trả lại output sẽ là chuỗi String

Khách hàng sử dụng thư viện chuyển đổi từ String (text) thành hình ảnh QR code sau đó hiển thị ra cho người dùng thanh toán.

URL: http://112.78.1.220:8084/vqr/api/qr/generate-customer METHOD: POST

AUTH:

Bearer Token lấy từ API get Token (API 1B) Content-Type: Application/json (Định dạng dữ liệu trả về mặc định)

INPUT:

{

"bankAccount": "045416688",

"userBankName": "DO DANG DUNG",

"bankCode": "MB",

"amount": 10000,

"content": "19char",

"transType": "C",

"orderId": "13char",

"urlLink": "https://............./?orderid=123456",

"terminalcode": "",

"sign": ""

}

dòng 1 số tài khoản ngân hàng thụ hưởng

dòng 2 tên chủ tài khoản

dòng 3 bankcode mã ngân hàng

dòng 4 số tiền (long)

dòng 5 nội dung (không dấu, không kí tự đặc biệt, tối đa 19 kí tự)

dòng 6 trạng thái (C có + / D nợ -)

dòng 7 orderid bên đối tác tự sinh tối đa 13 kí tự

dòng 8 Urlink KH cung cấp url back lại sau khi thanh toán thành công 3s.

dòng 9 Terminalcode là mã định danh điểm bán được khởi tạo trên app vietqr

dòng 10 chữ kí (có thể bỏ qua)

Lưu ý: Tất cả đều phải truyền, nếu không có thông tin thì để rỗng ""

THÔNG TIN BIẾN/ ĐỊNH DẠNG

bankAccount : (String)

userBankName : (String)

bankCode :(String)

amount : (Long)

content: (String)

transType: (String)

orderId: (String)

urLlink: (String)

terminalcode: (String)

sign: (String)

OUT PUT VIETQR TRẢ: {

"bankCode": "MB",

"bankName": "Ngân hàng TMCP Quân đội",

"bankAccount": "045416688",

"userBankName": "DO DANG DUNG",

"amount": "10000",

"content": "VQR664712cff7 19char",

"qrCode": "00020101021138530010A0000007270123000697042201090454166880208QRIBFTTA53037045405100005802VN62240820VQR664712cff7 19char63042B39",

"imgId": "58b7190b-a294-4b14-968f-cd365593893e",

"existing": 1,

"transactionId": "",

"transactionRefId": "ZmFiZTU2NjQtMjZjZi00MTEzLWIwOWEtNTAyNWQwNmRiM2Y1",

"qrLink": "https://vietqr.vn/test/qr-generated?token=ZmFiZTU2NjQtMjZjZi00MTEzLWIwOWEtNTAyNWQwNmRiM2Y1",

"terminalCode": null

}

THÔNG TIN BIẾN/ ĐỊNH DẠNG - các biến có thông tin như trên: - khác:

+ Content: trường này trả ra sẽ đi kèm theo mã đối soát của VietQR VQR…………(khi sử dụng API test/transaction-callback thì yêu cầu nội dung của API QR trả về - output)

+ qrCode: trường này trả ra string, đối tác sử dụng để render mã QR

+ transactionId : là id giao dịch được VietQR ghi lại và thông báo cho đối tác để lưu trữ và đối soát (ở api transaction-sync sẽ đối tác sẽ làm căn cứ để trả lại retransactionId)

+ qrLink : là weblink thanh toán của vietqr. Hỗ trợ khách hang trong việc thanh toán mà không cần sử dụng đến việc tạo QR cho khách hang quét, VietQR sẽ làm thay điều đó (urLlink sẽ là đường dẫn mà đối tác muốn back lại sau khi khách hàng đã thanh toán thành công ở weblink vietqr 3 giây)

+ terminalcode : là mã định danh của cửa hang, chi nhánh, phân loại đối tác, phân loại giao dịch khi đối tác muốn phân loại khách hang có thể dung case này để thực hiện filter giao dịch

LƯU Ý: nội dung giới hạn không vượt quá 19 kí tự - ordered không vượt quá 13 kí tự - terminalcode đăng kí không vượt quá 20 kí tự

3B. THỰC HIỆN TEST API CALLBACK

ĐỊNH NGHĨA: Đối tác sẽ thực hiện API testcallback sau khi tạo mã QR thành công, API này được sử dụng để giả định giao dịch thành công và gửi về địa chỉ API mà đối tác đã cung cấp trước đó ở phần (I.)

Khi gửi các thông tin này, vietqr sẽ xử lí kiểm tra giao dịch có tồn tại trên hệ thống UAT của khách hàng hay không, sau đó gửi API 2A.

LUỒNG HOẠT ĐỘNG:

ĐỐI TÁC GỬI API TEST CALLBACK => URL TEST CALLBACK => VIETQR THỰC HIỆN KIỂM TRA THÔNG TIN INPUT CỦA ĐỐI TÁC => NẾU CÓ THỰC HIỆN LỆNH GỬI API VÀO URL CỦA ĐỐI TÁC THEO TÀI LIỆU API 2A(VIETQR THỰC HIỆN)=> ĐỐI TÁC TRẢ LẠI OUTPUT CHO VIETQR ĐỂ ĐÁNH DẤU XÁC NHẬN ĐÃ NHẬN ĐƯỢC THÔNG TIN GIAO DỊCH (CALLBACK)

URL: http://112.78.1.220:8084/vqr/bank/api/test/transaction-callback

AUTH: bearer token lấy từ API 1B

INPUT:

{

"bankAccount": "045416688",

"content": "CONTENT LẤY TỪ OUTPUT API 2B",

"amount": 10000,

"transType": "C"

}

LƯU Ý: content lấy từ API 2B

OUTPUT khi giao dịch đã được gửi thành công và nhận lại được kết quả của khách API 2B:

{

"status": "SUCCESS",

"Message": "",

}

OUTPUT khi giao dịch không thành công:

{

"status": "FAILED",

"message": "E77"

}

GIẢI THÍCH:

Lỗi được trả ra khi mà khách hàng setup api [I.2B. Transaction-sync] chưa đúng. VietQR thực hiện API 2A nhưng không thành công, thì output của API 2A chính là mã lỗi ["message": "E77"]

4B. Checkorder

Định nghĩa: Thực hiện khi đã nhận được thông tin giao dịch hoặc chưa nhận được thông tin giao dịch từ API 2A mà vietqr gửi đi. Ngay lúc này thực hiện API checkorder để tìm kiếm giao dịch, truy vấn giao dịch

Truy vấn giao dịch bằng orderid đã nhập khi tạo QR API 2B Hoặc truy vấn bằng referenceNumber mà khách hang cung cấp

Tại sao lại là

referenceNumber do khách hàng cung cấp?

  • Khi giao dịch xảy ra sẽ có 2 case: + nhận được giao dịch sẽ có cả orderid và referenceNumber. + Đối tác không nhận được giao dịch thì không có gì, chỉ dựa vào orderid mà đã tạo ở API 2B để truy vấn hoặc yêu cầu người chuyển cung cấp mã refrencenumber để thực hiện truy vấn.

  • Khi đối tác không nhận được thông tin giao dịch (callback) thường là do khách hang đã sửa đổi nội dung, số tiền khi thanh toán quét QR, dẫn đến QR đó không còn hiệu lực và biến thành giao dịch chuyển khoản thông thường, không còn là giao dịch được tạo ra bởi API nữa.

Thưc thi API

URL: http://112.78.1.220:8084/vqr/api/transactions/check-order

AUTH: Bearer lấy từ AOI 1B

INPUT:

{

"bankAccount": "045416688",

"type": 0,

"value": "orderId123456",

"checkSum": ""

}

GIẢI THÍCH CHI TIẾT

API này để khách hàng thực hiện kiểm tra giao dịch khi vượt quá thời gian nhận callback nhưng chưa thấy VietQR trả thông tin thanh toán,

Thì thực hiện API này. Mấu chốt ở

"orderId" khách hàng đã tạo QR.

Khi gửi orderid này thì khách hàng sẽ nhận được thông tin của giao dịch.

Nếu không thực hiện được thì yêu cầu người thanh toán cung cấp Refrenumber.

sau đó sử dụng API để kiểm tra xem giao dịch có tồn tại trên hệ thống VietQR hay không

input

{

"bankAccount": "045416688",

"type": 0,

"value": "orderId123456",

"checkSum": ""

}

bankAccount

Số tài khoản ngân hàng

string

type

Phân loại check:

- 0: check bằng orderId

- 1: check bằng referenceNumber

int*

value

Giá trị check (giá trị orderId hoặc referenceNumber)

String

checkSum

Chuỗi String mã hoá MD5 (bankAccount + accessKey)

* Lưu ý: accessKey là username mà khách hàng được cung cấp để gọi API get Token.

String

Out put trả ra:

amount Số tiền long

transType (stirng)

“C”: GD ghi có

“D”: GD ghi nợ

orderId (stirng)

Mã hoá đơn

referenceNumber (stirng)

Mã giao dịch

III. VIETQR THỰC HIỆN API

ĐỊNH NGHĨA: VIETQR thực hiện api khi và chỉ khi nhận được callback từ ngân hàng về thông tin thanh toán qua API 2B khách hàng đã tạo

LUỒNG THỰC HIỆN: VietQR sẽ lấy token bearer của đối tác đã cung cấp => lấy bearer làm AUTH cho API truyền thông tin thanh toán (transaction-sync)

1A. Lấy token từ phía đối tác cung cấp theo I1B. Token

URL: https://[domainkhách]/ vqr/api/token_generate (do đối tác cung cấp)

Authorization : BASIC User: đối tác khởi tạo cho VietQR Pass: đối tác khởi tạo cho VietQR

Output: bearer token

OUTPUT vietqr nhận được: {

"access_token": "eyJhbGciOiJIUzUxMiJ9.eyJhdXRob3JpdGllcyI6WyJST0xFX1VTRVIiXSwidXNlciI6IlkzVnpkRzl0WlhJdGJtRjJhWFJ5WVdOckxYVnpaWEl5TXpVdyIsImlhdCI6MTcxMzY2OTU0OCwiZXhwIjoxNzEzNjY5NjA3fQ.eAm351aXb9Bk_zEmJagboSN_Qv3NVUIM185qp01Upmw3wkV40q8B8R3Qp1QL4w3_3lWPy-ozzxDLSKClDHxsFQ",

"token_type": "Bearer",

"expires_in": 59

}

2.A Gửi Transaction-sync (callback – thông tin giao dịch)

URL: https://[domainkhách]/vqr/bank/api/transaction-sync (đối tác cung cấp theo I.2B) AUTH : Bearer token (lấy từ API token)

INPUT (THÔNG TIN VIETQR GỬI)

{

"transactionid": "",

"transactiontime": 111,

"referencenumber": "1122",

"amount": 20000,

"content": "VQRfbf5db9a7c.test14",

"bankaccount": "045416688",

"transType": "C",

"orderId": "123456"

}

Khi đối tác nhận được thì phải set respon lại cho vietqr để đánh dấu là giao dịch đã thành công => vietqr đã gửi api đi => đối tác nhận thành công callback => vietqr đánh dấu giao dịch thành công. Phục vụ cho API 4B. checkorder

Output khách hàng phải set như mục [I.2B. Transaction-sync]

Last updated