2017 © Pedro Pelรกez
 

library token

This is used to encrypt SyrupPay payment and issue AccessToken. It makes for purpose of deploying to SyrupPay merchants.

image

syruppay/token

This is used to encrypt SyrupPay payment and issue AccessToken. It makes for purpose of deploying to SyrupPay merchants.

  • Wednesday, January 18, 2017
  • by Byeongchan Park
  • Repository
  • 6 Watchers
  • 1 Stars
  • 32 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 1 Open issues
  • 12 Versions
  • 0 % Grown

The README.md

Overview

์‹œ๋ŸฝํŽ˜์ด ์„œ๋น„์Šค์—์„œ ๊ฐ€๋งน์  ์ธ์ฆ ๋ฐ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•œ ๊ทœ๊ฒฉ์„ ์ •์˜ํ•˜๋ฉฐ ์ „์†ก ๊ตฌ๊ฐ„์— ๋Œ€ํ•œ ์•”ํ˜ธํ™” ๋ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ์„ ์œ„ํ•œ ํ† ํฐ์„ ์ƒ์„ฑ, ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค., (*1)

๊ฐœ์„  ํ•ญ๋ชฉ

  1. JWT ๊ทœ๊ฒฉ ๋ฐ ์•”,๋ณตํ˜ธํ™”์— ๋Œ€ํ•œ ๋ณต์žก๋„
  2. ์‹œ๋ŸฝํŽ˜์ด ๊ทœ๊ฒฉ(๋„๋ฉ”์ธ)์— ๋Œ€ํ•œ ๋ณต์žก๋„
  3. ์‹œ๋ŸฝํŽ˜์ด ์„œ๋น„์Šค ํ”„๋กœ์„ธ์Šค ๊ตฌํ˜„์— ๋Œ€ํ•œ ๋ณต์žก๋„(Fluent API ์ง€ํ–ฅ)
  4. ๋ฐ์ดํ„ฐ ์ „์†ก ๊ตฌ๊ฐ„ ๊ตฌํ˜„์— ๋Œ€ํ•œ ๋ณต์žก๋„

Getting Start

PHP version

=> PHP 5.2.0, (*2)

Installation

composer (packagist)

"syruppay/token": "v1.1.2"`

ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ์„ค์ •๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ •๋ณด์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ Syrup Pay Token ์ƒ์„ฑ

ํšŒ์›๊ฐ€์ž…, ์„ค์ •, ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๋“ฑ๊ณผ ๊ฐ™์€ Syrup Pay ์‚ฌ์šฉ์ž ์ •๋ณด ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ† ํฐ์„ ์„ค์ •ํ•˜๊ณ  ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค., (*3)

Code
// ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ, ํ™˜๊ฒฝ ์„ค์ • ์ ‘๊ทผ ์‹œ 
$builder = new syruppay_token_SyrupPayTokenBuilder();
$token = $builder->of("๊ฐ€๋งน์  ID")
    ->login()
    ->withMerchantUserId("๊ฐ€๋งน์ ์˜ ํšŒ์› ID ๋˜๋Š” ์‹๋ณ„์ž")
    ->withExtraMerchantUserId("ํ•ธ๋“œํฐ๊ณผ ๊ฐ™์ด ํšŒ์› ๋ณ„ ์ถ”๊ฐ€ ID ์ฒด๊ณ„๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ ์ž…๋ ฅ")
    ->withSsoCredential("SSO ๋ฅผ ๋ฐœ๊ธ‰ ๋ฐ›์•˜์„ ๊ฒฝ์šฐ ์ž…๋ ฅ")
    ->next()
    ->generateTokenBy("๊ฐ€๋งน์ ์—๊ฒŒ ์ „๋‹ฌํ•œ ๋น„๋ฐ€ํ‚ค");


// ํšŒ์› ๊ฐ€์ž… ์‹œ
$builder = new syruppay_token_SyrupPayTokenBuilder();
$token = $builder->of("๊ฐ€๋งน์  ID")
    ->signUp()
    ->withMerchantUserId("๊ฐ€๋งน์ ์˜ ํšŒ์› ID ๋˜๋Š” ์‹๋ณ„์ž")
    ->withExtraMerchantUserId("ํ•ธ๋“œํฐ๊ณผ ๊ฐ™์ด ํšŒ์› ๋ณ„ ์ถ”๊ฐ€ ID ์ฒด๊ณ„๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ ์ž…๋ ฅ")
    ->withSsoCredential("SSO ๋ฅผ ๋ฐœ๊ธ‰ ๋ฐ›์•˜์„ ๊ฒฝ์šฐ ์ž…๋ ฅ")
    ->next()
    ->generateTokenBy("๊ฐ€๋งน์ ์—๊ฒŒ ์ „๋‹ฌํ•œ ๋น„๋ฐ€ํ‚ค");
token์˜ ๊ฒฐ๊ณผ
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ilx1YWMwMFx1YjlmOVx1YzgxMCBJRCJ9.eyJhdWQiOiJodHRwczpcL1wvcGF5LnN5cnVwLmNvLmtyIiwidHlwIjoiam9zZSIsImlzcyI6Ilx1YWMwMFx1YjlmOVx1YzgxMCBJRCIsImV4cCI6MTQ1NDczMTA0MiwiaWF0IjoxNDU0NzMwNDQyLCJqdGkiOiIyMGEzYzI3NC05YTIyLTQ3ZDUtYmUxMS03ZDJiZWYzOWVhMGMiLCJsb2dpbkluZm8iOnsibWN0VXNlcklkIjoiXHVhYzAwXHViOWY5XHVjODEwXHVjNzU4IFx1ZDY4Y1x1YzZkMCBJRCBcdWI2MTBcdWIyOTQgXHVjMmRkXHViY2M0XHVjNzkwIiwiZXh0cmFVc2VySWQiOiJcdWQ1NzhcdWI0ZGNcdWQzZjBcdWFjZmMgXHVhYzE5XHVjNzc0IFx1ZDY4Y1x1YzZkMCBcdWJjYzQgXHVjZDk0XHVhYzAwIElEIFx1Y2NiNFx1YWNjNFx1YWMwMCBcdWM4NzRcdWM3YWNcdWQ1NjAgXHVhY2JkXHVjNmIwIFx1Yzc4NVx1YjgyNSIsIlNTT0NyZWRlbnRpYWwiOiJTU08gXHViOTdjIFx1YmMxY1x1YWUwOSBcdWJjMWJcdWM1NThcdWM3NDQgXHVhY2JkXHVjNmIwIFx1Yzc4NVx1YjgyNSJ9fQ.b8nQakzSfoAA0PD6FmUbhASLZN3ZYi9M9hvV1AMn_Ow
token์˜ ๋‚ด์šฉ
{
  "aud": "https://pay.syrup.co.kr",
  "typ": "jose",
  "iss": "๊ฐ€๋งน์  ID",
  "exp": 1454731042,
  "iat": 1454730442,
  "jti": "20a3c274-9a22-47d5-be11-7d2bef39ea0c",
  "loginInfo": {
    "mctUserId": "๊ฐ€๋งน์ ์˜ ํšŒ์› ID ๋˜๋Š” ์‹๋ณ„์ž",
    "extraUserId": "ํ•ธ๋“œํฐ๊ณผ ๊ฐ™์ด ํšŒ์› ๋ณ„ ์ถ”๊ฐ€ ID ์ฒด๊ณ„๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ ์ž…๋ ฅ",
    "SSOCredential": "SSO ๋ฅผ ๋ฐœ๊ธ‰ ๋ฐ›์•˜์„ ๊ฒฝ์šฐ ์ž…๋ ฅ"
  }
}

๊ฒฐ์žฌ ์ธ์ฆ์„ ์œ„ํ•œ Syrup Pay Token ์ƒ์„ฑ

Code
$builder = new syruppay_token_SyrupPayTokenBuilder();
$token = $builder->of("๊ฐ€๋งน์  ID")
    ->pay()
    ->withOrderIdOfMerchant("๊ฐ€๋งน์ ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์ฃผ๋ฌธ ID")
    ->withProductTitle("์ œํ’ˆ๋ช…")
    ->withProductUrls(array(
        "http://deal.11st.co.kr/product/SellerProductDetail.tmall?method=getSellerProductDetail&prdNo=1122841340",
        "http://deal.11st.co.kr/product/SellerProductDetail.tmall?method=getSellerProductDetail&prdNo=1265508741"
    ))
    ->withLanguageForDisplay(LANGUAGE_KO)
    ->withAmount(50000)
    ->withCurrency(CURRENCY_KRW)
    ->withShippingAddress(new syruppay_token_claims_elements_ShippingAddress("137-332", "์„œ์ดˆ๊ตฌ ์ž ์›๋™ ํ•˜๋‚˜์•„ํŒŒํŠธ", "1๋™ 1ํ˜ธ", "์„œ์šธ", "", "kr"))
    ->withDeliveryPhoneNumber("01011112222")
    ->withDeliveryName("๋ฐฐ์†ก ์ˆ˜์‹ ์ž")
    ->withInstallmentPerCardInformation(new syruppay_token_claims_elements_CardInstallmentInformation("์นด๋“œ๊ตฌ๋ถ„ ์ฝ”๋“œ", "ํ• ๋ถ€์ •๋ณด. ex. NN1;NN2;YY3;YY4;YY5;NH6"))
    ->withBeAbleToExchangeToCash(false)
    ->withPayableRuleWithCard(PAYABLELOCALERULE_ONLY_ALLOWED_KOR)
    ->next()
    ->generateTokenBy("๊ฐ€๋งน์ ์—๊ฒŒ ์ „๋‹ฌํ•œ ๋น„๋ฐ€ํ‚ค");
token์˜ ๊ฒฐ๊ณผ
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ilx1YWMwMFx1YjlmOVx1YzgxMCBJRCJ9.eyJhdWQiOiJodHRwczpcL1wvcGF5LnN5cnVwLmNvLmtyIiwidHlwIjoiam9zZSIsImlzcyI6Ilx1YWMwMFx1YjlmOVx1YzgxMCBJRCIsImV4cCI6MTQ1NDc0Mzk0NiwiaWF0IjoxNDU0NzQzMzQ2LCJqdGkiOiJkZGRiNjBjNS1mYjAxLTRlZjMtYmYyNi1hNzM1MDU4MzBmZDAiLCJ0cmFuc2FjdGlvbkluZm8iOnsibWN0VHJhbnNBdXRoSWQiOiJcdWFjMDBcdWI5ZjlcdWM4MTBcdWM1ZDBcdWMxMWMgXHVhZDAwXHViOWFjXHVkNTU4XHViMjk0IFx1YzhmY1x1YmIzOCBJRCIsInBheW1lbnRJbmZvIjp7ImNhcmRJbmZvTGlzdCI6W3siY2FyZENvZGUiOiJcdWNlNzRcdWI0ZGNcdWFkNmNcdWJkODQgXHVjZjU0XHViNGRjIiwibW9udGhseUluc3RhbGxtZW50SW5mbyI6Ilx1ZDU2MFx1YmQ4MFx1YzgxNVx1YmNmNC4gZXguIE5OMTtOTjI7WVkzO1lZNDtZWTU7Tkg2In1dLCJwcm9kdWN0VGl0bGUiOiJcdWM4MWNcdWQ0ODhcdWJhODUiLCJwcm9kdWN0VXJscyI6WyJodHRwOlwvXC9kZWFsLjExc3QuY28ua3JcL3Byb2R1Y3RcL1NlbGxlclByb2R1Y3REZXRhaWwudG1hbGw_bWV0aG9kPWdldFNlbGxlclByb2R1Y3REZXRhaWwmcHJkTm89MTEyMjg0MTM0MCIsImh0dHA6XC9cL2RlYWwuMTFzdC5jby5rclwvcHJvZHVjdFwvU2VsbGVyUHJvZHVjdERldGFpbC50bWFsbD9tZXRob2Q9Z2V0U2VsbGVyUHJvZHVjdERldGFpbCZwcmRObz0xMjY1NTA4NzQxIl0sImxhbmciOiJLTyIsImN1cnJlbmN5Q29kZSI6IktSVyIsInBheW1lbnRBbXQiOjUwMDAwLCJzaGlwcGluZ0FkZHJlc3MiOiJrcnwxMzctMzMyfFx1YzExY1x1Y2QwOFx1YWQ2YyBcdWM3YTBcdWM2ZDBcdWIzZDkgXHVkNTU4XHViMDk4XHVjNTQ0XHVkMzBjXHVkMmI4fDFcdWIzZDkgMVx1ZDYzOHxcdWMxMWNcdWM2Yjh8fCIsImRlbGl2ZXJ5UGhvbmVOdW1iZXIiOiIwMTAxMTExMjIyMiIsImRlbGl2ZXJ5TmFtZSI6Ilx1YmMzMFx1YzFhMSBcdWMyMThcdWMyZTBcdWM3OTAiLCJpc0V4Y2hhbmdlYWJsZSI6ZmFsc2V9LCJwYXltZW50UmVzdHJpY3Rpb25zIjp7ImNhcmRJc3N1ZXJSZWdpb24iOiJBTExPV0VEOktPUiJ9fX0.ysALJkS-BCACFmt__5CasVdSfldasq8uuwUEvkfEl5k
token์˜ ๋‚ด์šฉ
{
  "aud": "https://pay.syrup.co.kr",
  "typ": "jose",
  "iss": "๊ฐ€๋งน์  ID",
  "exp": 1454743946,
  "iat": 1454743346,
  "jti": "dddb60c5-fb01-4ef3-bf26-a73505830fd0",
  "transactionInfo": {
    "mctTransAuthId": "๊ฐ€๋งน์ ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์ฃผ๋ฌธ ID",
    "paymentInfo": {
      "cardInfoList": [
        {
          "cardCode": "์นด๋“œ๊ตฌ๋ถ„ ์ฝ”๋“œ",
          "monthlyInstallmentInfo": "ํ• ๋ถ€์ •๋ณด. ex. NN1;NN2;YY3;YY4;YY5;NH6"
        }
      ],
      "productTitle": "์ œํ’ˆ๋ช…",
      "productUrls": [
        "http://deal.11st.co.kr/product/SellerProductDetail.tmall?method=getSellerProductDetail&prdNo=1122841340",
        "http://deal.11st.co.kr/product/SellerProductDetail.tmall?method=getSellerProductDetail&prdNo=1265508741"
      ],
      "lang": "KO",
      "currencyCode": "KRW",
      "paymentAmt": 50000,
      "shippingAddress": "kr|137-332|์„œ์ดˆ๊ตฌ ์ž ์›๋™ ํ•˜๋‚˜์•„ํŒŒํŠธ|1๋™ 1ํ˜ธ|์„œ์šธ||",
      "deliveryPhoneNumber": "01011112222",
      "deliveryName": "๋ฐฐ์†ก ์ˆ˜์‹ ์ž",
      "isExchangeable": false
    },
    "paymentRestrictions": {
      "cardIssuerRegion": "ALLOWED:KOR"
    }
  }
}

ํ† ํฐ ๋ณตํ˜ธํ™”

$token = syruppay_token_SyrupPayTokenBuilder::verify("ํ† ํฐ", "๊ฐ€๋งน์ ์—๊ฒŒ ์ „๋‹ฌํ•œ ๋น„๋ฐ€ํ‚ค");

์ฐธ๊ณ  ์‚ฌํ•ญ

์ด์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์‹œ๋ŸฝํŽ˜์ด ์„œ๋น„์Šค ๊ธฐ๋Šฅ์ด ๋ณตํ•ฉ์ ์ธ ๊ฒฝ์šฐ ์ค‘์ฒฉํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ƒํ™ฉ 1. ์‹œ๋ŸฝํŽ˜์ด ๊ฐ€์ž… ์—ฌ๋ถ€๋ฅผ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์—์„œ ๊ฒฐ์ œ ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ (ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ๊ฒฐ์ œ ๊ฐ€๋Šฅ ํ† ํฐ)
$builder = new syruppay_token_SyrupPayTokenBuilder();
$token = $builder->of("๊ฐ€๋งน์  ID")
    ->signUp()
    ->withMerchantUserId("๊ฐ€๋งน์ ์˜ ํšŒ์› ID ๋˜๋Š” ์‹๋ณ„์ž")
    ->withExtraMerchantUserId("ํ•ธ๋“œํฐ๊ณผ ๊ฐ™์ด ํšŒ์› ๋ณ„ ์ถ”๊ฐ€ ID ์ฒด๊ณ„๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ ์ž…๋ ฅ") // Optional
    ->next()
    ->pay()
    ->withOrderIdOfMerchant("๊ฐ€๋งน์ ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์ฃผ๋ฌธ ID") // ๊ฐ€๋งน์  Transaction Id = mctTransAuthId
    ->withProductTitle("์ œํ’ˆ๋ช…")
    ->withProductUrls(array(
        "http://deal.11st.co.kr/product/SellerProductDetail.tmall?method=getSellerProductDetail&prdNo=1122841340",
        "http://deal.11st.co.kr/product/SellerProductDetail.tmall?method=getSellerProductDetail&prdNo=1265508741"
    )) // Optional
    ->withLanguageForDisplay(LANGUAGE_KO)
    ->withAmount(50000)
    ->withCurrency(CURRENCY_KRW)
    ->withShippingAddress(new syruppay_token_claims_elements_ShippingAddress("137-332", "์„œ์ดˆ๊ตฌ ์ž ์›๋™ ํ•˜๋‚˜์•„ํŒŒํŠธ", "1๋™ 1ํ˜ธ", "์„œ์šธ", "", "kr")) // Optional
    ->withDeliveryPhoneNumber("01011112222") // Optional
    ->withDeliveryName("๋ฐฐ์†ก ์ˆ˜์‹ ์ž") // Optional
    ->withInstallmentPerCardInformation(new syruppay_token_claims_elements_CardInstallmentInformation("์นด๋“œ๊ตฌ๋ถ„ ์ฝ”๋“œ", "ํ• ๋ถ€์ •๋ณด. ex. NN1;NN2;YY3;YY4;YY5;NH6")) // Optional
    ->withBeAbleToExchangeToCash(false) // Optional
    ->withPayableRuleWithCard(PAYABLELOCALERULE_ONLY_ALLOWED_KOR) // Optional
    ->next()
    ->generateTokenBy("๊ฐ€๋งน์ ์—๊ฒŒ ์ „๋‹ฌํ•œ ๋น„๋ฐ€ํ‚ค");
์ƒํ™ฉ 2. ์‹œ๋ŸฝํŽ˜์ด์— ์ž๋™ ๋กœ๊ทธ์ธ ํ›„ ๊ฒฐ์ œ๋ฅผ ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ (์ž๋™ ๋กœ๊ทธ์ธ, ๊ฒฐ์ œ ๊ฐ€๋Šฅ ํ† ํฐ)
$builder = new syruppay_token_SyrupPayTokenBuilder();
$token = $builder->of("๊ฐ€๋งน์  ID")
    ->login()
    ->withMerchantUserId("๊ฐ€๋งน์ ์˜ ํšŒ์› ID ๋˜๋Š” ์‹๋ณ„์ž")
    ->withExtraMerchantUserId("ํ•ธ๋“œํฐ๊ณผ ๊ฐ™์ด ํšŒ์› ๋ณ„ ์ถ”๊ฐ€ ID ์ฒด๊ณ„๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ ์ž…๋ ฅ") // Optional
    ->withSsoCredential("๋ฐœ๊ธ‰ ๋ฐ›์€ SSO")
    ->next()
    ->pay()
    ->withOrderIdOfMerchant("๊ฐ€๋งน์ ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์ฃผ๋ฌธ ID") // ๊ฐ€๋งน์  Transaction Id = mctTransAuthId
    ->withProductTitle("์ œํ’ˆ๋ช…")
    ->withProductUrls(array(
        "http://deal.11st.co.kr/product/SellerProductDetail.tmall?method=getSellerProductDetail&prdNo=1122841340",
        "http://deal.11st.co.kr/product/SellerProductDetail.tmall?method=getSellerProductDetail&prdNo=1265508741"
    )) // Optional
    ->withLanguageForDisplay(LANGUAGE_KO)
    ->withAmount(50000)
    ->withCurrency(CURRENCY_KRW)
    ->withShippingAddress(new syruppay_token_claims_elements_ShippingAddress("137-332", "์„œ์ดˆ๊ตฌ ์ž ์›๋™ ํ•˜๋‚˜์•„ํŒŒํŠธ", "1๋™ 1ํ˜ธ", "์„œ์šธ", "", "kr")) // Optional
    ->withDeliveryPhoneNumber("01011112222") // Optional
    ->withDeliveryName("๋ฐฐ์†ก ์ˆ˜์‹ ์ž") // Optional
    ->withInstallmentPerCardInformation(new syruppay_token_claims_elements_CardInstallmentInformation("์นด๋“œ๊ตฌ๋ถ„ ์ฝ”๋“œ", "ํ• ๋ถ€์ •๋ณด. ex. NN1;NN2;YY3;YY4;YY5;NH6")) // Optional
    ->withBeAbleToExchangeToCash(false) // Optional
    ->withPayableRuleWithCard(PAYABLELOCALERULE_ONLY_ALLOWED_KOR) // Optional
    ->withMerchantDefinedValue('{"id_1":"value", "id_2":2}')    // Optional, 1k ์ œํ•œ
    ->next()
    ->generateTokenBy("๊ฐ€๋งน์ ์—๊ฒŒ ์ „๋‹ฌํ•œ ๋น„๋ฐ€ํ‚ค");

4. ์‹œ๋ŸฝํŽ˜์ด์— ์ž๋™ ๋กœ๊ทธ์ธ ํ›„ ์ •๊ธฐ ๊ฒฐ์ œ ์ƒํ’ˆ์„ ๊ตฌ๋งคํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ(์ž๋™ ๋กœ๊ทธ์ธ, ์ž๋™ ์ •๊ธฐ ๊ฒฐ์ œ ๊ฐ€๋Šฅ ํ† ํฐ)

- ์ค€๋น„์ค‘ -

Extensional Function

์‹œ๋ŸฝํŽ˜์ด ์‚ฌ์šฉ์ž ์—ฐ๋™์„ ์œ„ํ•œ Syrup Pay Token ์„ธํŒ…

Syrup Pay ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜์—ฌ Syrup Pay ์ˆ˜๋™ ๋กœ๊ทธ์ธ ์‹œ ID ์ž๋™ ์ž…๋ ฅ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งค์นญ์ด ๋˜๋Š” ์ •๋ณด๋ฅผ ์„ค์ •ํ•˜๊ณ  ํ† ํฐ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค., (*4)

Java Code
$builder = new syruppay_token_SyrupPayTokenBuilder();
$token = $builder->of("๊ฐ€๋งน์  ID")
    ->login()
    ->withMerchantUserId("๊ฐ€๋งน์ ์˜ ํšŒ์› ID ๋˜๋Š” ์‹๋ณ„์ž")
    ->withExtraMerchantUserId("ํ•ธ๋“œํฐ๊ณผ ๊ฐ™์ด ํšŒ์› ๋ณ„ ์ถ”๊ฐ€ ID ์ฒด๊ณ„๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ ์ž…๋ ฅ")
    ->withSsoCredential("SSO ๋ฅผ ๋ฐœ๊ธ‰ ๋ฐ›์•˜์„ ๊ฒฝ์šฐ ์ž…๋ ฅ")
    ->next()
    ->mapToSyrupPayUser()
    ->withType(MAPPINGTYPE_CI_MAPPED_KEY)
    ->withValue("4987234")
    ->next()
    ->generateTokenBy("๊ฐ€๋งน์ ์—๊ฒŒ ์ „๋‹ฌํ•œ ๋น„๋ฐ€ํ‚ค");
token์˜ ๊ฒฐ๊ณผ
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ilx1YWMwMFx1YjlmOVx1YzgxMCBJRCJ9.eyJhdWQiOiJodHRwczpcL1wvcGF5LnN5cnVwLmNvLmtyIiwidHlwIjoiam9zZSIsImlzcyI6Ilx1YWMwMFx1YjlmOVx1YzgxMCBJRCIsImV4cCI6MTQ1NDc0NDkyNCwiaWF0IjoxNDU0NzQ0MzI0LCJqdGkiOiIzZjllYzM3ZS1mMTUwLTQ0YmUtYWVlYy04NzgyZDlkNTM3YjciLCJsb2dpbkluZm8iOnsibWN0VXNlcklkIjoiXHVhYzAwXHViOWY5XHVjODEwXHVjNzU4IFx1ZDY4Y1x1YzZkMCBJRCBcdWI2MTBcdWIyOTQgXHVjMmRkXHViY2M0XHVjNzkwIiwiZXh0cmFVc2VySWQiOiJcdWQ1NzhcdWI0ZGNcdWQzZjBcdWFjZmMgXHVhYzE5XHVjNzc0IFx1ZDY4Y1x1YzZkMCBcdWJjYzQgXHVjZDk0XHVhYzAwIElEIFx1Y2NiNFx1YWNjNFx1YWMwMCBcdWM4NzRcdWM3YWNcdWQ1NjAgXHVhY2JkXHVjNmIwIFx1Yzc4NVx1YjgyNSIsIlNTT0NyZWRlbnRpYWwiOiJTU08gXHViOTdjIFx1YmMxY1x1YWUwOSBcdWJjMWJcdWM1NThcdWM3NDQgXHVhY2JkXHVjNmIwIFx1Yzc4NVx1YjgyNSJ9LCJ1c2VySW5mb01hcHBlciI6eyJtYXBwaW5nVHlwZSI6IkNJX01BUFBFRF9LRVkiLCJtYXBwaW5nVmFsdWUiOiI0OTg3MjM0In19.DaBLUtyRzdRRDg7Z2lU0v65myvfuFD08qo-gz9UfeR0
token์˜ ๋‚ด์šฉ
{
  "aud": "https://pay.syrup.co.kr",
  "typ": "jose",
  "iss": "๊ฐ€๋งน์  ID",
  "exp": 1454744924,
  "iat": 1454744324,
  "jti": "3f9ec37e-f150-44be-aeec-8782d9d537b7",
  "loginInfo": {
    "mctUserId": "๊ฐ€๋งน์ ์˜ ํšŒ์› ID ๋˜๋Š” ์‹๋ณ„์ž",
    "extraUserId": "ํ•ธ๋“œํฐ๊ณผ ๊ฐ™์ด ํšŒ์› ๋ณ„ ์ถ”๊ฐ€ ID ์ฒด๊ณ„๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ ์ž…๋ ฅ",
    "SSOCredential": "SSO ๋ฅผ ๋ฐœ๊ธ‰ ๋ฐ›์•˜์„ ๊ฒฝ์šฐ ์ž…๋ ฅ"
  },
  "userInfoMapper": {
    "mappingType": "CI_MAPPED_KEY",
    "mappingValue": "4987234"
  }
}

์ฐธ๊ณ  ์‚ฌํ•ญ

์ด์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์‹œ๋ŸฝํŽ˜์ด ์„œ๋น„์Šค ๊ธฐ๋Šฅ์ด ๋ณตํ•ฉ์ ์ธ ๊ฒฝ์šฐ ์ค‘์ฒฉํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ƒํ™ฉ 1.
์ƒํ™ฉ 2.

์‹œ๋ŸฝํŽ˜์ด ์ฒดํฌ์•„์›ƒ ๊ธฐ๋Šฅ ์‚ฌ์šฉํ•˜๊ธฐ

๊ฐ€๋งน์ ์˜ ์ฟ ํฐ, ์‚ฌ์šฉ์ž ๋ฉค๋ฒ„์‰ฝ, ์‚ฌ์šฉ์ž์˜ ๋ฐฐ์†ก์ง€์™€ ๊ฐ™์€ ์ฃผ๋ฌธ ๊ด€๋ จ ์ •๋ณด์™€ ๊ธฐ์กด ์‹œ๋ŸฝํŽ˜์ด์˜ ๊ฐ„ํŽธ ๊ฒฐ์ œ๋ฅผ ์ข€ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ(Seamless) ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์‹œ๋ŸฝํŽ˜์ด์˜ ํ™•์žฅ๋œ ๊ธฐ๋Šฅ, (*5)

์ฃผ์˜

์ฟ ํฐ(Offer)๊ณผ ๋ฉค๋ฒ„์‰ฝ ํฌ์ธํŠธ(Loyalty)์— ๋Œ€ํ•œ ๋ณตํ•ฉ ๊ฒฐ์ œ๋ฅผ ์ง€์›ํ•œ๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ํ•ด๋‹น ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‚ฌ์ „ ํ˜‘์˜ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค., (*6)

์‹œ๋ŸฝํŽ˜์ด ์ฒดํฌ์•„์›ƒ์„ ์ด์šฉํ•˜์—ฌ ๊ฐ€๋งน์ ์˜ ์ฟ ํฐ(Offer)์„ ํ•จ๊ป˜ ๊ฒฐ์ œ ์ธ์ฆํ•˜๊ธฐ ์œ„ํ•œ Syrup Pay Token ์ƒ์„ฑ

- ์ค€๋น„์ค‘ -

์‹œ๋ŸฝํŽ˜์ด ์ฒดํฌ์•„์›ƒ์„ ์ด์šฉํ•˜์—ฌ ๋ฉค๋ฒ„์‰ฝ ํฌ์ธํŠธ(Loyalty)๋ฅผ ํ•จ๊ป˜ ๊ฒฐ์ œ ์ธ์ฆํ•˜๊ธฐ ์œ„ํ•œ Syrup Pay Token ์ƒ์„ฑ

- ์ค€๋น„์ค‘ -

์‹œ๋ŸฝํŽ˜์ด ์ฒดํฌ์•„์›ƒ์„ ์ด์šฉํ•˜์—ฌ ๋ฐฐ์†ก์ง€ ์ •๋ณด๋ฅผ ๋ฉค๋ฒ„์‰ฝ ํฌ์ธํŠธ(Loyalty)๋ฅผ ํ•จ๊ป˜ ๊ฒฐ์ œ ์ธ์ฆํ•˜๊ธฐ ์œ„ํ•œ Syrup Pay Token ์ƒ์„ฑ

- ์ค€๋น„์ค‘ -

์ฃผ์˜

  1. ํ•œ๋ฒˆ ํ† ํฐ์„ ์ƒ์„ฑํ•œ SyrupPayTokenBuilder ๋ฅผ ์žฌ์ด์šฉํ•˜์—ฌ ๋‹ค์‹œ ํ† ํฐ์„ ๋นŒ๋“œํ•˜๊ฑฐ๋‚˜ JSON ์„ ์žฌ์„ฑ์„ฑ ํ•  ์ˆ˜ ์—†๋‹ค.
  2. ๊ฐ๊ฐ์˜ ํ† ํฐ์— ๋Œ€ํ•œ ๋‚ด์šฉ(Claim)์€ ์‚ฌ์šฉ์ž ํŽธ์˜์— ๋”ฐ๋ผ ์ž…๋ ฅ ํ›„ ํ† ํฐ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Required ๋˜๋Š” ํ•„๋“œ์— ๋Œ€ํ•˜์—ฌ ๋ฏธ์ž…๋ ฅ ์‹œ ํ† ํฐ ์ƒ์„ฑ ์‹œ์ (SyrupPayTokenHandler#generateTokenBy(key) ํ˜ธ์ถœ ์‹œ์ )์— InvalidArgumentException ์„ throw ํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ํ† ํฐ์ด ์ƒ์„ฑ๋œ ์ดํ›„ ์œ ํšจ์‹œ๊ฐ„์€ 10๋ถ„์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉฐ ์ด์— ๋Œ€ํ•œ ์ˆ˜์ •์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ Syrup Pay ๊ฐœ๋ฐœํŒ€๊ณผ ํ˜‘์˜ ํ›„ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

  1. JOSE RFC - https://tools.ietf.org/wg/jose
  2. Syrup Pay JOSE - https://github.com/skplanet/jose_php
  3. JWT IO - http://jwt.io/

The Versions

18/01 2017

dev-develop

dev-develop

This is used to encrypt SyrupPay payment and issue AccessToken. It makes for purpose of deploying to SyrupPay merchants.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Avatar Byeongchan Park

syrup syruppay syruppay-token

18/01 2017

dev-master

9999999-dev

This is used to encrypt SyrupPay payment and issue AccessToken. It makes for purpose of deploying to SyrupPay merchants.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Avatar Byeongchan Park

syrup syruppay syruppay-token

18/01 2017

v1.1.2

1.1.2.0

This is used to encrypt SyrupPay payment and issue AccessToken. It makes for purpose of deploying to SyrupPay merchants.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Avatar Byeongchan Park

syrup syruppay syruppay-token

18/01 2017

dev-dev/52x

dev-dev/52x

This is used to encrypt SyrupPay payment and issue AccessToken. It makes for purpose of deploying to SyrupPay merchants.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Avatar Byeongchan Park

syrup syruppay syruppay-token

18/11 2016

v1.1.1

1.1.1.0

This is used to encrypt SyrupPay payment and issue AccessToken. It makes for purpose of deploying to SyrupPay merchants.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Avatar Byeongchan Park

syrup syruppay syruppay-token

22/09 2016

v1.1.0

1.1.0.0

This is used to encrypt SyrupPay payment and issue AccessToken. It makes for purpose of deploying to SyrupPay merchants.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Avatar Byeongchan Park

syrup syruppay syruppay-token

21/09 2016

v1.0.3

1.0.3.0

This is used to encrypt SyrupPay payment and issue AccessToken. It makes for purpose of deploying to SyrupPay merchants.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Avatar Byeongchan Park

syrup syruppay syruppay-token

24/08 2016

dev-dev/v1.0.x

dev-dev/v1.0.x

This is used to encrypt SyrupPay payment and issue AccessToken. It makes for purpose of deploying to SyrupPay merchants.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Avatar Byeongchan Park

syrup syruppay syruppay-token

24/08 2016

dev-master-v1.0.x

dev-master-v1.0.x

This is used to encrypt SyrupPay payment and issue AccessToken. It makes for purpose of deploying to SyrupPay merchants.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Avatar Byeongchan Park

syrup syruppay syruppay-token

24/08 2016

v1.0.2

1.0.2.0

This is used to encrypt SyrupPay payment and issue AccessToken. It makes for purpose of deploying to SyrupPay merchants.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Avatar Byeongchan Park

syrup syruppay syruppay-token

15/02 2016

v1.0.1

1.0.1.0

This is used to encrypt SyrupPay payment and issue AccessToken. It makes for purpose of deploying to SyrupPay merchants.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Avatar Byeongchan Park

syrup syruppay syruppay-token

06/02 2016

v1.0.0

1.0.0.0

This is used to encrypt SyrupPay payment and issue AccessToken. It makes for purpose of deploying to SyrupPay merchants.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Avatar Byeongchan Park

syrup syruppay syruppay-token