錢包應用程式向:以 OAuth 取得使用者的收據的指南
oauth
api
receipt
webhook
ios
android
line
關於本指南
本指南以使用者串接自身的 ReceiptRoller 帳戶,在 iOS、Android、LINE Mini App 等檢視購買收據的錢包型應用程式為對象(在使用者的同意下以
店鋪以自家應用程式向顧客發行數位收據,想以 Webhook 接收即時通知的情況,請參閱店鋪向指南。
本指南以使用者串接自身的 ReceiptRoller 帳戶,在 iOS、Android、LINE Mini App 等檢視購買收據的錢包型應用程式為對象(在使用者的同意下以
user.receipts.read 權限範圍取得資料)。店鋪以自家應用程式向顧客發行數位收據,想以 Webhook 接收即時通知的情況,請參閱店鋪向指南。
錢包應用程式向:以 OAuth 取得使用者的收據的指南
是持有自家的 iOS 應用程式、Android 應用程式、LINE Mini App 的店鋪、品牌向的開發者指南。
使用 ReceiptRoller 的 OAuth 驗證與 API,就可以在自己的店鋪發行的數位收據,在使用者的同意下取得,並顯示於自家應用程式。
使用案例
例如,可以有這樣的用法。
- 咖啡連鎖店在自家應用程式顯示「購入紀錄」
- 藥妝店在 LINE Mini App 讓人看「我的收據」
- EC 品牌在 Android 應用程式將月次的支出摘要顯示於儀表板
- 購買完成同時以 Webhook 對自家伺服器發送收據資料
機制的概要
使用者 → 自家應用程式 → OAuth同意畫面(ReceiptRoller)
↓
存取權杖發行
↓
自家應用程式 → 收據API → 數位收據取得
自家應用程式以 ReceiptRoller 的 OAuth 2.0 流程取得存取權杖。
使用取得的權杖呼叫 API,會回傳該使用者在自己的店鋪收到的收據。
步驟1:登錄應用程式
- 登入 ReceiptRoller 的開發者入口
- 從「登錄應用程式」發行用戶端 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
使用者在 ReceiptRoller 的同意畫面點擊「許可」,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 權杖,交換為 ReceiptRoller OAuth 權杖 |
常見問題
Q. 只會回傳自己的店鋪的收據嗎?
A. 是。API 會回傳以 OAuth 驗證的使用者收到的收據當中,只有繫在您的店鋪的那些。無法取得他店的資料。
Q. 使用者取消同意的情況呢?
A. 存取權杖會變無效。之後的 API 請求會回傳 401。
Q. Webhook 有重送嗎?
A. 自家伺服器沒回傳 2xx 的情況,最多自動重試 4 次。
下一步
- 技術性的提問請向支援洽詢
發布日: 2026-04-09
更新日: 2026-07-06
標籤
API (22)
OAuth (15)
Android (10)
iOS (9)
Webhook (8)
api (7)
oauth (5)
POS串接 (4)
getting-started (4)
參考 (4)
相關文章
-
OAuth 權限範圍一覽與利用可否說明 ReceiptRoller 的 OAuth API 可利用的權限範圍的一覽,與各權限範圍被授予哪種類型的應用程式。也涵蓋 User 系權限範圍的審查要件、Store 系與 User 系無法混在的理由、從 LIFF 應用程式的利用方法。
-
利用開始為止的流程說明 ReceiptRoller 的開發者入口利用開始為止的流程。作為店鋪使用者登錄,只要是 Starter 方案以上,無需另行的開發者申請即可立刻開始應用程式登錄與 API 實作。
-
什麼是應用程式登錄說明 ReceiptRoller 的應用程式登錄的概念。透過將應用程式登錄為 OAuth 用戶端,會發行用戶端 ID、密鑰、重新導向 URI,可開始 API、Webhook 串接。
-
新增建立應用程式說明在 ReceiptRoller 的開發者入口登錄新的應用程式(OAuth 用戶端)的具體步驟。涵蓋輸入項目、驗證、建立後的憑證顯示、常見錯誤。