Skip to main content

B2B Mobility Card Management 3.1.5

殼牌 B2B 移動支付卡管理 API - 快速入門指南

API 版本: 3.1.5 | 驗證: OAuth 2.0 | 狀態: 生產環境

概述

Shell 卡片管理 API 是一項基於 REST 的 API,可讓開發人員透過程式化方式管理 Shell 加油卡。此 API 支援卡片搜尋、訂購、狀態更新、取消以及其他各種卡片管理操作。

注意: 本指南僅涵蓋採用 OAuth 2.0 驗證的端點(基礎路徑:/card-management/v1)。舊版 Basic Auth 端點(/fleetmanagement/v1/card)因正在逐步淘汰,故未包含在內。

主要功能

  • 透過靈活的篩選條件搜尋及篩選加油卡
  • 訂購新卡並追蹤訂單狀態
  • 封鎖、解除封鎖、 及註銷卡片
  • 更新卡片寄送地址
  • 管理卡片自動續期設定
  • 在卡片群組與帳戶間移動卡片
  • 申請 PIN 碼提醒

重要通知 - OAuth 2.0

重要:OAuth 2.0 現已成為標準驗證方式

  • 新增整合功能: 從一開始就使用 OAuth 2.0
  • 現有整合: 規劃您的 OAuth 2.0 遷移計畫
  • 舊版方法: 基本驗證 (Basic Auth) 與 API 金鑰即將逐步淘汰

請聯絡 Shell 技術支援 以取得您的 OAuth 2.0 憑證 (client_id 和 client_secret)。

驗證

OAuth 2.0(標準驗證方法)

Shell 卡片管理 API 使用 OAuth 2.0 客戶端憑證流程 進行安全驗證。

警告: 所有客戶應規劃採用 OAuth 2.0 驗證。 這是 Shell 卡片管理 API 建議採用且符合未來發展趨勢的認證方法。舊版認證方法正逐步淘汰中。

OAuth 2.0 流程

步驟 1: 取得存取憑證

向 OAuth 憑證端點請求存取憑證:

POST /oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id=您的-客戶-ID&client_secret=您的-客戶-密鑰

步驟 2:在 API 請求中使用存取憑證

Authorization: Bearer <存取憑證>
Content-Type: application/json

存取憑證管理

存取憑證管理最佳實務:

  • 存取憑證的有效期限有限(通常為 15 分鐘)
  • 實作憑證快取機制,以避免不必要的憑證請求
  • 在過期前刷新令牌,以確保服務不中斷
  • 切勿分享您的 client_secret 或將其嵌入客戶端程式碼中

OAuth 2.0 採用策略

為何要遷移至 OAuth 2.0?

安全性優勢:

  • 業界標準的認證協定
  • 有效期有限的存取憑證可降低安全風險
  • 每次請求均不傳輸憑證
  • 更完善地支援存取憑證輪替與撤銷

營運優勢:

  • 提升可擴展性與效能
  • 更完善的監控與稽核能力
  • 簡化的憑證管理
  • 具備前瞻性的整合能力

遷移路徑

若您目前仍在使用舊式驗證方法, 請遵循此遷移路徑:

  1. Shell 技術支援
  2. 在您的應用程式中實作 OAuth 憑證管理
  3. 在測試/沙盒環境中進行徹底測試
  4. 在過渡期間並行執行 (OAuth + 舊版)
  5. 監控並驗證 OAuth 整合
  6. 驗證完成後 切換為僅使用 OAuth
  7. 遷移成功後停用舊版驗證機制

環境

此 API 提供兩種環境:

環境 基礎 URL 用途
生產環境 https://api.shell.com 正式生產環境
測試(沙盒) https://api-test.shell.com/test 測試與開發環境

提示: 在移轉至生產環境前,請務必先在 測試環境 中測試您的整合功能。

快速入門

1. 取得您的 OAuth 憑證

2. 取得存取憑證

首先,取得您的 OAuth 存取憑證:

cURL 範例:

curl -X POST https://api-test.shell.com/v2/oauth/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials&client_id=您的-客戶端-ID&client_secret=您的-客戶端-密鑰"

回應:

{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "Bearer",
  "expires_in": 899
}

3. 發出您的第一個 API 請求

範例:搜尋有效卡片

cURL 範例:

curl -X POST https://api-test.shell.com/test/card-management/v1/search \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -H "Content-Type: application/json" \
  -d '{
    "Filters": {
 "PayerNumber": "CZ00000927",
        "AccountNumber": "CZ00000927",
 "ColCoCode": 32,
 "CardStatus": [
 "Active"
 ]
 
 },
    "Page": 1,
    "PageSize": 1
}'

回應範例:

{
    "Page": 1,
    "TotalRecords": 7994,
    "TotalPages": 7994,
    "PageSize": 1,
    "Data": [
 {
 "AccountId": 1227,
 "AccountName": "Dominica1_C_1",
            "AccountNumber": "CZ00000927",
 "AccountShortName": "Dominica1_1",
 "BundleId": null,
 "CardBlockSchedules": null,
            "CardGroupId": null,
 "CardGroupName": null,
 "CardId": 491623,
 "CardTypeCode": "7027329",
            "CardTypeId": 11120,
 "CardTypeName": "CZ SFA NAT SIN - CHIP",
 "ColCoCountryCode": "CZ",
            "建立日期": "20220810 23:53:25",
 "駕駛員姓名": "SHELL973169581",
 "生效日期": "20220810",
            "ExpiryDate": "20260831",
 "FleetIdInput": true,
 "IsCRT": false,
 "IsFleet": true,
            "IsInternational": false,
 "IsNational": true,
 "IsPartnerSitesIncluded": false,
 "IsShellSitesOnly": true,
 "IssueDate": "20220812",
            "IsSuperseded": false,
 "IsVirtualCard": false,
 "LastModifiedDate": "20230614 00:05:16",
            "最後使用日期": null,
 "當地貨幣代碼": "CZK",
 "當地貨幣符號": "Kč",
 "里程表輸入": true,
            "PAN": "7027329200001461736",
 "MaskedPAN": "7027329******461736",
            "PANID": 17268839,
 "PurchaseCategoryCode": "2",
 "PurchaseCategoryId": 102,
 "PurchaseCategoryName": "2 - 所有燃料產品、汽車相關商品及 TMF",
            "Reason": "已排定解鎖",
 "ReissueSetting": "True",
 "StatusDescription": "Active",
            "StatusId": 1,
 "TokenTypeID": 503742,
 "TokenTypeName": "CZ SFA NAT SIN – CHIP",
 "VRN": "VRN347886994",
 "ClientReferenceId": null,
 "IsEMVContact": true,
 "IsEMVContactless": false,
 "IsRFID": false,
 "RFIDUID": null,
            "EMAID": null,
 "EVPrintedNumber": null,
 "CardMediaCode": "100999",
 "MediumTypeID": 1,
 "MediumType": "加油卡"
 }
    ],
    "RequestId": "5a474d3e-70f4-4f7d-9416-5d5475b33e4f",
    "Status": "SUCCESS"
}

API 端點參考

卡片搜尋與擷取

端點 方法 描述
/card-management/v1/search POST 使用彈性篩選條件搜尋卡片(OAuth 2.0)
/card-management/v1/details POST 取得單張加油卡的詳細資訊(OAuth 2.0)

常見使用情境:

  • 依卡片狀態搜尋(ACTIVE、BLOCKED、EXPIRED、 等)
  • 依駕駛人姓名或車輛登記號碼篩選
  • 依 PAN(後 4 位數字)搜尋
  • 尋找將於 X 天內過期的卡片

卡片摘要

端點 方法 說明
/card-management/v1/summary POST 取得加油卡的高階摘要(OAuth 2.0)

回傳內容:

  • 按狀態劃分的卡片總數
  • 依卡片類型劃分的統計摘要
  • 有效與失效卡片分佈

卡片訂購

端點 方法 說明
/card-management/v1/ordercard POST 訂購一張或多張加油卡(OAuth 2.0)
/card-management/v1/ordercardenquiry POST 查詢卡片訂購狀態(OAuth 2.0)

訂購卡片所需資訊:

  • ColCoCode(收款公司代碼)
  • 付款人編號或付款人識別碼
  • 帳戶號碼
  • 卡片類型與設定
  • 送達地址詳情

卡片狀態管理

端點 方法 說明
/card-management/v1/updatestatus POST 封鎖、解鎖或取消卡片(OAuth 2.0)
/card-management/v1/schedulecardblock POST 排程卡片封鎖/解鎖請求(OAuth 2.0)

狀態操作:

  • 封鎖 - 暫時封鎖卡片
  • 解除封鎖 - 重新啟用已封鎖的卡片
  • 卡片損壞 - 通報卡片損壞並申請補發
  • 客戶臨時停用 - 由客戶發起的臨時封鎖
  • TEMP_BLOCK_SHELL - 由發卡機構發起的臨時封鎖

注意: 卡片註銷屬永久性措施,無法撤銷。

其他端點

類別 端點 方法 說明
取消 /card-management/v1/cancel POST 取消一張或多張卡片
卡片移轉 /card-management/v1/move POST 將卡片移轉至另一個卡片群組或帳戶
PIN 碼管理 /card-management/v1/pinreminder POST 為卡片請求 PIN 碼提醒
寄送地址 /card-management/v1/deliveryaddressupdate POST 更新卡片寄送地址
自動續期 /card-management/v1/autorenew POST 更新重新發卡指標

使用範例

範例 1:搜尋即將過期的卡片

POST /card-management/v1/search

{
    "篩選條件": {
 "付款人編號": "CZ00000927",
 "帳號": "CZ00000927",
 "公司代碼": 32,
        "CardStatus": [
 "Active"
 ],
 "ExpiringInDays" : 70
 
 },
    "Page": 1,
    "PageSize": 1
}

範例 2:暫時封鎖卡片

POST /card-management/v1/updatestatus

{

  "Cards": [
    {
      "CardId": 125,
 "ColCoCode": 86,
 "PayerNumber": "PH50000843",
    },
    "ReasonId": 1236,
    "ReasonText": "解除停用",
    "TargetStatus": "Unblock"

  ]
}

範例 3:取消卡片

POST /card-management/v1/cancel

{
 
 "Cards": [
    {
 "CardId": 125,
 "CardExpiryDate": "20231231",
      "ColCoCode": 86,
 "PayerNumber": "PH50000843",
    }
  ],
  "ReasonText": "遺失",
  "RequestId": "1"
}

錯誤處理

常見錯誤代碼

HTTP 狀態碼 錯誤代碼 說明 解決方案
200 不適用 狀態:成功 不A
400 E0001 驗證錯誤 檢查請求參數
401 E0003 未授權 確認 OAuth 憑證是否有效
403 E0003 禁止存取 請檢查使用者權限
404 E0005 資源未找到 請確認端點 URL 及資源是否存在
500 E0002 未知錯誤 / 內部伺服器錯誤 請聯絡技術支援

最佳實務

1. 採用 OAuth 2.0 驗證

重要: 所有客戶均應遷移至 OAuth 2.0 驗證。實施適當的憑證管理:

  • 快取存取憑證並重複使用直至過期
  • 在憑證過期前刷新憑證 (建議在過期前 60 秒進行)
  • 安全儲存客戶端憑證(使用環境變數或機密管理器)
  • 切勿在客戶端程式碼中記錄或洩露存取憑證

2. 使用請求 ID

務必包含唯一的 RequestId(GUID 格式),以確保端到端可追溯性

3. 實作分頁功能

針對大型資料集,請使用分頁功能以避免超時

4. 在沙盒環境中進行測試

在移轉至生產環境前,務必先在測試/沙盒環境中測試整合

SDK 與程式碼範例

Shell 提供官方 SDK 及完整的程式碼範例,以加速您與卡片管理 API 的整合。

可用的 SDK 程式語言

  • Python - 支援 OAuth 2.0 的全功能 SDK
  • TypeScript - 具備完整類型定義的類型安全 SDK
  • Java - 企業級級 SDK
  • C#/.NET - 完整的 .NET 整合
  • PHP - 易於使用的 PHP 函式庫
  • Ruby - 實現無縫整合的 Ruby gem

查看官方 SDK 與文件

支援與資源

技術支援

文件

取得協助

聯絡支援服務時,請提供:

  1. 您的 client_id(切勿分享您的 client_secret 或存取憑證)
  2. API 回應中的 RequestId
  3. 請求的時間戳記
  4. 環境(生產/測試)

最後更新日期: 2026年7月1日
文件版本: 1.0
API 版本: 3.1.5

關於我們

殼牌開發者入口網站協助合作夥伴接入殼牌 API,並將構想轉化為可投入生產的解決方案。

殼牌標誌

聯絡人

登入您的帳戶

向 AI 助理諮詢有關 Shell API 及 API 產品的資訊