Nhảy tới nội dung
Phiên bản: Lastest

API Tạo plan

Endpoint: /api/v1/subs/plans

Method: POST

Header Params

Tham sốYêu cầuKiểu dữ liệuMô tảLưu ý
X-APPOTAPAY-AUTHrequiredString Cách tạo JWT_TOKEN
Content-TyperequiredStringGiá trị: application/json
X-Request-IDoptionalStringĐịnh dạng UUIDv4. Request ID để kiểm tra yêu cầu khi xảy ra sự cốmax:42
LanguageoptionalStringGiá trị vi hoặc en tương ứng với link thanh toán sẽ là tiếng việt hoặc tiếng anh, (mặc định: vi)

in:vi,en

X-Account-Ref-IDoptionalString

Mã định danh của tài khoản Sub account do AppotaPay cung cấp.

Bắt buộc truyền khi thanh toán giao dịch của Sub account loại owner

{
"X-APPOTAPAY-AUTH": "JWT_TOKEN",
"Content-Type": "application/json",
"X-Request-ID": "Your_Unique_id",
"Language": "vi",
"X-Account-Ref-ID": "9723f73b-9295-4acb-884b-ab6310c2e653"
}

Tham số

Tham sốYêu cầuKiểu dữ liệuMô tảValidate
planRefIdRequiredString

Mã định danh cho plan được cung cấp bởi partner.

Các request có planRefId trùng nhau sẽ trả lỗi.

min:1, max: 50, format: alphanumeric
customerIdRequiredStringMã khách hàng
currencyRequiredStringĐơn vị tiền tệin: VND
amountRequiredIntegerSố tiền thanh toánmin: 5000, max: 100000000
countryConditional, bắt buộc nếu trường paymentMethods không có thông tinString

Mã quốc gia của GD

Giá trị được chấp nhận

- ID: Indonesia

- PH: Philippines

- VN: Vietnam

- TH: Thailand

- MY: Malaysia

Format ISO 3166-2 Country Code
returnUrlConditional, bắt buộc nếu trường paymentMethods không có thông tinString

Đường dẫn điều hướng về

AppotaPay sẽ gửi kết quả chi tiết qua URL này với một số thông tin như sau: LINK

paymentMethodsOptionalArray

Danh sách payment method

(Chỉ áp dụng với mô hình Merchant hosted)

paymentMethods.*.paymentMethodIdOptionalStringPayment method ID
paymentMethods.*.rankOptionalIntegerThứ tự ưu tiên phương thức thanh toán sẽ được sử dụng trong chu kỳ thanh toánmin: 1
paymentLinkForFailedAttemptOptionalString

Nhận link thanh toán trong webhook nếu thanh toán cho chu kỳ thất bại

- YES: nhận link thanh toán

- NO: không nhận link thanh toán

default: NO, in: YES,NO
immediateActionTypeOptionalString

Thực hiện trừ tiền ngay thì tạo thành công plan, null: tiền trừ vào thời điểm anchorDate

- FULL_AMOUNT: thực hiện trừ tiền khi khởi tạo plan thành công

in: FULL_AMOUNT
failedCycleActionRequiredString

Hành động khi cycle thực hiện thanh toán thất bại

- STOP: Dừng toàn bộ plan

- RESUME: Bỏ qua cycle thất bại và tiến hành cycle kế tiếp

in: STOP, RESUME
serviceNameOptionalString

Tên dịch vụ bạn thực hiện thanh toán định kỳ

(Chỉ áp dụng với mô hình Checkout page)

max:30
scheduleRequiredObjectCấu hình chu kỳ thanh toán định kỳ
schedule.intervalRequiredStringTần suất thực hiện thanh toán định kỳin: DAY, WEEK, MONTH
schedule.intervalCountRequiredIntegerĐơn vị khoảng thời gian giữa 2 chu kỳ liên tiếpmin: 1
schedule.totalRecurrenceOptionalInteger

Tổng số lần thanh toán định kỳ trong plan

null: không giới hạn

min: 1
schedule.anchorDateOptionalString

Thời điểm thực hiện thanh toán định kỳ

Default: ngày khởi tạo plan thành công

Giá trị hợp lệ: ngày từ 1-28 (của 1 tháng)

Lưu ý: nếu anchorDate: null và thời điểm khởi tạo plan là ngày 29/30/31 của tháng, anchorDate mặc định sẽ lấy value là ngày 1 của tháng tiếp theo

format: ISO-8601
schedule.retryIntervalConditional, bắt buộc nếu paymentLinkForFailedAttempt = ‘YES’StringTần suất thực hiện thanh toán lại trong 1 cycle nếu thanh toán xảy ra vấn đềin: DAY
schedule.retryIntervalCountConditional, bắt buộc nếu paymentLinkForFailedAttempt = ‘YES’IntegerĐơn vị khoảng thời gian giữa 2 lần thực hiện thanh toán lạimin:1
schedule.totalRetryConditional, bắt buộc nếu paymentLinkForFailedAttempt = ‘YES’Integer

Tổng số lần thanh toán lại

null: không thực hiện thanh toán lại

min:1, max: 10
notificationConfigOptionalObjectCấu hình cách thức thanh toán cho dịch vụ thanh toán định kỳ
notificationConfig.[subscription.cycle.retrying]OptionalArray

Kênh thanh toán bạn muốn người dùng nhận khi thanh toán cycle không thành công và người dùng có thể thực hiện thanh toán lại.

Giá trị được chấp nhận ["EMAIL"]

notificationConfig.[subscription.cycle.succeeded]OptionalArray

Kênh thanh toán bạn muốn người dùng nhận khi thanh toán cycle thành công..

Giá trị được chấp nhận ["EMAIL"]

notificationConfig.[subscription.cycle.failed]OptionalArray

Kênh thanh toán bạn muốn người dùng nhận khi cycle thất bại (không thể tiếp tục thanh toán cycle

Giá trị được chấp nhận ["EMAIL"]

notificationConfig.[subscription.plan.activated]OptionalArray

Kênh thanh toán bạn muốn người dùng nhận khi Plan thanh toán định kỳ được khởi tạo và kích hoạt thành công.

Giá trị được chấp nhận ["EMAIL"]

notificationConfig.[subscription.plan.inactivated]OptionalArray

Kênh thanh toán bạn muốn người dùng nhận khi Plan thanh toán định kỳ tạm dừng

Giá trị được chấp nhận ["EMAIL"]

currencyExchangeOptionalObject
currencyExchange.amountOptionalNumber

Số tiền quy đổi

Hỗ trợ 2 số thập phân, ví dụ: 12.02

min: 0.10, max: 9999999999
currencyExchange.currencyOptionalString

Đơn vị tiền tệ chuyển đổi

Hỗ trợ: USD

Example Request

{
"planRefId": "ASKJLKALK299",
"customerId": "01HRVGAJSP7SX83X7AQ9QQYMBE",
"currency": "VND",
"amount": 85000,
"paymentMethods": [
{
"paymentMethodId": "01HRVJY8ZMZFHRHE3KG2S24KKW",
"rank": 1
}
],
"immediateActionType": "FULL_AMOUNT",
"failedCycleAction": "STOP",
"schedule": {
"interval": "DAY",
"intervalCount": 1,
"totalRecurrence": 3,
"anchorDate": "2024-01-13T15:23:40+07:00",
"retryInterval": "DAY",
"retryIntervalCount": 1,
"totalRetry": 1
}
}

Dữ liệu trả về

Thành công

Http Status Code 200 - OK

Dữ liệu trả về thành công sẽ chứa một Plan object

Thất bại

HTTP Status Code != 200

Error response params

Tham sốYêu cầuKiểu dữ liệuMô tả
errorCoderequiredIntegerMã lỗi
messagerequiredStringMô tả lỗi
errorsoptionalArrayMô tả lỗi chi tiết các trường nếu có
errors.*.fieldoptionalStringTrường dữ liệu bị lỗi
errors.*.reasonoptionalStringMô tả trường dữ liệu bị lỗi
{
"errorCode": 1,
"message": "Thông tin yêu cầu thiếu hoặc không hợp lệ",
"errors": [
{
"field": "planRefId",
"reason": "Trường plan ref id không được bỏ trống."
}
]
}

Bảng mã lỗi thường gặp

Mã lỗi đầy đủ vui lòng xem tại đây

Mã lỗiMô tả
0Thành công
1Thông tin yêu cầu thiếu hoặc không hợp lệ
11Partner không tồn tại
13Partner đã bị khoá
14API Key không tồn tại
15API Key chưa được kích hoạt hoặc đã bị khoá
92IP không được phép truy cập
99Lỗi không xác định, vui lòng liên hệ AppotaPay để biết thêm thông tin chi tiết
401Lỗi xác thực
500Hệ thống gặp lỗi, vui lòng thử lại sau
3002Mã tham chiếu Partner đã bị trùng, vui lòng thực hiện lại
3003Customer không tồn tại
3004Payment method không tồn tại
3012Payment method không hợp lệ