Skip to content

Latest commit

 

History

History
executable file
·
172 lines (124 loc) · 8.61 KB

profile_sharing_server.md

File metadata and controls

executable file
·
172 lines (124 loc) · 8.61 KB

個人設定共有のためのサーバー側の統合

ユーザーが、自分のPayPalアカウントの使用をアプリに承認すると、この承認を使用して、そのユーザーのPayPal情報を取り出すトークンを取得できます。

このドキュメントには以下の方法が記載されています。

  1. OAuth2のトークンを取得する
  2. 取得したトークンを使用して顧客情報を取得する

ユーザーに、アプリで個人設定の共有を承認し、同意してもらうには、個人設定の共有を参照してください。

OAuth2のトークンを取得する

  1. 認可コードを取得する
  2. 認可コードとリフレッシュ/アクセストークンを交換する

認可コードを取得する

モバイルSDKは、個人設定の共有についてユーザーの同意を得るためのAPIを提供しています。アプリにSDKを統合し、それを使ってユーザーを認証し、ユーザーの同意を得ます。SDKは、PayPal認証サーバーで認証および承認を処理し、OAuth2の認可コードをアプリに返します。

この認可応答はJSONオブジェクトです。例

{
    "response_type": "authorization_code",
    "response": {
        "code": "EBYhRW3ncivudQn8UopLp4A28xIlqPDpAoqd7biDLpeGCPvORHjP1Fh4CbFPgKMGCHejdDwe9w1uDWnjPCp1lkaFBjVmjvjpFtnr6z1YeBbmfZYqa9faQT_71dmgZhMIFVkbi4yO7hk0LBHXt_wtdsw",
    },
    "client": {
        "environment": "live",
        "paypal_sdk_version": "2.0.0",
        "platform": "iOS",
        "product_name": "PayPal iOS SDK"
    }
}

アプリは、この認可応答をサーバーに送信する必要があります。サーバーは、次のセクションで説明するように、認可コードと、リフレッシュトークンおよびアクセストークンを交換する必要があります。

認可コードとリフレッシュ/アクセストークンを交換する

サーバーが認可コードを取得すると、これを使用して、有効期限の長いリフレッシュトークンと有効期限の短いアクセストークンを取得できるようになります。サーバーとPayPal APIの通信は、標準的なOAuth2の認可コードグラントアクセスリクエストです。

認可コードには、非常に短い有効期限が設定されています。ただちに認可コードをリフレッシュトークンとアクセストークンに交換する必要があります。

リフレッシュトークンの有効期限は長く、現在のところ10年です。安全に保管する必要があります。

返されるコードやトークンの値はすべて可変長として扱ってください。今後さらに長くなる可能性がありますので、最大長が固定されているものとして扱わないでください。

リクエスト

curl 'https://api.paypal.com/v1/oauth2/token' \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Authorization: Basic QWZV...==" \
    -d 'grant_type=authorization_code&response_type=token&redirect_uri=urn:ietf:wg:oauth:2.0:oob&code=EBYhRW3ncivudQn8UopLp4A28...'
  • grant_type: トークンのグラントタイプです。値はauthorization_codeに設定する必要があります。
  • redirect_uri: リダイレクトURLです。値はurn:ietf:wg:oauth:2.0:oobに設定する必要があります。
  • code: 認可サーバーから以前に受信した認可コードです。

応答

{
    "access_token": "6oyryV79E.KtpAvPudpI8VIko.ntdPikU9HCDfg0tO0",
    "expires_in": 900,
    "refresh_token": "MFYQJTPW3zlCAjznPs2D0VQlQXwiEfTesR-dRiU_qhbUngzxR3NmeBxqKELcmGtSI739R-awwvOyGVO1LJbowy7n8Ul3vsf5HQDTCzUlDylqBvW0",
    "scope": "https://api.paypal.com/v1/payments/.* https://uri.paypal.com/services/payments/futurepayments",
    "token_type": "Bearer"
}
  • access_token: 認可サーバーによって発行されたアクセストークンです。
  • expires_in: アクセストークンの秒単位での有効期限です。アクセストークンの期限切れ後、refresh_tokenを使用してアクセストークンを更新します。
  • refresh_token: リフレッシュトークン。OAuth2.0 RFC6749 - セクション6で説明されているように、これにより、同じ認可グラントを使用する新しいアクセストークンを取得することができます。
  • scope: このリフレッシュトークンに関連するスコープ値をスペースで区切ったリストです。
  • token_type: OAuth2.0 RFC6749 - セクション7.1で説明されているタイプの発行済みトークンです。値は、大文字と小文字が区別されます。

顧客情報の取得

サーバーが、同意を得ているユーザーのPayPal情報を取り出す必要がある場合、サーバーコードで以下を実行する必要があります。

  1. ユーザーのリフレッシュトークンを検索し、それを使用して新しいアクセストークンを取得する
  2. 有効なアクセストークンを使用して顧客情報を取り出す

アクセストークンの更新

前述したように、アクセストークンには有効期限があります。アクセストークンの期限が切れた場合は、リフレッシュトークンを使用して新しいアクセストークンを取得する必要があります。

リクエスト

curl 'https://api.paypal.com/v1/oauth2/token' \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Authorization: Basic QWZVa...==" \
    -d 'grant_type=refresh_token&refresh_token=MFYQ...'
  • grant_type: トークンのグラントタイプです。値はrefresh_tokenに設定する必要があります。必須です。
  • refresh_token: 更新されるアクセストークンとともに以前に受信したリフレッシュトークンです。必須です。

応答

{
    "access_token": "WfXdnxmyJtdF4q59ofxuQuAAk6eEV-Njm6puht3Nk3w",
    "app_id": "APP-3TS46380HB829954H",
    "expires_in": 900,
    "scope": "https://api.paypal.com/v1/payments/.* https://uri.paypal.com/services/payments/futurepayments",
    "token_type": "Bearer"
}

有効なアクセストークンを使用した顧客情報の取得

HTTPのAuthorizationヘッダーの値としてアクセストークンを使用して、次のように情報を取り出します。

Authorization: Bearer YOUR_ACCESS_TOKEN

たとえば、ユーザーが共有に同意した全情報を取得する場合は、リクエストを次のように使用します。

リクエスト

curl -v https://api.paypal.com/v1/identity/openidconnect/userinfo/?schema=openid \
    -H "Content-Type:application/json" \
    -H "Authorization: Bearer WfXdnxmyJtdF4q59ofxuQuAAk6eEV-Njm6puht3Nk3w"

応答

{  
   "address":{  
      "postal_code":"95131",
      "locality":"San Jose",
      "region":"CA",
      "country":"US",
      "street_address":"3 Main St"
   },
   "family_name":"Smith",
   "language":"en_US",
   "phone_number":"4082560980",
   "locale":"en_US",
   "name":"Roger Smith",
   "email":"[email protected]",
   "account_type":"PERSONAL",
   "birthday":"1982-08-02",
   "given_name":"Roger",
   "user_id":"https://www.paypal.com/webapps/auth/identity/user/jG8zVpn2toXCPmzNffW1WTRLA2KOhPXYybeTM9p3ct0"
}

関連情報: