국가별 통화,환불,인보이스,가상화폐 테스트 분석서 - SeungpilPark/uEngine-bill GitHub Wiki
국가별 통화 아키텍처를 정하기 전에 각 PG 사가 멀티 통화에 대해 어느정도의 범위를 지원하는지 알아볼 필요가 있다.
다음은 Paypal payments 가 지원하는 멀티 통화에 대한 범위이다.
여기서 말하는 멀티 통화란, Paypal 상인 계정, 즉 빌링 프레임워크의 테넌트 관리자의 Local Currency 대비 구매자가 다른 통화로 결제하였을 경우, Paypal 이 테넌트 관리자의 계좌로 판매대금을 입금하는 과정에서 Currency rating 이 일어나야 하는데, 국가별로 금융법이 다르기 때문에 지원하는 영역이 제한적일 수 있다.
Currency | Currency code | Per transaction limit |
---|---|---|
Australian Dollar | AUD | |
Brazilian RealNote: This currency is supported as a payment currency and a currency balance for in-country PayPal accounts only. | BRL | |
Canadian Dollar | CAD | |
Czech Koruna | CZK | |
Danish Krone | DKK | |
Euro | EUR | |
Hong Kong Dollar | HKD | |
Hungarian ForintNote: Decimal amounts are not supported for this currency. Passing a decimal amount will throw an error. | HUF | |
Israeli New Sheqel | ILS | |
Japanese YenNote: This currency does not support decimals. Passing a decimal amount will throw an error. | JPY | 1,000,000 |
Malaysian RinggitNote: This currency is supported as a payment currency and a currency balance for in-country PayPal accounts only. | MYR | |
Mexican Peso | MXN | |
Norwegian Krone | NOK | |
New Zealand Dollar | NZD | |
Philippine Peso | PHP | |
Polish Zloty | PLN | |
Pound Sterling | GBP | |
Russian Ruble | RUB | For in-border payments (payments made within Russia), the Russian Ruble is the only accepted currency. If you use another currency for in-border payments, the transaction fails and returns the 10001 error code – Internal Error. |
Singapore Dollar | SGD | |
Swedish Krona | SEK | |
Swiss Franc | CHF | |
Taiwan New DollarNote: Decimal amounts are not supported for this currency. Passing a decimal amount will throw an error. | TWD | |
Thai Baht | THB | |
U.S. Dollar | USD |
찾아본 몇몇 PG 사들도 모든 Currency 에 대해 지원하는 것이 아니다. 이러한 기반 사항을 알아두고 몇몇 빌링 프레임워크의 멀티 통화 지원 정책을 살펴보도록 한다.
국가별 통화 정책은 두개의 플랫폼을 벤치마킹 했을 때, 다음과 같은 차이점이 있는 것을 볼 수 있었다.
- killbill: 모든 plan 에 대해 currency 별로 가격 책정을 해놓고, 상품을 판매할 때 해당 currency 풀 내에서 사용자가 선택할 수 있다.
- Zoho: 테넌트 의 기본 currency 가 있고, 테넌트 관리자는 currency 리스트를 작성하고 기본 currency 와의 환율을 책정할 수 있다.
두가지 차이점에 대해 Static currency 와 Flexible currency 라 명명하겠다.
killbill 의 카달로그에서 Static currency 를 차용한 모습은 다음과 같다.
<plans>
<plan name="standard-monthly">
<product>Standard</product>
<initialPhases>
<phase type="TRIAL">
<duration>
<unit>DAYS</unit>
<number>30</number>
</duration>
<billingPeriod>NO_BILLING_PERIOD</billingPeriod>
<fixedPrice> <!-- empty price implies $0 -->
</fixedPrice>
</phase>
</initialPhases>
<finalPhase type="EVERGREEN">
<duration>
<unit>UNLIMITED</unit>
</duration>
<billingPeriod>MONTHLY</billingPeriod>
<recurringPrice>
<price>
<currency>GBP</currency>
<value>75.00</value>
</price>
<price>
<currency>USD</currency>
<value>100.00</value>
</price>
</recurringPrice>
</finalPhase>
</plan>
...
</plans>
위의 경우, EVERGREEN 플랜에 대해 구매자는 GBP 과 USD 두가지 환율만 선택할 수 있고, 다른 선택의 여지는 없다.
위 그림은 Zoho 의 테넌트 메뉴에서 currency 설정 화면이다.
위 상황에서 테넌트의 기본 currency 는 USD 이고, 이 테넌트가 독일에서 거주하는 구매자를 확보하였는데, 이 독일인이 가입당시 자신의 결제 통화를 GBP 로 설정하였다.
이 독일인에게 새 구독을 만들어줄때, 아래와 같은 그림을 볼 수 있다.
이 방식의 경우 제품 플랜은 USD 로만 책정할 수 있다. 이후 구매자의 통화가 GBR 이기 때문에, 미리 설정해놓은 USD 와 GBR 의 환율에 맞추어서 청구금액이 달라지게 된다. 구매 당시의 환율에 맞추어 청구 된 GBR AMOUNT 는 후에 환율이 달라지더라도 구매자와 계약한 금액으로 계속 청구가 되게 된다.(고객이 동의하면 업데이트 할 수 있다.)
두 방식은 장단점이 있다고 생각하는데, 표로 정리하면 다음과 같다.
쟁점 | Static Currency | Flexible currency |
---|---|---|
PG 사의 Multi Currency 지원여부에 대한 대책 | 상품 등록시 미지원 currency 를 제공하지 않는다. | 구매자 등록시 미지원 currency 를 지원하지 않는다. |
구매자 입장 | 상품에 등록된 currency 일람 중 택 1 가능 | 가입당시 지정된 currency 로 구매단가가 표기 |
환율 변동에 대한 대처(환율 급락 등) | 모든 상품마다 currency 를 변경해야 한다. | 테넌트 관리자가 currency rate 를 수정. |
통계 | 각기 다른 currency 구매 이력에 대해 일관된 통계를 내기 어려움 | 테넌트 기준 currency 로 통계가 가능 |
아래의 시나리오들은 환불이 일어날 수 있는 상황들이다.
- 서브스크립션의 계약 금액을 변동했을경우(downgrade)
- 할인 쿠폰을 즉시 적용했을 경우
- 구매자의 구독기간이 남아있는 상태에서 취소했을 경우
- 구매자의 문의로 타당한 환불 사유가 있을 경우
- 구매자가 더 저렴한 플랜으로 변경했을 경우
위의 상황에서, killbill 은 해당 트랜잭션에 대해 PG 사에 refund API 를 요청하지만, Zoho 에서는 아래와 같은 Credit 가 생성된다.
환불이 일어날 경우 Credit(가상 화폐)를 먼저 구매자에게 지급 한 후, 관리자가 검토 후 Refund 요청을 하였을 때 최종 환불이 되는 구조이다.
이러한 방식과 또 Credit 를 사용하여 환불 혹은 생성 하게 해 줄 수 있는 UI 는 관리측면에서 필요한 것으로 생각된다.
PG 트랜잭션이 모든 상황에 대해 100% 인 것이 아니고, Sass 운영 중 일어날 수 있는 다양한 상황에 가상화폐의 개념은 고객 매니지먼트의 유연성을 가져다 줄 것이다.
또한 PG 트랜잭션 이 UNDEFINED 인 상황에 봉착할 경우 관리자가 문제점을 되집어 가도록 하거나 복잡한 Retry 스케쥴을 수행할 알고리즘을 적용하는 것 보다, UNDEFINED 혹은 FAIL 발생시 적용하려 했던 AMOUNT 의 증감을 사용자에게 가상화폐로 부여하고, 관리자가 이를 체크하는 방식이 더 유연해 보인다.
인보이스 발행에서 killbill 과 zoho 는 모두 동일한 기능을 가지는 가운데, 한가지 차이점이 있다.
- killbill: 구매자의 BCD(결제일) 에 구독건들이 일괄청구하는 기능이 있음.(구매자 일할 청구일 지정)
- zoho: 개별 구독건마다 인보이스가 발송.
포시에스 같이 마켓플레이스의 주 고객층이 개인이 아닌 회사이고 많은 Product 를 구매할 수 있는 여지가 있을 경우 구매자 일할 청구일 지정 기능은 필요해 보인다.