Nhật ký thay đổi
Tháng 9 năm 2026
Ngày 10 tháng 9
Biểu mẫu HTML giờ gửi container đã ký. Thay cho các trường hóa đơn riêng lẻ — data (base64url của JSON) và signature (HMAC-SHA256 của chuỗi data). Endpoint đổi từ invoices/createFromForm thành invoices/form. Các biểu mẫu cũ không còn hoạt động và phải được dựng lại: xem Chữ ký biểu mẫu HTML.
Ngày 8 tháng 9
Các trường số trong phần thân webhook giờ là số. Sáu trường trước đây gửi dưới dạng chuỗi giờ gửi dưới dạng số: project.commissionRate, invoice.commissionFiatUSD, invoice.amountFiatUSD, invoice.amountFiat, invoice.calcAmountFiat, payment.amount. Tập hợp các trường, tên và thứ tự của chúng không thay đổi.
Lưu ý: các số 0 cuối bị lược bỏ, nên số tiền 10.00 đến dưới dạng 10. Số tiền dưới 0.0001 đến ở dạng lũy thừa, ví dụ 1.0e-6 — phân tích JSON chuẩn trả về đúng con số; chỉ tự phân tích chuỗi thủ công mới hỏng.
Các thông báo tạo trước khi triển khai và chưa được gửi sẽ đến theo định dạng cũ. Bên nhận phải chấp nhận cả hai biến thể cho đến khi hàng đợi cạn — việc này mất không quá hai ngày.
Ngày 6 tháng 9
Các trường số trong phản hồi API giờ là số. Ảnh hưởng đến invoices/list, payments/list và invoices/create.
| Trường | Trước | Sau |
|---|---|---|
commissionFiatUSD | "0.10" | 0.1 |
amountFiatUSD | "10.00" | 10 |
amountFiat | "1000.00" | 1000 |
views | "0" | 0 |
payment.amount | "10.500000000" | 10.5 |
Khóa bị giới hạn theo dự án giờ áp dụng hạn chế trong mọi phương thức. Trước đây, một số phương thức bỏ qua dự án. Giờ nó là bộ lọc trong các phương thức danh sách, và yêu cầu đến hóa đơn hay ví của dự án khác bị từ chối với Restricted project. Phương thức không thể tôn trọng hạn chế theo dự án bị đóng với khóa như vậy. Chi tiết trong mục “Phạm vi của khóa”.
Danh sách thanh toán giờ trả về cả các khoản chưa khớp. Trước đây, payments/list chỉ trả về các khoản thanh toán gắn với hóa đơn. Giờ kết quả gồm mọi khoản thanh toán trên tất cả ví của bạn; khoản chưa khớp không có khối invoice. Đây chính là những khoản cần cho khớp thủ công qua invoices/bindPayment.
Việc hủy hóa đơn giờ phân biệt lý do từ chối. Trước đây, cả hóa đơn không tồn tại lẫn điều kiện không thỏa đều trả về Invoice not found chung chung. Giờ Invoice not found chỉ có nghĩa hóa đơn không tồn tại, còn điều kiện không thỏa trả về Invoice cannot be canceled.
Định danh sai định dạng giờ bị từ chối. invoices/list kiểm tra invoiceId, invoiceUid và projectId; payments/list — walletId và invoiceId. Giá trị không hợp lệ trả về Parameter is filled in incorrectly kèm tên trường. Trước đây, tham số như vậy bị lặng lẽ bỏ qua và kết quả trả về không được lọc.
Ranh giới khoảng thời gian giờ bao trọn ngày được nêu. startDate và endDate được hiểu từ 00:00:00 đến 23:59:59. Trước đây, ngày cuối bị cắt bỏ hoàn toàn, và truy vấn một ngày chỉ trả về các bản ghi tạo đúng lúc nửa đêm. Ảnh hưởng đến invoices/list, payments/list, statistics/invoices và statistics/payments.
Trường dự án được thêm vào lịch sử số dư. Mỗi giao dịch trong phương thức billing/history giờ mang trường projectId. Với các giao dịch cấp tài khoản — nạp tiền và thưởng — giá trị là null.
Ngày 4 tháng 9
Mô tả và dữ liệu dịch vụ quay lại ở dạng gốc. Các trường description và serviceData trước đây được lưu ở dạng mã hóa, và trong phản hồi API dấu ngoặc kép đến dưới dạng " và dấu bé hơn dưới dạng <. Giờ trả về đúng những gì người bán đã gửi. Khi kết xuất trong HTML, hãy thoát ký tự giá trị ở phía bạn.
Biểu mẫu HTML chỉ chấp nhận POST. Việc tạo hóa đơn bằng cách đi theo liên kết với tham số trên thanh địa chỉ không còn hoạt động — tham số chỉ được đọc từ phần thân yêu cầu. Nếu bạn từng dùng liên kết, hãy thay bằng biểu mẫu với method="post".
Ngày 3 tháng 9
Thông báo webhook giờ được ký. Các header X-Timestamp và X-Signature được thêm vào; chữ ký tính bằng HMAC-SHA256 trên khóa bí mật webhook. Việc xác minh chữ ký giúp bạn phân biệt thông báo thật với giả mạo. Cơ chế và ví dụ nằm trong mục “Xác minh chữ ký webhook”.
Thay đổi này tương thích ngược: nếu bạn không thêm bước kiểm tra, trình xử lý của bạn vẫn hoạt động như trước.