Last active
October 11, 2023 23:28
-
-
Save d-sea/d80dafb616318215df396ec47875a06f to your computer and use it in GitHub Desktop.
firebase functions iOS レシートデータを検証してlatest_receiptを返す
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 定期 最終支払 検証用 | |
const PACKAGE_NAME_IOS = "(PUT YOUR APP PACKAGE NAME. ex. com.example.your.app)"; | |
const RECEIPT_VERIFICATION_ENDPOINT_FOR_IOS_SANDBOX = "https://sandbox.itunes.apple.com/verifyReceipt"; | |
const RECEIPT_VERIFICATION_ENDPOINT_FOR_IOS_PROD = "https://buy.itunes.apple.com/verifyReceipt"; | |
const RECEIPT_VERIFICATION_PASSWORD_FOR_IOS = "(PUT YOUR VERIFICATION PASSWORD)"; | |
async function verifyReceiptIos(verificationData, auth) { | |
let response; | |
try { | |
// 本番用APIにデータを送信する | |
response = await axios.post(RECEIPT_VERIFICATION_ENDPOINT_FOR_IOS_PROD, { | |
"receipt-data": verificationData, | |
password: RECEIPT_VERIFICATION_PASSWORD_FOR_IOS, | |
"exclude-old-transactions": true, | |
}); | |
// 本番用APIから返却された`status`が`21007`の場合、送信されたレシートがサンドボックス環境用と判断する | |
if (response.data && response.data["status"] === 21007) { | |
response = await axios.post( | |
RECEIPT_VERIFICATION_ENDPOINT_FOR_IOS_SANDBOX, | |
{ | |
"receipt-data": verificationData, | |
password: RECEIPT_VERIFICATION_PASSWORD_FOR_IOS, | |
"exclude-old-transactions": true, | |
} | |
); | |
} | |
// レシート検証用APIから返却されたレスポンス内の`status`が`0`であれば検証は成功 https://developer.apple.com/documentation/appstorereceipts/status#possible-values | |
const result = response.data; | |
if (result["status"] !== 0) { | |
return null; | |
} | |
// レスポンスデータ内の`bundle_id`が自身のパッケージ名と一致しているか確認する | |
if ( | |
!result["receipt"] || | |
result["receipt"]["bundle_id"] !== PACKAGE_NAME_IOS | |
) { | |
return null; | |
} | |
// `latest_receipt_info`は定期購読タイプのアイテムを購入したことがある場合のみ存在する | |
return result["latest_receipt_info"][0]; | |
} catch (err) { | |
return null; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment