빌링 서비스 및 오픈소스 도구 PG 연계 테스트 매뉴얼 - SeungpilPark/uEngine-bill GitHub Wiki

Scenario

Requirements

  • MySQL
  • killbill server
  • cUrl

Setup

Payment gateways setup

Stripe

1)stripe.com 에서 무료 계정을 생성한다.

  1. API Key Settings 메뉴로 간다.

  2. Test Secret Key 를 적어둔다.

PayPal

  1. paypal.com 개발자사이트에서 무료 계정을 생성한다.

  2. Dashboard 에서 Create Account 를 클릭한다. (Personal 과 Business account 모두 생성가능하다). Business account 는 과금을 수집할 merchant 계정이고 Personal account 는 구독료를 지불할 계정이다.

  3. Personal account 에 일정량의 금액을 설정한다.(balance)

혹시, 2016년 이전에 만들어진 페이팔 계정인 경우 Reference transaction 을 사용할 수 없다.(종량제 과금을 부여하기 위해 필요함.) 따라서 아래 절차를 따라야 한다.

Go to PayPal Technical Support

Create a ticket and ask to "Enable reference transactions for the Sandbox account XXXXX". Replace XXX with the API username of the Business test account you created (to see the username, click on Profile in the dashboard under the email address of the account, then click on the API credentials tab)

This process can take up to 48 hours. In the meantime, while you will be able to test one-time purchases, you won’t be able to test recurring transactions in PayPal.

Mysql ddl

curl https://raw.githubusercontent.com/killbill/killbill-stripe-plugin/master/db/ddl.sql | mysql -h 127.0.0.1 -ukillbill -pkillbill killbill
curl https://raw.githubusercontent.com/killbill/killbill-paypal-express-plugin/master/db/ddl.sql | mysql -h 127.0.0.1 -ukillbill -pkillbill killbill

Plugins installation

킬빌의 KAUI 사이트에서 다음 플러그인을 추가한다.

Stripe 설정

테넌트 구성 페이지로 이동하여 하단의 "Plugin Config"탭을 선택한다. 플러그인 이름으로 stripe 를 입력하면 UI에서 비밀 키를 묻는다.

PayPal 설정

테넌트 구성 페이지로 가서 하단의 "Plugin Config"탭을 선택하십시오. 플러그인 이름으로 paypal을 입력하면 서명, 로그인아이디 및 비밀번호를 묻는 UI가 표시된다.

테스트 절차

Creating accounts

KAUI 사이트에서 테넌트 메뉴로 들어간 후, account 생성을 하고 id 를 기억한다.

Storing payment methods

생성한 어카운트(구매자) 계정에 결제 수단을 지정하기 위해 다음 코드를 실행한다.

Stripe

스트라이프는 html 상에서 스트라이프의 stripe.js 라이브러리를 사용함으로써 checkout 을 먼저 수행해야 한다.

자바스크립트가 스트라이프로부터 리턴 받은 값에는 token 이 포함되어있다. 이 토큰을 killbill 서버로 보낸다.

curl -v \
     -X POST \
     -u admin:password \
     -H 'Content-Type: application/json' \
     -H 'X-Killbill-ApiKey:bob' \
     -H 'X-Killbill-ApiSecret:lazar' \
     -H 'X-Killbill-CreatedBy: creator' \
     --data-binary '{
       "pluginName": "killbill-stripe",
       "pluginInfo": {
         "properties": [
           {
             "key": "token",
             "value": "t3GER3BP3JHLASZe"
           }
         ]
       }
     }' \
     "http://127.0.0.1:8080/1.0/kb/accounts/<ACCOUNT_ID>/paymentMethods?isDefault=true"

Paypal

curl -v \
     -X POST \
     -u admin:password \
     -H 'Content-Type: application/json' \
     -H 'X-Killbill-ApiKey:bob' \
     -H 'X-Killbill-ApiSecret:lazar' \
     -H 'X-Killbill-CreatedBy: creator' \
     --data-binary '{
       "kb_account_id": "<ACCOUNT_ID>",
       "currency": "USD",
       "options": {
         "return_url": "http://www.google.com/?q=SUCCESS",
         "cancel_return_url": "http://www.google.com/?q=FAILURE",
         "billing_agreement": {
           "description": "Your subscription"
         }
       }
     }' \
     "http://127.0.0.1:8080/plugins/killbill-paypal-express/1.0/setup-checkout"

위 요청이 성공할경우 302 Found on success 가 반환되고, Location header 에 있는 url 로 구매자를 리다이렉션 해야한다.

ex) https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-20G53990M6953444J.

리다이렉션 된 페이지는 페이팔의 checkout 폼이다.

사용자가 이 폼에서 결제 수락을 할 경우, 페이팔은 처음 호출 때 지정한 return_url 로 반환시켜준다.

return_url 에서는 아래와 같은 코드를 킬빌 서버로 보내주어야 한다.

curl -v \
     -X POST \
     -u admin:password \
     -H 'Content-Type: application/json' \
     -H 'X-Killbill-ApiKey:bob' \
     -H 'X-Killbill-ApiSecret:lazar' \
     -H 'X-Killbill-CreatedBy: creator' \
     --data-binary '{
       "pluginName": "killbill-paypal-express",
       "pluginInfo": {
         "properties": [
           {
             "key": "token",
             "value": "EC-20G53990M6953444J"
           }
         ]
       }
     }' \
     "http://127.0.0.1:8080/1.0/kb/accounts/<ACCOUNT_ID>/paymentMethods?isDefault=true"

Processing payments

이후 결제는 PG 종류에 상관없이, 아래와 같이 호출한다.

curl -v \
     -u admin:password \
     -H "X-Killbill-ApiKey: bob" \
     -H "X-Killbill-ApiSecret: lazar" \
     -H "Content-Type: application/json" \
     -H "X-Killbill-CreatedBy: demo" \
     --data-binary '{"transactionType":"PURCHASE","amount":"10","currency":"USD"}' \
     "http://127.0.0.1:8080/1.0/kb/accounts/<ACCOUNT_ID>/payments"
⚠️ **GitHub.com Fallback** ⚠️