-
Notifications
You must be signed in to change notification settings - Fork 7
서브스크립션 생성 및 청구 금액 정산 메뉴얼
-
빌링 서비스에서 결제 조직을 하나 생성한 후, test 어카운트와 test 프로덕트(BASE)를 생성한다.
-
test 프로덕트에 test-1 플랜을 하나 생성하도록한다. 플랜 모델은 BASE, 월결제 100달러, 트라이얼 기간은 없도록 한다.
-
test-addon(ADD_ON) 프로덕트를 생성한다. 플랜 모델은 ADD_ON, 월결제 10달러, 트라이얼 기간은 없도록 한다.
-
어카운트로 하여금 아래 api 를 통해 test-1 플랜을 구독하도록 한다.
구독을 추가한다.
"post": {
"tags": [
"1.0kbsubscriptions"
],
"summary": "Create an entitlement",
"description": "",
"operationId": "createEntitlement",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"in": "body",
"name": "body",
"required": false,
"schema": {
"$ref": "#/definitions/SubscriptionJson"
}
},
{
"name": "requestedDate",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "entitlementDate",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "billingDate",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "migrated",
"in": "query",
"required": false,
"type": "boolean",
"default": false
},
{
"name": "bcd",
"in": "query",
"required": false,
"type": "integer",
"format": "int32"
},
{
"name": "callCompletion",
"in": "query",
"required": false,
"type": "boolean",
"default": false
},
{
"name": "callTimeoutSec",
"in": "query",
"required": false,
"type": "integer",
"default": 3,
"format": "int64"
},
{
"name": "pluginProperty",
"in": "query",
"required": false,
"type": "array",
"items": {
"type": "string"
},
"collectionFormat": "multi"
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid entitlement supplied"
}
}
}
-
리턴되는 response 의 Location 헤더의 bundleId 를 가져와서, 위의 api 를 재호출하되, test-addon 프로덕트를 신청하며 bundleId 파라미터를 포함하도록 한다. bundle 조회시 test-1 프로덕트와 test-addon 프로덕트가 번들로 묶여져 있는데, 이는 하나의 인보이스로 매월 결제됨을 뜻한다.
-
BASE 와 ADD_ON 구독을 함께 생성하는 테스트를 진행해본다.
구독을 애드온과 함께 추가한다.
"post": {
"tags": [
"1.0kbsubscriptions"
],
"summary": "Create an entitlement with addOn products",
"description": "",
"operationId": "createEntitlementWithAddOns",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"in": "body",
"name": "body",
"required": false,
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/SubscriptionJson"
}
}
},
{
"name": "requestedDate",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "entitlementDate",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "billingDate",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "migrated",
"in": "query",
"required": false,
"type": "boolean",
"default": false
},
{
"name": "callCompletion",
"in": "query",
"required": false,
"type": "boolean",
"default": false
},
{
"name": "callTimeoutSec",
"in": "query",
"required": false,
"type": "integer",
"default": 3,
"format": "int64"
},
{
"name": "pluginProperty",
"in": "query",
"required": false,
"type": "array",
"items": {
"type": "string"
},
"collectionFormat": "multi"
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid entitlement supplied"
}
}
}
- 다수의 BASE 와 ADD_ON 구독을 함께 생성하는 테스트를 진행해본다.
다수의 구독을 애드온과 함께 추가한다.
"post": {
"tags": [
"1.0kbsubscriptions"
],
"summary": "Create multiple entitlements with addOn products",
"description": "",
"operationId": "createEntitlementsWithAddOns",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"in": "body",
"name": "body",
"required": false,
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/BulkBaseSubscriptionAndAddOnsJson"
}
}
},
{
"name": "requestedDate",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "entitlementDate",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "billingDate",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "migrated",
"in": "query",
"required": false,
"type": "boolean",
"default": false
},
{
"name": "callCompletion",
"in": "query",
"required": false,
"type": "boolean",
"default": false
},
{
"name": "callTimeoutSec",
"in": "query",
"required": false,
"type": "integer",
"default": 3,
"format": "int64"
},
{
"name": "pluginProperty",
"in": "query",
"required": false,
"type": "array",
"items": {
"type": "string"
},
"collectionFormat": "multi"
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid entitlements supplied"
}
}
}
- 4)번을 실행하였을 경우 bundle 을 조회하면서 subscriptionId 도 함께 얻을 수 있는데, subscriptionId 를 통하여 구독 한건을 조회해보도록 한다.
구독 한건을 가져온다.
"get": {
"tags": [
"1.0kbsubscriptions"
],
"summary": "Retrieve a subscription by id",
"description": "",
"operationId": "getEntitlement",
"produces": [
"application/json"
],
"parameters": [
{
"name": "subscriptionId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "audit",
"in": "query",
"required": false,
"type": "string",
"default": "NONE"
}
],
"responses": {
"200": {
"description": "successful operation",
"schema": {
"$ref": "#/definitions/SubscriptionJson"
}
},
"400": {
"description": "Invalid subscription id supplied"
},
"404": {
"description": "Subscription not found"
}
}
},
- test 프로덕트에 test-2 플랜을 하나 더 추가로 생성한다. 그 후 4) 를 실행시 생성된 구독을 test-2 플랜으로 변경해보도록 한다. 이 때 변경된 플랜에 대한 인보이스가 생성된다.
구독 한건을 다른 플랜으로 변경한다.
"put": {
"tags": [
"1.0kbsubscriptions"
],
"summary": "Change entitlement plan",
"description": "",
"operationId": "changeEntitlementPlan",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"in": "body",
"name": "body",
"required": false,
"schema": {
"$ref": "#/definitions/SubscriptionJson"
}
},
{
"name": "subscriptionId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "requestedDate",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "callCompletion",
"in": "query",
"required": false,
"type": "boolean",
"default": false
},
{
"name": "callTimeoutSec",
"in": "query",
"required": false,
"type": "integer",
"default": 3,
"format": "int64"
},
{
"name": "billingPolicy",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "pluginProperty",
"in": "query",
"required": false,
"type": "array",
"items": {
"type": "string"
},
"collectionFormat": "multi"
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid subscription id supplied"
},
"404": {
"description": "Entitlement not found"
}
}
},
- 구독을 정지시켜본다. billingPolicy 파라미터를 END_OF_TERM 또는 IMMEDIATE 를 선택하여, 월말 정지와 즉시 정지를 모두 테스트해보도록 한다. 즉시정지일경우 정지즉시 정산인보이스가 발행되어야 한다.
구독 한건을 정지시킨다.
"delete": {
"tags": [
"1.0kbsubscriptions"
],
"summary": "Cancel an entitlement plan",
"description": "",
"operationId": "cancelEntitlementPlan",
"produces": [
"application/json"
],
"parameters": [
{
"name": "subscriptionId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "requestedDate",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "callCompletion",
"in": "query",
"required": false,
"type": "boolean",
"default": false
},
{
"name": "callTimeoutSec",
"in": "query",
"required": false,
"type": "integer",
"default": 5,
"format": "int64"
},
{
"name": "entitlementPolicy",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "billingPolicy",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "useRequestedDateForBilling",
"in": "query",
"required": false,
"type": "boolean",
"default": false
},
{
"name": "pluginProperty",
"in": "query",
"required": false,
"type": "array",
"items": {
"type": "string"
},
"collectionFormat": "multi"
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid subscription id supplied"
},
"404": {
"description": "Entitlement not found"
}
}
}
- 매월 결제되는 구독일 경우, 아래 api 를 통해 결제일을 변경시킨 후 날짜를 경과시켜 인보이스 발행일 및 결제일이 변경되는지 확인토록 한다.
구독의 결제일을 변경시킨다.
"put": {
"tags": [
"1.0kbsubscriptions"
],
"summary": "Update the BCD associated to a subscription",
"description": "",
"operationId": "updateSubscriptionBCD",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"in": "body",
"name": "body",
"required": false,
"schema": {
"$ref": "#/definitions/SubscriptionJson"
}
},
{
"name": "subscriptionId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "effectiveFromDate",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid entitlement supplied"
}
}
}
},
- 구독이 과금되지 않을 경우 일시정지 하였다가, 과금이 되었을 경우 일시정지가 풀리되, 정지된 기간만큼 과금정산이 되지 않아야 할 경우가 있다. 아래 api 를 통해 구독의 일시정지/정지해제를 수행할 수 있다.
구독을 블락처리한다.
"put": {
"tags": [
"1.0kbsubscriptions"
],
"summary": "Block a subscription",
"description": "",
"operationId": "addSubscriptionBlockingState",
"consumes": [
"application/json"
],
"parameters": [
{
"in": "body",
"name": "body",
"required": false,
"schema": {
"$ref": "#/definitions/BlockingStateJson"
}
},
{
"name": "subscriptionId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "requestedDate",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "pluginProperty",
"in": "query",
"required": false,
"type": "array",
"items": {
"type": "string"
},
"collectionFormat": "multi"
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid subscription id supplied"
},
"404": {
"description": "Subscription not found"
}
}
}
- 구독에 커스텀 필드를 조회해본다. 커스텀 필드는 외부조회용으로 쓰일 수 있다.
구독의 커스텀 필드를 가져온다.
"get": {
"tags": [
"1.0kbsubscriptions"
],
"summary": "Retrieve subscription custom fields",
"description": "",
"operationId": "getCustomFields",
"produces": [
"application/json"
],
"parameters": [
{
"name": "subscriptionId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "audit",
"in": "query",
"required": false,
"type": "string",
"default": "NONE"
}
],
"responses": {
"200": {
"description": "successful operation",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/CustomFieldJson"
}
}
},
"400": {
"description": "Invalid subscription id supplied"
}
}
},
- 구독에 커스텀 필드를 추가해본다.
구독의 커스텀 필드를 추가한다.
"post": {
"tags": [
"1.0kbsubscriptions"
],
"summary": "Add custom fields to subscription",
"description": "",
"operationId": "createCustomFields",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "subscriptionId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"in": "body",
"name": "body",
"required": false,
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/CustomFieldJson"
}
}
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid subscription id supplied"
}
}
},
- 생성된 커스텀 필드를 삭제하도록 한다.
구독의 커스텀 필드를 삭제한다.
"delete": {
"tags": [
"1.0kbsubscriptions"
],
"summary": "Remove custom fields from subscription",
"description": "",
"operationId": "deleteCustomFields",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "subscriptionId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "customFieldList",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid subscription id supplied"
}
}
}
- 구독의 태그리스트를 가져온다. 태그는 외부조회용으로 쓰일 수 있다.
구독의 태그를 가져온다.
"get": {
"tags": [
"1.0kbsubscriptions"
],
"summary": "Retrieve subscription tags",
"description": "",
"operationId": "getTags",
"produces": [
"application/json"
],
"parameters": [
{
"name": "subscriptionId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "audit",
"in": "query",
"required": false,
"type": "string",
"default": "NONE"
},
{
"name": "includedDeleted",
"in": "query",
"required": false,
"type": "boolean",
"default": false
}
],
"responses": {
"200": {
"description": "successful operation",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/TagJson"
}
}
},
"400": {
"description": "Invalid subscription id supplied"
},
"404": {
"description": "Subscription not found"
}
}
},
- 구독의 태그리스트를 추가하여 본다.
구독의 태그를 추가한다.
"post": {
"tags": [
"1.0kbsubscriptions"
],
"summary": "Add tags to subscription",
"description": "",
"operationId": "createTags",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "subscriptionId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "tagList",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid subscription id supplied"
}
}
},
- 생성한 태그를 삭제해본다.
구독의 태그를 삭제한다.
"delete": {
"tags": [
"1.0kbsubscriptions"
],
"summary": "Remove tags from subscription",
"description": "",
"operationId": "deleteTags",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "subscriptionId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "tagList",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid subscription id supplied"
}
}
}
- delete 메소드를 통해 정지된 구독을 정지취소를 할 수 있는데, 정지 요청일이 현재시간보다 이전이라서 이미 인보이스가 발송된 경우 정지취소를 할 수 없다. 그러나 정지 요청일을 다가올 어느날로 설정할 경우 아직 정지된 상태가 아니므로 아래 api 를 통하여 정지 예약을 취소할 수 있다.
구독의 정지를 해제한다.
"put": {
"tags": [
"1.0kbsubscriptions"
],
"summary": "Un-cancel an entitlement",
"description": "",
"operationId": "uncancelEntitlementPlan",
"produces": [
"application/json"
],
"parameters": [
{
"name": "subscriptionId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "pluginProperty",
"in": "query",
"required": false,
"type": "array",
"items": {
"type": "string"
},
"collectionFormat": "multi"
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid subscription id supplied"
},
"404": {
"description": "Entitlement not found"
}
}
}
- BASE 프로덕트를 subscription(구독) 신청할 경우 리턴되는 bundleId 를 통해 번들을 조회할 수 있다. 번들의 BASE + ADD_ON 의 조합으로써 동일 결제일을 가지는 구독의 묶음이다. 번들에 소속된 구독들은 하나의 인보이스로 청구된다.
external key 로 번들을 가져온다.
"get": {
"tags": [
"1.0kbbundles"
],
"summary": "Retrieve a bundle by external key",
"description": "",
"operationId": "getBundleByKey",
"produces": [
"application/json"
],
"parameters": [
{
"name": "externalKey",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "includedDeleted",
"in": "query",
"required": false,
"type": "boolean",
"default": false
},
{
"name": "audit",
"in": "query",
"required": false,
"type": "string",
"default": "NONE"
}
],
"responses": {
"200": {
"description": "successful operation",
"schema": {
"$ref": "#/definitions/BundleJson"
}
},
"404": {
"description": "Bundle not found"
}
}
}
}
- 번들을 페이지네이션하여 가져온다. limit, offset 의 파라미터로 정할 수 있으며, 없을경우 기본 100건이 조회된다.
번들을 페이지네이션으로 가져온다
"get": {
"tags": [
"1.0kbbundles"
],
"summary": "List bundles",
"description": "",
"operationId": "getBundles",
"produces": [
"application/json"
],
"parameters": [
{
"name": "offset",
"in": "query",
"required": false,
"type": "integer",
"default": 0,
"format": "int64"
},
{
"name": "limit",
"in": "query",
"required": false,
"type": "integer",
"default": 100,
"format": "int64"
},
{
"name": "audit",
"in": "query",
"required": false,
"type": "string",
"default": "NONE"
}
],
"responses": {
"200": {
"description": "successful operation",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/BundleJson"
}
}
}
}
}
- 번들을 검색어로 쿼리하여 페이지네이션하여 가져온다. limit, offset 의 파라미터로 정할 수 있으며, 없을경우 기본 100건이 조회된다.
주어진 검색어에 해당하는 번들을 페이지네이션으로 가져온다.
"get": {
"tags": [
"1.0kbbundles"
],
"summary": "Search bundles",
"description": "",
"operationId": "searchBundles",
"produces": [
"application/json"
],
"parameters": [
{
"name": "searchKey",
"in": "path",
"required": true,
"type": "string",
"pattern": ".*"
},
{
"name": "offset",
"in": "query",
"required": false,
"type": "integer",
"default": 0,
"format": "int64"
},
{
"name": "limit",
"in": "query",
"required": false,
"type": "integer",
"default": 100,
"format": "int64"
},
{
"name": "audit",
"in": "query",
"required": false,
"type": "string",
"default": "NONE"
}
],
"responses": {
"200": {
"description": "successful operation",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/BundleJson"
}
}
}
}
}
- 번들 한건을 조회하여 BASE, ADD_ON 두가지 구독이 모두 명시되어 있는지 확인토록 한다.
번들 한건을 가져온다.
"get": {
"tags": [
"1.0kbbundles"
],
"summary": "Retrieve a bundle by id",
"description": "",
"operationId": "getBundle",
"produces": [
"application/json"
],
"parameters": [
{
"name": "bundleId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "audit",
"in": "query",
"required": false,
"type": "string",
"default": "NONE"
}
],
"responses": {
"200": {
"description": "successful operation",
"schema": {
"$ref": "#/definitions/BundleJson"
}
},
"400": {
"description": "Invalid bundle id supplied"
},
"404": {
"description": "Bundle not found"
}
}
},
- Account 를 하나 추가로 생성한 후, test 어카운트의 번들을 새로 생성한 어카운트로 이전토록 해본다. 이때, 구독의 결제주기 및 결제 상태과 이전과 동일하게 표현되는지 확인토록 한다.
번들을 다른 계정으로 이동시킨다.
"put": {
"tags": [
"1.0kbbundles"
],
"summary": "Transfer a bundle to another account",
"description": "",
"operationId": "transferBundle",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"in": "body",
"name": "body",
"required": false,
"schema": {
"$ref": "#/definitions/BundleJson"
}
},
{
"name": "bundleId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "requestedDate",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "billingPolicy",
"in": "query",
"required": false,
"type": "string",
"default": "END_OF_TERM"
},
{
"name": "pluginProperty",
"in": "query",
"required": false,
"type": "array",
"items": {
"type": "string"
},
"collectionFormat": "multi"
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid bundle id, requested date or policy supplied"
},
"404": {
"description": "Bundle not found"
}
}
}
},
- 번들의 커스텀 필드를 조회한다.(외부 조회용)
번들의 커스텀 필드를 가져온다.
"get": {
"tags": [
"1.0kbbundles"
],
"summary": "Retrieve bundle custom fields",
"description": "",
"operationId": "getCustomFields",
"produces": [
"application/json"
],
"parameters": [
{
"name": "bundleId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "audit",
"in": "query",
"required": false,
"type": "string",
"default": "NONE"
}
],
"responses": {
"200": {
"description": "successful operation",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/CustomFieldJson"
}
}
},
"400": {
"description": "Invalid bundle id supplied"
}
}
},
번들의 커스텀 필드를 추가한다.
"post": {
"tags": [
"1.0kbbundles"
],
"summary": "Add custom fields to bundle",
"description": "",
"operationId": "createCustomFields",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "bundleId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"in": "body",
"name": "body",
"required": false,
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/CustomFieldJson"
}
}
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid bundle id supplied"
}
}
},
번들의 커스텀 필드를 삭제한다.
"delete": {
"tags": [
"1.0kbbundles"
],
"summary": "Remove custom fields from bundle",
"description": "",
"operationId": "deleteCustomFields",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "bundleId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "customFieldList",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid bundle id supplied"
}
}
}
},
- 번들을 pause(일시정지) 처리한다. 일시정지된 번들은 과금이 집행될 경우 일시정지가 해제된다.
번들을 일시정지한다.
"put": {
"tags": [
"1.0kbbundles"
],
"summary": "Pause a bundle",
"description": "",
"operationId": "pauseBundle",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "bundleId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "requestedDate",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "pluginProperty",
"in": "query",
"required": false,
"type": "array",
"items": {
"type": "string"
},
"collectionFormat": "multi"
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid bundle id supplied"
},
"404": {
"description": "Bundle not found"
}
}
}
},
- pause(일시정지)된 번들을 일시정지 해제한다.
번들의 일시정지를 해제한다.
"put": {
"tags": [
"1.0kbbundles"
],
"summary": "Resume a bundle",
"description": "",
"operationId": "resumeBundle",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "bundleId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "requestedDate",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "pluginProperty",
"in": "query",
"required": false,
"type": "array",
"items": {
"type": "string"
},
"collectionFormat": "multi"
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid bundle id supplied"
},
"404": {
"description": "Bundle not found"
}
}
}
},
- 번들의 태크를 조회, 생성, 삭제해보도록 한다.
번들의 태그를 가져온다.
"get": {
"tags": [
"1.0kbbundles"
],
"summary": "Retrieve bundle tags",
"description": "",
"operationId": "getTags",
"produces": [
"application/json"
],
"parameters": [
{
"name": "bundleId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "audit",
"in": "query",
"required": false,
"type": "string",
"default": "NONE"
},
{
"name": "includedDeleted",
"in": "query",
"required": false,
"type": "boolean",
"default": false
}
],
"responses": {
"200": {
"description": "successful operation",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/TagJson"
}
}
},
"400": {
"description": "Invalid bundle id supplied"
},
"404": {
"description": "Bundle not found"
}
}
},
번들의 태그를 생성한다.
"post": {
"tags": [
"1.0kbbundles"
],
"summary": "Add tags to bundle",
"description": "",
"operationId": "createTags",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "bundleId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "tagList",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid bundle id supplied"
}
}
},
번들의 태그를 삭제한다.
"delete": {
"tags": [
"1.0kbbundles"
],
"summary": "Remove tags from bundle",
"description": "",
"operationId": "deleteTags",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "bundleId",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w+-\\w+-\\w+-\\w+-\\w+"
},
{
"name": "tagList",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-CreatedBy",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Reason",
"in": "header",
"required": false,
"type": "string"
},
{
"name": "X-Killbill-Comment",
"in": "header",
"required": false,
"type": "string"
}
],
"responses": {
"400": {
"description": "Invalid bundle id supplied"
}
}
}
},
{
"accountId": "576ac83b-f56a-4da8-a214-66d63f6e523f",
"bundleId": "8c4020c5-f105-4940-8214-2aa77425d5d0",
"externalKey": "8c4020c5-f105-4940-8214-2aa77425d5d0",
"subscriptions": [
{
"accountId": "576ac83b-f56a-4da8-a214-66d63f6e523f",
"bundleId": "8c4020c5-f105-4940-8214-2aa77425d5d0",
"subscriptionId": "be14e10a-41a6-4768-bcd5-a31962e63611",
"externalKey": "8c4020c5-f105-4940-8214-2aa77425d5d0",
"startDate": "2017-02-13",
"productName": "Blowdart",
"productCategory": "BASE",
"billingPeriod": "MONTHLY",
"phaseType": "TRIAL",
"priceList": "DEFAULT",
"planName": "blowdart-monthly",
"state": "CANCELLED",
"sourceType": "NATIVE",
"cancelledDate": "2017-02-13",
"chargedThroughDate": "2017-02-13",
"billingStartDate": "2017-02-13",
"billingEndDate": "2017-02-13",
"billCycleDayLocal": 9,
"events": [
{
"eventId": "ffa4c7f0-2b14-4b3a-9baf-b922685095ed",
"billingPeriod": null,
"product": null,
"priceList": null,
"eventType": "START_ENTITLEMENT",
"isBlockedBilling": false,
"isBlockedEntitlement": false,
"serviceName": "entitlement-service",
"serviceStateName": "ENT_STARTED",
"phase": null,
"auditLogs": [],
"effectiveDate": "2017-02-13"
},
{
"eventId": "6a410b6a-ddde-4be8-bbe1-ae9892cbacfb",
"billingPeriod": "MONTHLY",
"product": "Blowdart",
"priceList": "DEFAULT",
"eventType": "START_BILLING",
"isBlockedBilling": false,
"isBlockedEntitlement": false,
"serviceName": "billing-service",
"serviceStateName": "START_BILLING",
"phase": "blowdart-monthly-trial",
"auditLogs": [],
"effectiveDate": "2017-02-13"
},
{
"eventId": "cdea353d-32ba-4f94-a86d-3ca1e9989dcc",
"billingPeriod": null,
"product": null,
"priceList": null,
"eventType": "STOP_ENTITLEMENT",
"isBlockedBilling": false,
"isBlockedEntitlement": true,
"serviceName": "entitlement-service",
"serviceStateName": "ENT_CANCELLED",
"phase": null,
"auditLogs": [],
"effectiveDate": "2017-02-13"
},
{
"eventId": "2228562e-29da-443d-bd15-79cc25c9bb85",
"billingPeriod": "MONTHLY",
"product": "Blowdart",
"priceList": "DEFAULT",
"eventType": "STOP_BILLING",
"isBlockedBilling": false,
"isBlockedEntitlement": false,
"serviceName": "billing-service",
"serviceStateName": "STOP_BILLING",
"phase": "blowdart-monthly-trial",
"auditLogs": [],
"effectiveDate": "2017-02-13"
}
],
"priceOverrides": [],
"auditLogs": []
}
],
"timeline": {
"accountId": "576ac83b-f56a-4da8-a214-66d63f6e523f",
"bundleId": "8c4020c5-f105-4940-8214-2aa77425d5d0",
"externalKey": "8c4020c5-f105-4940-8214-2aa77425d5d0",
"events": [
{
"eventId": "ffa4c7f0-2b14-4b3a-9baf-b922685095ed",
"billingPeriod": null,
"product": null,
"priceList": null,
"eventType": "START_ENTITLEMENT",
"isBlockedBilling": false,
"isBlockedEntitlement": false,
"serviceName": "entitlement-service",
"serviceStateName": "ENT_STARTED",
"phase": null,
"auditLogs": [],
"effectiveDate": "2017-02-13"
},
{
"eventId": "6a410b6a-ddde-4be8-bbe1-ae9892cbacfb",
"billingPeriod": "MONTHLY",
"product": "Blowdart",
"priceList": "DEFAULT",
"eventType": "START_BILLING",
"isBlockedBilling": false,
"isBlockedEntitlement": false,
"serviceName": "billing-service",
"serviceStateName": "START_BILLING",
"phase": "blowdart-monthly-trial",
"auditLogs": [],
"effectiveDate": "2017-02-13"
},
{
"eventId": "cdea353d-32ba-4f94-a86d-3ca1e9989dcc",
"billingPeriod": null,
"product": null,
"priceList": null,
"eventType": "STOP_ENTITLEMENT",
"isBlockedBilling": false,
"isBlockedEntitlement": true,
"serviceName": "entitlement-service",
"serviceStateName": "ENT_CANCELLED",
"phase": null,
"auditLogs": [],
"effectiveDate": "2017-02-13"
},
{
"eventId": "2228562e-29da-443d-bd15-79cc25c9bb85",
"billingPeriod": "MONTHLY",
"product": "Blowdart",
"priceList": "DEFAULT",
"eventType": "STOP_BILLING",
"isBlockedBilling": false,
"isBlockedEntitlement": false,
"serviceName": "billing-service",
"serviceStateName": "STOP_BILLING",
"phase": "blowdart-monthly-trial",
"auditLogs": [],
"effectiveDate": "2017-02-13"
}
],
"auditLogs": []
},
"auditLogs": []
}
{
"accountId": "576ac83b-f56a-4da8-a214-66d63f6e523f",
"bundleId": "8c4020c5-f105-4940-8214-2aa77425d5d0",
"subscriptionId": "be14e10a-41a6-4768-bcd5-a31962e63611",
"externalKey": "8c4020c5-f105-4940-8214-2aa77425d5d0",
"startDate": "2017-02-13",
"productName": "Blowdart",
"productCategory": "BASE",
"billingPeriod": "MONTHLY",
"phaseType": "TRIAL",
"priceList": "DEFAULT",
"planName": "blowdart-monthly",
"state": "CANCELLED",
"sourceType": "NATIVE",
"cancelledDate": "2017-02-13",
"chargedThroughDate": "2017-02-13",
"billingStartDate": "2017-02-13",
"billingEndDate": "2017-02-13",
"billCycleDayLocal": 9,
"events": [
{
"eventId": "ffa4c7f0-2b14-4b3a-9baf-b922685095ed",
"billingPeriod": null,
"product": null,
"priceList": null,
"eventType": "START_ENTITLEMENT",
"isBlockedBilling": false,
"isBlockedEntitlement": false,
"serviceName": "entitlement-service",
"serviceStateName": "ENT_STARTED",
"phase": null,
"auditLogs": [],
"effectiveDate": "2017-02-13"
},
{
"eventId": "6a410b6a-ddde-4be8-bbe1-ae9892cbacfb",
"billingPeriod": "MONTHLY",
"product": "Blowdart",
"priceList": "DEFAULT",
"eventType": "START_BILLING",
"isBlockedBilling": false,
"isBlockedEntitlement": false,
"serviceName": "billing-service",
"serviceStateName": "START_BILLING",
"phase": "blowdart-monthly-trial",
"auditLogs": [],
"effectiveDate": "2017-02-13"
},
{
"eventId": "cdea353d-32ba-4f94-a86d-3ca1e9989dcc",
"billingPeriod": null,
"product": null,
"priceList": null,
"eventType": "STOP_ENTITLEMENT",
"isBlockedBilling": false,
"isBlockedEntitlement": true,
"serviceName": "entitlement-service",
"serviceStateName": "ENT_CANCELLED",
"phase": null,
"auditLogs": [],
"effectiveDate": "2017-02-13"
},
{
"eventId": "2228562e-29da-443d-bd15-79cc25c9bb85",
"billingPeriod": "MONTHLY",
"product": "Blowdart",
"priceList": "DEFAULT",
"eventType": "STOP_BILLING",
"isBlockedBilling": false,
"isBlockedEntitlement": false,
"serviceName": "billing-service",
"serviceStateName": "STOP_BILLING",
"phase": "blowdart-monthly-trial",
"auditLogs": [],
"effectiveDate": "2017-02-13"
}
],
"priceOverrides": [
{
"phaseName": "blowdart-monthly-trial",
"phaseType": "TRIAL",
"fixedPrice": 0,
"recurringPrice": null
},
{
"phaseName": "blowdart-monthly-discount",
"phaseType": "DISCOUNT",
"fixedPrice": null,
"recurringPrice": 9.95
},
{
"phaseName": "blowdart-monthly-evergreen",
"phaseType": "EVERGREEN",
"fixedPrice": null,
"recurringPrice": 29.95
}
],
"auditLogs": []
}