Firebase Firestore +云功能服务器端验证应用内购买收据(Swift + NodeJS)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Firebase Firestore +云功能服务器端验证应用内购买收据(Swift + NodeJS)相关的知识,希望对你有一定的参考价值。

Firebase Firestore +云功能服务器端验证收据(应用内购买),最终结果:状态21002表示:收据属性中的数据格式错误或丢失。

step1)我使用swift将应用内购买收据存储到Firestore中,Firestore数据库自然地将其存储为blob

step2)收据进入firestore后触发云功能。 Firebase功能将收据发送到Apple iTunes商店,但最终结果是:状态21002。

我想在将它从base64EncodedData转换为Firestore blob时,收据的格式错误,然后在云函数上检索它。如何获得正确的收据格式,以便将其发送到Apple iTunes商店进行收据验证?

第1步快速代码:

func sendReceiptToFirestore() {
        guard let appStoreReceiptURL = Bundle.main.appStoreReceiptURL,
            FileManager.default.fileExists(atPath: appStoreReceiptURL.path) else {return}
        do {
            let rawReceiptData = try Data(contentsOf: appStoreReceiptURL)
            let receiptData = rawReceiptData.base64EncodedData()
            //Standard way to store receiptData to firestore, i did that but not posting full code here for cleanliness
        }   catch {}
    }

第2步云功能代码:

const request = require("request-promise");
exports.verifyReceiptIAP = functions.firestore
    .document('userReceiptIAP/{userUid}')
    .onWrite((change, context) => {
        const receipt = change.after.data().receiptData  
        const userUid = context.params.userUid
        var options = {
            method: 'POST',
            url: 'https://sandbox.itunes.apple.com/verifyReceipt',
            body: ({
                "receipt-data" : receipt,
                "password" : "8bf2f13bedc6456f97c9323c743a3168"
            }),
            json: true
        };
            return request(options).then(function (response) {
            console.log(response);
            return null
        })

    });

任何帮助表示赞赏

答案

解决了它,我需要改变编码方法。更改

let receiptData = rawReceiptData.base64EncodedData()

let receiptData = rawReceiptData.base64EncodedString()

如果您想使用firestore和cloud功能进行服务器端收据验证,那么问题示例代码应该会有很多帮助

以上是关于Firebase Firestore +云功能服务器端验证应用内购买收据(Swift + NodeJS)的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 云功能 / Firestore

导出 Firestore 备份数据的云功能。使用 firebase-admin 或 @google-cloud/firestore?

Firebase firestore云功能显示错误:无效使用“undefined”类型作为Firestore参数

使用 Firebase 云功能和 Firestore 在 android 上验证购买 [关闭]

Firebase云功能Firestore触发onWrite在本地测试时未按预期运行

如何使用用于 JS 开发的 firebase Emulator 设置 firebase firestore 和云功能测试套件