รายการสโคป OAuth และเงื่อนไขการใช้งาน
รวบรวมสโคปทั้งหมดที่ระบุได้ใน OAuth API ของ ReceiptRoller พร้อมข้อมูลว่าแต่ละสโคปจะให้สิทธิ์แก่แอปประเภทใด โปรดตรวจสอบก่อนลงทะเบียนแอป OAuth หรือก่อนประกอบ authorization URL
รายการสโคป OAuth และเงื่อนไขการใช้งาน
API ของ ReceiptRoller ควบคุมทรัพยากรที่เข้าถึงได้ด้วยสโคปของ OAuth 2.0 เมื่อลงทะเบียนแอปและเมื่อนำผู้ใช้ไปยังหน้าให้สิทธิ์ โปรดระบุเฉพาะสโคปที่จำเป็นให้น้อยที่สุด สามารถระบุหลายสโคปได้โดยคั่นด้วยช่องว่างแบบครึ่งความกว้าง (half-width space)
การแบ่งประเภทสโคป
สโคปถูกแบ่งออกเป็น 4 หมวดหมู่ตามวัตถุประสงค์
- กลุ่ม Store — ข้อมูลธุรกิจของร้านค้า/บัญชีธุรกิจ (สินค้า คำสั่งซื้อ สต็อก การจอง พนักงาน ฯลฯ)
- กลุ่ม CRM — โปรไฟล์ลูกค้าและข้อมูลเซกเมนต์
- กลุ่ม SNS / Analytics — โพสต์ SNS ผู้ชม การวิเคราะห์ และรายงานยอดขาย
- กลุ่ม User (ผู้บริโภค) — ใบเสร็จ การใช้จ่าย ร้านค้าโปรด ฯลฯ ของผู้ใช้แต่ละราย
ดังจะกล่าวต่อไป สโคปกลุ่ม User โดยหลักการจะให้สิทธิ์เฉพาะแอปของผู้พัฒนาหลัก (first-party) และพาร์ตเนอร์ที่ได้รับการอนุมัติแล้วเท่านั้น ถือเป็นสโคปที่มีข้อจำกัดเข้มงวด
สโคปกลุ่ม Store
เป็นสโคปสำหรับให้เจ้าของร้านหรือผู้ดูแลบัญชีธุรกิจจัดการข้อมูลร้านของตนผ่าน OAuth สามารถให้สิทธิ์แก่แอปพาร์ตเนอร์ภายนอกได้เช่นกัน แต่ฝั่งร้านค้าจะต้องอนุญาตในหน้ายินยอม OAuth
| สโคป | สิทธิ์ที่ได้รับ |
|---|---|
store.products.read | ดูข้อมูลสินค้าและสต็อก |
store.products.write | ลงทะเบียนและอัปเดตสินค้า |
store.orders.read | ดูข้อมูลคำสั่งซื้อ |
store.orders.write | อัปเดตสถานะคำสั่งซื้อ |
store.customers.read | ดูข้อมูลลูกค้า |
store.customers.write | สร้าง อัปเดต และลบลูกค้า |
store.coupons.read | ดูข้อมูลคูปอง |
store.coupons.write | สร้างและอัปเดตคูปอง |
store.inventory.read | ดูข้อมูลคลังและสต็อก |
store.inventory.write | ปรับจำนวนสต็อกและบันทึกผลการตรวจนับ |
store.flyers.read | ดูใบปลิวร้านค้า |
store.flyers.write | สร้าง อัปเดต และเผยแพร่ใบปลิวร้านค้า |
store.staff.read | ดูข้อมูลพนักงานและสตาฟ |
store.staff.write | สร้าง อัปเดต และลบพนักงาน |
store.business-hours.read | ดูเวลาทำการ วันหยุดพิเศษ และช่วงเวลาที่พร้อมทำงาน |
store.business-hours.write | อัปเดตเวลาทำการ วันหยุดพิเศษ และช่วงเวลาที่พร้อมทำงาน |
store.reservations.read | ดูข้อมูลการจอง ช่องการจอง และที่นั่ง |
store.reservations.write | สร้าง แก้ไข และอัปเดตสถานะการจอง รวมถึงสร้างช่องการจอง |
store.info.read | ดูข้อมูลพื้นฐานของร้าน (ชื่อร้าน ช่องทางติดต่อ ที่อยู่) |
store.info.write | อัปเดตข้อมูลพื้นฐานของร้าน (ชื่อร้าน ช่องทางติดต่อ ที่อยู่) |
สโคปกลุ่ม CRM
| สโคป | สิทธิ์ที่ได้รับ |
|---|---|
crm.profiles.read | ดูโปรไฟล์ลูกค้า CRM |
crm.segments.read | ดูเซกเมนต์และแรงก์ของ CRM |
สโคปกลุ่ม SNS / Analytics
| สโคป | สิทธิ์ที่ได้รับ |
|---|---|
sns.content.read | ดูข้อมูลโพสต์ SNS |
sns.content.write | สร้าง อัปเดต เผยแพร่ ตั้งเวลา และลบโพสต์ SNS |
sns.audience.read | ดูข้อมูลผู้ชม SNS |
analytics.read | ดูสแนปช็อตการวิเคราะห์ |
sales.read | ดูรายงานยอดขาย ข้อมูลธุรกรรม และข้อมูลเชิงลึกทางธุรกิจ |
สโคปกลุ่ม User (ผู้บริโภค)
สโคปเหล่านี้เข้าถึงข้อมูลส่วนบุคคลของผู้บริโภค เช่น ใบเสร็จ การใช้จ่าย และร้านค้าโปรดของผู้ใช้แต่ละราย จึงให้สิทธิ์เฉพาะแอปของผู้พัฒนาหลัก (first-party) ของ ReceiptRoller และแอปพาร์ตเนอร์ที่ได้รับการอนุมัติอย่างชัดเจนเท่านั้น
หากแอปที่ยังไม่ผ่านการตรวจสอบระบุสโคป
user.* แล้วเรียก authorization URL จะได้รับข้อผิดพลาด app_not_approved
| สโคป | สิทธิ์ที่ได้รับ |
|---|---|
user.profile.read | ดูข้อมูลพื้นฐานของผู้ใช้ |
user.profile.write | อัปเดตข้อมูลพื้นฐานของผู้ใช้ |
user.receipts.read | ดูใบเสร็จที่ผู้ใช้ได้รับ |
user.spending.read | ดูสรุปการใช้จ่ายรายเดือน |
user.spending.write | อัปเดตข้อมูลการใช้จ่ายและงบประมาณ |
user.coupons.read | ดูคูปองของร้านค้าโปรด |
user.favorites.read | ดูรายการร้านค้าโปรด |
user.favorites.write | เพิ่มและลบร้านค้าโปรด |
ข้อจำกัดสำคัญ
1. สโคปกลุ่ม User ต้องผ่านการตรวจสอบล่วงหน้า
หากรวมสโคป user.* ตอนลงทะเบียนแอป OAuth ค่า UserScopeStatus ของแอปจะกลายเป็น pending (รอการตรวจสอบ) จนกว่าทีมงาน ReceiptRoller จะตรวจสอบและเปลี่ยนเป็น approved หากระบุสโคป user.* ในโฟลว์การให้สิทธิ์ก่อนหน้านั้นจะได้รับข้อผิดพลาด
กรณีที่ร้านค้า/พาร์ตเนอร์ภายนอกต้องการ "แสดงใบเสร็จทั้งหมดที่ผู้ใช้ได้รับในแอป LIFF หรือแอปมือถือของตน" โดยหลักการแล้วจะต้องผ่านการตรวจสอบนี้ ยินดีให้คำปรึกษา โปรดติดต่อฝ่ายสนับสนุน
2. ไม่สามารถผสมสโคปกลุ่ม Store และกลุ่ม User ในโฟลว์การให้สิทธิ์เดียวกัน
ไม่สามารถระบุ store.orders.read และ user.receipts.read พร้อมกันในคำขอให้สิทธิ์เดียวได้ เพราะสองสโคปนี้มีผู้ดำเนินการ (actor) ต่างกัน (ร้านค้า vs. ผู้ใช้) เซิร์ฟเวอร์ให้สิทธิ์จึงจะปฏิเสธ
หากต้องการสร้างบริการที่จัดการข้อมูลทั้งสองด้าน ให้ลงทะเบียนแอป OAuth สองตัว แล้วขอโทเคนผ่านโฟลว์การให้สิทธิ์แยกกัน
3. หลักการสิทธิ์ขั้นต่ำ (least privilege)
เพื่อรักษาความไว้วางใจของผู้ใช้ (หรือเจ้าของร้าน) โปรดระบุเฉพาะสโคปที่จำเป็นจริง ๆ ไม่แนะนำให้ "ใส่ write ไว้เผื่อ" หรือ "ขอสโคปอื่นที่ไม่ได้ใช้"
สโคปที่แนะนำตามกรณีการใช้งาน
| สิ่งที่ต้องการทำ | สโคปที่จำเป็น | หมายเหตุ |
|---|---|---|
| ซิงก์สต็อกและคำสั่งซื้อของร้านจากระบบภายนอก | store.products.read store.products.write store.orders.read |
รับสิทธิ์ได้ด้วยความยินยอมของเจ้าของร้าน |
| บันทึกผลการปรับสต็อกและการตรวจนับ | store.inventory.read store.inventory.write |
รับสิทธิ์ได้ด้วยความยินยอมของเจ้าของร้าน |
| รับการจองจากระบบจองภายนอกหรือแอปมือถือ | store.reservations.read store.reservations.write |
รับสิทธิ์ได้ด้วยความยินยอมของเจ้าของร้าน |
| จัดการพนักงานและช่วงเวลาที่พร้อมทำงานในแอปจัดการกะ | store.staff.read store.staff.write store.business-hours.read |
รับสิทธิ์ได้ด้วยความยินยอมของเจ้าของร้าน |
| อัปเดตข้อมูลร้าน (ชื่อร้าน ช่องทางติดต่อ ที่อยู่) จากแอปสตาฟหรือระบบภายนอก | store.info.read store.info.write |
รับสิทธิ์ได้ด้วยความยินยอมของเจ้าของร้าน การดูไม่ต้องมีสิทธิ์นี้ แต่การอัปเดตต้องใช้ store.info.write |
| โพสต์ใบปลิวร้านของตนเองแบบรวมทีเดียวจาก CMS ภายในบริษัท | store.flyers.write |
รับสิทธิ์ได้ด้วยความยินยอมของเจ้าของร้าน |
| เชื่อมเซกเมนต์ CRM ให้แผนกการตลาด | crm.profiles.read crm.segments.read |
รับสิทธิ์ได้ด้วยความยินยอมของเจ้าของร้าน |
| ฝังแดชบอร์ดยอดขายเข้ากับเครื่องมือของตนเอง | sales.read analytics.read |
รับสิทธิ์ได้ด้วยความยินยอมของเจ้าของร้าน |
| แสดงใบเสร็จทั้งหมดของผู้ใช้ในแอปมือถือของตน | user.receipts.read |
ต้องผ่านการตรวจสอบล่วงหน้า |
| แสดงการใช้จ่ายรายเดือนเป็นภาพในแอปบัญชีครัวเรือน | user.spending.read user.receipts.read |
ต้องผ่านการตรวจสอบล่วงหน้า |
| ต้องการดึงข้อมูลร้านค้าของผู้อื่นผ่าน LIFF | — | ไม่ได้ (ดึงได้เฉพาะสโคปกลุ่ม Store ของตนเองเท่านั้น) |
เกี่ยวกับการใช้งานจาก LIFF / LINE Mini App
แม้จะเรียก API ของ ReceiptRoller จากแอป LIFF (LINE Mini App) ก็ให้ใช้โฟลว์ OAuth 2.0 Authorization Code มาตรฐาน
ไม่มีบริการแลกเปลี่ยน LINE ID token โดยตรง
ปัจจุบันเรายังไม่มีเอนด์พอยต์ที่แลกเปลี่ยน "LINE ID token → แอ็กเซสโทเคนของ ReceiptRoller" โดยตรง แอป LIFF ก็เช่นเดียวกับ Web แอปอื่น ๆ ที่ต้องนำผู้ใช้ไปยังหน้าให้สิทธิ์ของ ReceiptRoller
รูปแบบการพัฒนาบน LIFF
- หลังเปิดแอป LIFF ให้เริ่มต้น LIFF ด้วย
liff.init() - ในจังหวะที่ต้องการเรียก API ของ ReceiptRoller ให้นำผู้ใช้ไปยัง
/oauth/authorizeด้วยliff.openWindow()หรือลิงก์ทั่วไป - เมื่อผู้ใช้อนุญาตในหน้าให้สิทธิ์ของ ReceiptRoller จะมี authorization code ส่งกลับมาที่
redirect_uri - แลก authorization code เป็นแอ็กเซสโทเคนด้วย
POST /api/v1/auth/token(grantType: authorization_code) - แนบโทเคนที่ได้ในเฮดเดอร์
Authorization: Bearerแล้วเรียก API
ข้อควรระวังเมื่อใช้สโคปกลุ่ม User
แม้จะระบุสโคป user.* ในแอป LIFF ก็ยังต้องผ่านการตรวจสอบล่วงหน้าตามที่กล่าวข้างต้น การออกแบบไม่ได้เป็นแบบ "เนื่องจากยืนยันตัวตนด้วย LINE แล้วจึงข้ามการยืนยันตัวตนผู้ใช้ของ ReceiptRoller ได้" การออกแบบเช่นนี้เพื่อความปลอดภัยและความโปร่งใสของความยินยอมจากผู้ใช้
คู่มือที่เกี่ยวข้อง
- สำหรับแอปวอลเล็ต: คู่มือดึงใบเสร็จของผู้ใช้ผ่าน OAuth
- สำหรับร้านค้า: คู่มือการออกใบเสร็จและการแจ้งเตือนผ่าน Webhook
- วิธีใช้ Store Information API
- วิธีใช้ Reservations API
- วิธีใช้ Business Hours API
- สำหรับคำถามทางเทคนิคและการยื่นขอตรวจสอบสโคปกลุ่ม User โปรดติดต่อฝ่ายสนับสนุน
-
สำหรับแอปวอลเล็ต: คู่มือดึงใบเสร็จของผู้ใช้ผ่าน OAuthอธิบายวิธีดึงใบเสร็จการซื้อของ Receipt Roller โดยได้รับความยินยอมจากผู้ใช้ ผ่านแอปแบบวอลเล็ต เช่น iOS, Android และ LINE Mini App ครอบคลุมการยืนยันตัวตน OAuth 2.0 การใช้ Receipt API และการเชื่อมต่อ Webhook
-
การลงทะเบียนแอปพลิเคชันคืออะไรอธิบายแนวคิดของการลงทะเบียนแอปพลิเคชันใน ReceiptRoller การลงทะเบียนแอปในฐานะ OAuth client จะทำให้ได้ client ID・secret・redirect URI และเริ่มการเชื่อมต่อ API・Webhook ได้
-
สร้างแอปใหม่อธิบายขั้นตอนที่เป็นรูปธรรมในการลงทะเบียนแอปใหม่ (OAuth client) ในพอร์ทัลนักพัฒนาของ ReceiptRoller ครอบคลุมตั้งแต่รายการที่ต้องกรอก การ validate การแสดง client secret หลังสร้าง ไปจนถึงข้อผิดพลาดที่พบบ่อย
-
ขั้นตอนจนถึงเริ่มใช้งานอธิบายขั้นตอนจนถึงเริ่มใช้พอร์ทัลนักพัฒนาของ ReceiptRoller หากลงทะเบียนเป็นผู้ใช้ร้านค้าและเป็นแพลน Starter ขึ้นไป ก็สามารถเริ่มลงทะเบียนแอปและพัฒนา API ได้ทันทีโดยไม่ต้องยื่นคำขอเป็นนักพัฒนาต่างหาก