Hướng Dẫn Tích Hợp API KCB M-PESA STK Push
KCB BUNI M-PESA STK Push cho phép bạn khởi tạo yêu cầu thanh toán trực tiếp đến điện thoại của khách hàng. KCB cung cấp một API bảo mật giúp các doanh nghiệp và nhà phát triển thu thập thanh toán từ khách hàng một cách dễ dàng. Hướng dẫn này sẽ giúp bạn qua các bước xác thực, gửi yêu cầu STK Push, xử lý callback và hiểu các phản hồi có thể xảy ra.
Mục Lục
- Xác Thực và Tạo Token
- Khởi Tạo Yêu Cầu STK Push
- Phản Hồi Thành Công
- Callback Response
- Các Phản Hồi Lỗi Có Thể Xảy Ra
- Điều Kiện Đi Live
- Thực Hành Tốt Nhất
- Câu Hỏi Thường Gặp
1. Xác Thực và Tạo Token
Trước khi thực hiện bất kỳ yêu cầu API nào, bạn cần xác thực bằng Consumer Key và Consumer Secret mà bạn nhận được trong quá trình đăng ký.
Endpoint:
POST https://uat.buni.kcbgroup.com/token?grant_type=client_credentials
Headers:
Authorization: Basic {Base64(consumerKey:consumerSecret)}
Ví dụ Yêu cầu:
curl --location --request POST 'https://uat.buni.kcbgroup.com/token?grant_type=client_credentials' \
--header 'Authorization: Basic XENo...ZTdh' \
--data ''
Phản Hồi Thành Công:
{
"access_token": "eyJ4NyRqV5xTbuwcwdi7...",
"token_type": "Bearer",
"expires_in": 3599
}
Tham Số Token
| Tên | Loại | Bắt Buộc | Mô Tả |
|---|---|---|---|
| access_token | String | Có | Token bạn sẽ sử dụng trong tất cả các yêu cầu API tiếp theo dưới dạng Bearer token. |
| token_type | String | Có | Luôn là "Bearer". |
| expires_in | Số | Có | Thời gian tính bằng giây trước khi token hết hạn (thường là 3600 giây = 1 giờ). |
2. Khởi Tạo Yêu Cầu STK Push
Khi bạn đã có token, bạn có thể bắt đầu một yêu cầu STK Push.
Endpoint:
POST https://uat.buni.kcbgroup.com/mm/api/request/1.0.0/stkpush
Headers:
Authorization: Bearer {access_token}
Content-Type: application/json
Ví dụ Yêu Cầu:
{
"phoneNumber": "254708920430",
"amount": "1",
"invoiceNumber": "1123412831049",
"sharedShortCode": true,
"orgShortCode": "522522",
"orgPassKey": "",
"callbackUrl": "https://example.com/callback",
"transactionDescription": "thanh toán học phí"
}
Tham Số Yêu Cầu
| Tên | Loại | Bắt Buộc | Mô Tả |
|---|---|---|---|
| phoneNumber | String | Có | Số điện thoại của khách hàng ở định dạng 2547XXXXXXXX mà STK Push sẽ được gửi đến. |
| amount | String | Có | Số tiền thanh toán bằng Shilling Kenya (KES). |
| invoiceNumber | String | Không | Tham chiếu hóa đơn duy nhất cho hệ thống của bạn. |
| sharedShortCode | Boolean | Có | Cho biết có sử dụng mã ngắn chia sẻ hay không. |
| orgShortCode | String | Không | Số Paybill hoặc Till được chỉ định cho tổ chức của bạn. |
| orgPassKey | String | Không | Mã khóa duy nhất cho tổ chức được KCB chỉ định. |
| callbackUrl | String | Có | Endpoint máy chủ của bạn nơi kết quả thanh toán sẽ được gửi (phải là HTTPS). |
| transactionDescription | String | Không | Mô tả ngắn gọn về giao dịch. |
3. Phản Hồi Thành Công
Nếu yêu cầu hợp lệ, bạn sẽ nhận được phản hồi sau:
{
"response": {
"MerchantRequestID": "0c43-471f-b0cb-f80bcaee5e9e242149",
"ResponseCode": "0",
"CustomerMessage": "Thành công. Yêu cầu đã được chấp nhận để xử lý",
"CheckoutRequestID": "ws_CO_17092025150413517708920430",
"ResponseDescription": "Thành công. Yêu cầu đã được chấp nhận để xử lý"
},
"header": {
"statusDescription": "Thành công. Yêu cầu đã được chấp nhận để xử lý",
"statusCode": "0"
}
}
Tham Số Phản Hồi
| Tên | Loại | Mô Tả |
|---|---|---|
| MerchantRequestID | String | ID duy nhất cho yêu cầu được tạo bởi API. |
| CheckoutRequestID | String | ID giao dịch duy nhất để theo dõi thanh toán. |
| ResponseCode | String | 0 nghĩa là yêu cầu đã được chấp nhận; giá trị khác không là lỗi. |
| CustomerMessage | String | Thông điệp hiển thị cho khách hàng xác nhận yêu cầu đã được chấp nhận. |
| ResponseDescription | String | Thông tin chi tiết hơn về trạng thái phản hồi. |
| statusCode | String | Mã trạng thái API (0 = thành công). |
| statusDescription | String | Mô tả trạng thái dễ hiểu. |
4. Callback Response
Khi khách hàng nhập PIN và hoàn tất giao dịch, API sẽ gửi callback đến callbackUrl mà bạn đã chỉ định.
Ví dụ Payload Callback:
{
"Body": {
"stkCallback": {
"MerchantRequestID": "0c43-471f-b0cb-f80bcaee5e9e242149",
"CheckoutRequestID": "ws_CO_17092025150413517708920430",
"ResultCode": 0,
"ResultDesc": "Yêu cầu dịch vụ đã được xử lý thành công.",
"CallbackMetadata": {
"Item": [
{"Name": "Amount", "Value": 1},
{"Name": "MpesaReceiptNumber", "Value": "TIH8BED1K4"},
{"Name": "Balance"},
{"Name": "TransactionDate", "Value": 20250917150425},
{"Name": "PhoneNumber", "Value": 254708920430}
]
}
}
}
}
Tham Số Callback
| Tên | Loại | Mô Tả |
|---|---|---|
| ResultCode | Số | 0 = Thành công, mã khác chỉ ra lý do thất bại. |
| ResultDesc | String | Mô tả kết quả giao dịch. |
| Amount | Số | Số tiền khách hàng đã thanh toán. |
| MpesaReceiptNumber | String | ID giao dịch M-PESA. |
| TransactionDate | Số | Ngày và giờ giao dịch theo định dạng YYYYMMDDHHMMSS. |
| PhoneNumber | Số | Số điện thoại của khách hàng đã thực hiện thanh toán. |
5. Các Phản Hồi Lỗi Có Thể Xảy Ra
| Ví dụ Lỗi | Mô Tả |
|---|---|
{ "fault": { "code": 900901, "message": "Invalid Credentials", "description": "Invalid token" }} |
Token cung cấp không hợp lệ. |
{ "fault": { "code": 900902, "message": "Missing Credentials", "description": "Provide credentials" }} |
Không cung cấp thông tin xác thực. |
{ "response": {}, "header": { "statusDescription": "Bad Request - Invalid Remarks", "statusCode": "1" }} |
Thiếu hoặc không hợp lệ một số tham số. |
Thành công: ResponseCode: "0" |
Yêu cầu đã được chấp nhận; chờ callback. |
6. Điều Kiện Đi Live
Để đi live:
- Mẫu thư yêu cầu chính thức cần thiết để đi live
- Điền và nộp một thư yêu cầu đã ký tới buni@kcbgroup.com
- Đối với bất kỳ câu hỏi và hỗ trợ nào khác, hãy liên hệ với buni@kcbgroup.com
7. Thực Hành Tốt Nhất
- Kiểm Tra Lỗi: Luôn kiểm tra phản hồi từ API và xử lý lỗi một cách thích hợp.
- Bảo Mật: Giữ bí mật các thông tin xác thực và không công khai chúng.
- Thời Gian Xử Lý: Đảm bảo rằng bạn có một cơ chế cho phép xử lý thời gian trễ trong giao dịch.
8. Câu Hỏi Thường Gặp
1. API KCB M-PESA STK Push là gì?
KCB M-PESA STK Push là một API cho phép bạn gửi yêu cầu thanh toán đến điện thoại của khách hàng thông qua dịch vụ M-PESA.
2. Tôi cần thông tin gì để sử dụng API?
Bạn cần Consumer Key và Consumer Secret từ KCB để xác thực.
3. Làm thế nào để xử lý callback từ API?
Bạn cần thiết lập một endpoint mà API có thể gửi thông tin callback đến, và xử lý dữ liệu trong payload callback.
4. Những lỗi phổ biến khi tích hợp API là gì?
Một số lỗi phổ biến bao gồm thông tin xác thực không hợp lệ, thiếu tham số, và thời gian phản hồi quá lâu.
Nếu bạn cần bất kỳ sự trợ giúp nào liên quan đến tích hợp thanh toán, hãy liên hệ với chúng tôi!
Chúc bạn lập trình vui vẻ!