ウォレットアプリ向け:ユーザーのレシートをOAuthで取得するガイド
このガイドはユーザーが自身の Receipt Roller アカウントと連携し、購買レシートを iOS・Android・LINE Mini App などで閲覧するウォレット型アプリ向けです(ユーザーの同意のもとに
user.receipts.read スコープでデータを取得します)。店舗が自社アプリでデジタルレシートをお客様に発行し、Webhook でリアルタイム通知を受け取りたい場合は、店舗向けガイドをご覧ください。
ウォレットアプリ向け:ユーザーのレシートをOAuthで取得するガイド
自社のiOSアプリ・Androidアプリ・LINE Mini Appを持つ店舗・ブランド向けのデベロッパーガイドです。
レシートローラーのOAuth認証とAPIを使えば、自分の店舗で発行されたデジタルレシートをユーザーの同意のもとで取得し、自社アプリに表示することができます。
ユースケース
たとえば、こんな使い方ができます。
- コーヒーチェーンが自社アプリで「購入履歴」を表示する
- ドラッグストアがLINE Mini Appで「マイレシート」を見せる
- ECブランドがAndroidアプリで月次の支出サマリーをダッシュボードに表示する
- 購買完了と同時にWebhookで自社サーバーへレシートデータを送信する
仕組みの概要
ユーザー → 自社アプリ → OAuth同意画面(レシートローラー)
↓
アクセストークン発行
↓
自社アプリ → レシートAPI → デジタルレシート取得
自社アプリはレシートローラーのOAuth 2.0フローでアクセストークンを取得します。
取得したトークンを使ってAPIを呼び出すと、そのユーザーが自分の店舗で受け取ったレシートを返します。
ステップ1:アプリを登録する
- レシートローラーの開発者ポータルにログインします
- 「アプリを登録」からクライアントIDとシークレットを発行します
redirect_uri(認可後のリダイレクト先)を設定します
ステップ2:OAuth認可コードフローを実装する
2-1. 認可コードを取得
ユーザーをブラウザで以下のURLに誘導します。
GET /oauth/authorize
?client_id=YOUR_CLIENT_ID
&redirect_uri=YOUR_REDIRECT_URI
&response_type=code
&scope=user.receipts.read user.spending.read
&state=RANDOM_STRING
ユーザーがレシートローラーの同意画面で「許可」をタップすると、redirect_uri に認可コードが返ります。
YOUR_REDIRECT_URI?code=AUTH_CODE&state=RANDOM_STRING
2-2. コードをトークンに交換
POST /api/v1/auth/token
Content-Type: application/json
{
"grantType": "authorization_code",
"clientId": "YOUR_CLIENT_ID",
"clientSecret": "YOUR_CLIENT_SECRET",
"code": "AUTH_CODE",
"redirectUri": "YOUR_REDIRECT_URI"
}
レスポンス:
{
"accessToken": "eyJ...",
"refreshToken": "def50200...",
"tokenType": "Bearer",
"expiresIn": 3600,
"scope": "user.receipts.read user.spending.read"
}
2-3. トークンのリフレッシュ
アクセストークンの有効期限が切れたらリフレッシュします。
POST /api/v1/auth/refresh
Content-Type: application/json
{
"refreshToken": "def50200...",
"clientId": "YOUR_CLIENT_ID"
}
ステップ3:レシートを取得する
すべてのAPIリクエストに Authorization: Bearer {access_token} ヘッダーを付けます。
レシート一覧(月別フィルタ対応)
GET /api/v1/user/receipts?year=2026&month=4
Authorization: Bearer {access_token}
レシート詳細(明細・店舗情報含む)
GET /api/v1/user/receipts/{id}
Authorization: Bearer {access_token}
月間支出サマリー
GET /api/v1/user/receipts/summary?year=2026&month=4
Authorization: Bearer {access_token}
スコープ:user.spending.read
カテゴリ別の内訳、前月比、レシート枚数を返します。ダッシュボード画面の構築に使えます。
ステップ4:Webhookでリアルタイム受信する
APIをポーリングする代わりに、レシートが発行された瞬間に自社サーバーへ通知を受けることができます。開発者ポータルからWebhookエンドポイントを登録すると、ユーザーのレシートが作成・更新されるたびにPOSTされます。
セキュリティ検証
受信したWebhookの正当性を確認するため、X-RR-Signature ヘッダーを検証してください。
import hmac, hashlib
def verify_signature(payload_body: bytes, secret: str, signature_header: str) -> bool:
expected = "sha256=" + hmac.new(
secret.encode(), payload_body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature_header)
必要なスコープ一覧
| スコープ | 用途 |
|---|---|
user.receipts.read |
レシート一覧・詳細の取得、画像スキャン |
user.spending.read |
月間支出サマリーの取得 |
対応プラットフォーム
| プラットフォーム | 実装方法 |
|---|---|
| iOS | ASWebAuthenticationSession でOAuth認可、URLSession でAPI呼び出し |
| Android | Chrome Custom Tabs でOAuth認可、OkHttp または Retrofit でAPI呼び出し |
| LINE Mini App | liff.init() 後に liff.getAccessToken() でLINEトークンを取得し、レシートローラーOAuthトークンに交換 |
よくある質問
Q. 自分の店舗のレシートだけが返ってきますか?
A. はい。APIはOAuthで認証されたユーザーが受け取ったレシートのうち、あなたの店舗に紐付いたものだけを返します。他店のデータは取得できません。
Q. ユーザーが同意を取り消した場合は?
A. アクセストークンが無効になります。以降のAPIリクエストは 401 を返します。
Q. Webhookの再送はありますか?
A. 自社サーバーが 2xx を返せなかった場合、最大4回まで自動リトライされます。
次のステップ
- 技術的なご質問はサポートまでお問い合わせください
-
アプリを新規作成するレシートローラーの開発者ポータルで新しいアプリ(OAuthクライアント)を登録する具体的な手順を説明します。入力項目・バリデーション・作成後のクレデンシャル表示・よくあるエラーまでをカバーします。
-
OAuthスコープ一覧と利用可否レシートローラーのOAuth APIで利用できるスコープの一覧と、各スコープがどの種類のアプリに付与されるかを説明します。User系スコープの審査要件、Store系とUser系を混在できない理由、LIFFアプリからの利用方法もカバーします。
-
利用開始までの流れレシートローラーの開発者ポータル利用開始までの流れを説明します。店舗ユーザーとして登録し、スタータープラン以上であれば、別途の開発者申請なしですぐにアプリ登録とAPI実装を始められます。
-
アプリケーション登録とはレシートローラーのアプリケーション登録の概念を説明します。OAuthクライアントとしてアプリを登録することで、クライアントID・シークレット・リダイレクトURIが発行され、API・Webhook連携を始められます。