蘋果應用內購 ios 開發者根據用戶提供的郵件中的訂單號查看該訂單是否支付成功


 

蘋果應用內購 ios 開發者根據用戶提供的郵件中的訂單號查看該訂單是否支付成功

這是蘋果wwdc2021 推出的新功能

參考官網鏈接

App Store Server API | Apple Developer Documentation

https://developer.apple.com/documentation/appstoreserverapi

 

先要通過 JWT簽名

https://developer.apple.com/documentation/appstoreserverapi/generating_tokens_for_api_requests

 作者:Yanlongli <ahlyl94@gmail.com>

來源:博客園 蘋果應用內購 ios 開發者根據用戶提供的郵件中的訂單號查看該訂單是否支付成功 - IM小白 - 博客園 (cnblogs.com)

參考以下PHP偽代碼

        $privateKey = <<<key
-----BEGIN PRIVATE KEY-----
xxxx
-----END PRIVATE KEY-----
key;


$payload = [
'iss' => 'xxxxxx',
"iat" => time() - 10,
"exp" => time() + 3590,
"aud" => "appstoreconnect-v1",
"nonce" => "隨機字符串",
"bid" => "xxx.xxx.xxx.xxx",
];

$auth_token = JWT::encode($payload, $privateKey, 'ES256', '私鑰id');

iss 通過 https://appstoreconnect.apple.com/access/api 獲得,操作路徑是 用戶和訪問、密鑰、App Store Connect API、
Issuer ID
bid 是應用的 bundleid
iat 當前時間戳,到秒的,-10 是測試發現,接口直接請求時有幾率失敗,應該時本地時間和蘋果服務器時間有誤差導致失敗,減去10秒不影響請求,能忽略時間差。
exp 過期時間戳,在這個時間之后,該簽名會失效,蘋果文檔給的是60分鍾,應該可以更久,看你需求
nonce 隨機字符串 6edffe66-b482-11eb-8529-0242ac130003 這是蘋果給的格式,我也這么生成的,沒測試是否任意隨機字符串都可以
私鑰id 通過在上面相同網址中,密鑰頁面,創建一個密鑰,或者用已存在的密鑰,列表會顯示密鑰id,注意該私鑰僅允許下載一次,所以你要保存好,忘了的話就要創建一個新的密鑰。

//
// 簽名后通過get請求
https://api.storekit.itunes.apple.com/inApps/v1/lookup/{tradeNo}

headers 添加上認證方式
Authorization: Bearer {auth_token}
{tradeNo} 替換成用戶郵件收到的訂單號
{auth_token} 替換成上面偽代碼的簽名

請求成功會返回

{
"status": 0,
"signedTransactions": [
"header.payload.sign"
]
}

signedTransactions  的格式是  頭.載體.簽名

如果有需要自行處理簽名驗證,這里不驗證了

將 signedTransactions 按 . 點分割,獲取載體內容 payload,再將這個payload字符串base64解碼,即可得到該訂單的內容,參考如下

 
        

{
"transactionId": "xxx",  // 本次交易號
"originalTransactionId": "xxx", // 第一次交易號
"webOrderLineItemId": "xxx",
"bundleId": "com.xx.xx", // 應用的 bundleid
"productId": "com.xx.xx.xxx", // 套餐商品的唯一標識key
"subscriptionGroupIdentifier": "xx",  // 訂閱組id
"purchaseDate": 1631718985000, // 支付時間
"originalPurchaseDate": 1599242074000, // 首次支付時間
"expiresDate": 1634310985000, // 過期時間,訂閱有效
"quantity": 1, // 數量
"type": "Auto-Renewable Subscription", //類型 非訂閱的是 Non-Renewing Subscription
"inAppOwnershipType": "PURCHASED",  // 
"signedDate": 1634625372402 // 請求響應的簽名時間
}


其他api
https://api.storekit-sandbox.itunes.apple.com/inApps/v1/history/{originalTransactionId}

https://api.storekit.itunes.apple.com/inApps/v1/subscriptions/{originalTransactionId}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM