Firebase Firestore + облачная функция на стороне сервера проверяют получение покупки в приложении (Swift + NodeJS) - PullRequest
2 голосов
/ 21 апреля 2019

Firebase Firestore + облачная функция на стороне сервера проверяет квитанцию ​​(покупка в приложении), конечный результат: статус 21002, что означает: данные в свойстве квитанции были искажены или отсутствуют.

step1) Я храню в-app-покупка квитанций в Firestore с помощью swift, база данных Firestore естественным образом хранит их как blob

step2) Облачная функция сработала после того, как квитанция пошла в firestore.Функция Firebase отправляет квитанцию ​​в Apple iTunes Store, но конечный результат: состояние 21002.

Я полагаю, что квитанция имеет неправильный формат во время преобразования ее из base64EncodedData в BLOB-объект Firestore, а затем извлекает ее в облачной функции.Как получить правильный формат квитанции, чтобы я мог отправить его в Apple iTunes Store для проверки квитанции?

код шага 1 swift:

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
        })

    });

Любая помощь приветствуется

1 Ответ

1 голос
/ 21 апреля 2019

Решено, мне нужно изменить метод кодирования. Изменение

let receiptData = rawReceiptData.base64EncodedData()

Для

let receiptData = rawReceiptData.base64EncodedString()

Если вы хотите выполнить проверку квитанции на стороне сервера, используя Firestore и облачную функцию, пример кода на вопрос должен сильно помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...