Skip to content

서브스크립션 생성 및 청구 금액 정산 분석서

SeungpilPark edited this page Mar 20, 2017 · 1 revision

과금 규칙 생성 및 관리

이 섹션에 기술하는 내용은 과금 규칙에 대한 오퍼레이팅 및 코드 디버깅 결과를 조합하여,

  1. 테넌트 별 과금 규칙 셀프 서비스를 제공하고,
  2. 동적카달로그 배포시 저장된 과금 규칙을 테넌트 별로 제공하여 오리지널 킬빌의 카달로그 xml rule 과 동일한 기능을 제공하고,
  3. ui 로 이를 제어할 수 있는 화면을 제공함을 위함이다.
  • 버젼1 제공목표 : 테넌트 별 과금 규칙을 생성, 적용한다.
  • 버전2 제공목표 : 프로덕트별 과금 규칙을 별도 생성, 적용한다.
  • 버젼2 는 killbill 의 언다큐먼트(다큐먼트로 제공되지 않고 소스코드로 존재) 요소이다.

구독 생성, 취소, 변경을 위한 Killbill Proxy 인터셉터

아래의 코드는 킬빌로의 Rest 통신을 인터셉트하여, 서브스크립션의 버젼별 가격을 제공하기 위한 로직처리의 일부분이다.

            //서브스크립션 추가
            if (requestURI.equals("/rest/v1/subscriptions") && request.getMethod().toLowerCase().equals("post")) {
                Map map = new ObjectMapper().readValue(request.getInputStream(), Map.class);
                body = JsonUtils.marshal(map);
                plan_names.add(map.get("planName").toString());
                accountId = map.get("accountId").toString();
                command = "createSubscription";
            }

            //서브스크립션 변경
            else if (requestURI.startsWith("/rest/v1/subscriptions/") && request.getMethod().toLowerCase().equals("put") && occurance == 4) {
                Map map = new ObjectMapper().readValue(request.getInputStream(), Map.class);
                body = JsonUtils.marshal(map);
                plan_names.add(map.get("planName").toString());
                accountId = map.get("accountId").toString();
                command = "updateSubscription";
            }

            //createEntitlementWithAddOns
            else if (requestURI.equals("/rest/v1/subscriptions/createEntitlementWithAddOns") && request.getMethod().toLowerCase().equals("post")) {
                List<Map> list = new ObjectMapper().readValue(request.getInputStream(), List.class);
                body = JsonUtils.marshal(list);
                for (Map map : list) {
                    accountId = map.get("accountId").toString();
                    plan_names.add(map.get("planName").toString());
                }
                command = "createEntitlementWithAddOns";
            }

            //createEntitlementsWithAddOns
            else if (requestURI.equals("/rest/v1/subscriptions/createEntitlementsWithAddOns") && request.getMethod().toLowerCase().equals("post")) {
                List<Map> list = new ObjectMapper().readValue(request.getInputStream(), List.class);
                body = JsonUtils.marshal(list);
                for (Map map : list) {
                    List<Map> baseEntitlementAndAddOns = (List<Map>) map.get("baseEntitlementAndAddOns");
                    for (Map entitlementAndAddOn : baseEntitlementAndAddOns) {
                        plan_names.add(entitlementAndAddOn.get("planName").toString());
                        accountId = entitlementAndAddOn.get("accountId").toString();
                    }
                }
                command = "createEntitlementsWithAddOns";
            }
  • POST /rest/v1/subscriptions
  • PUT /rest/v1/subscriptions
  • POST /rest/v1/subscriptions/createEntitlementWithAddOns
  • POST /rest/v1/subscriptions/createEntitlementsWithAddOns
Clone this wiki locally