Я пытаюсь настроить облачную функцию Google (GCF) для обработки уведомлений о подписке от Apple. Я знаком с GCF, но не очень хорошо знаком с написанием своего собственного REST API и Nodejs методов обработки данных, которые Apple отправляет с уведомлением. Я получаю уведомление от Apple, но только его часть. Вот мой код (с использованием express и каркасов body-parser). Я поместил всю свою функцию здесь, чтобы помочь людям, так как нет абсолютно ничего о том, как использовать GCF для уведомлений о подписке везде, где я мог бы найти в Интернете (обратите внимание, что этот код в значительной степени находится в стадии разработки, и я новичок в Nodejs):
// Set up express object
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
exports.iosNotification = functions.https.onRequest((req, res) => {
console.log("We are receiving a request from Apple.");
app.use(bodyParser.json());
let receipt = req.body.latest_receipt;
console.log(req.body);
const chunks = [];
req.on('data', chunk => {
chunks.push(chunk);
console.log('A chunk of data has arrived:', chunk);
});
req.on('end', () => {
const data = Buffer.concat(chunks);
console.log('Data: ', data);
console.log('No more data');
});
const type = req.body.notification_type;
console.log("Notification type: ", type);
const lri = req.body.latest_receipt_info;
console.log(lri, receipt);
// Verify the receipt.
validateAppleReceipt(receipt)
.then((appleResponse) => {
console.log("Receipt from App Store server validated.", appleResponse);
res.sendStatus(200);
const oTxId = appleResponse.latest_receipt_info[0].original_transaction_id;
// Receipt is valid and we let Apple know. Let's process the notification.
switch (type) {
case 'CANCEL':
// User canceled the subscription (like on accidental purchase).
console.log("User canceled a subscription.");
break;
case 'DID_CHANGE_RENEWAL_PREF':
console.log("The subscriber downgraded. Effective on next renewal. Handle.");
break;
case 'DID_CHANGE_RENEWAL_STATUS':
console.log("The subscriber downgraded or upgraded. Effective on next renewal. Handle.");
break;
case 'DID_FAIL_TO_RENEW':
console.log("Subscription has a billing issue. Check if in billing retry period.");
break;
case 'DID_RECOVER':
console.log("Renewal of expired subscription that failed to renew.");
break;
case 'INITIAL_BUY':
console.log("Initial purchase. Ignored because we already handled with another function.");
break;
case 'INTERACTIVE_RENEWAL':
console.log("Interactive renewal. Not sure if we'll ever see this.");
break;
case 'RENEWAL':
console.log("Renewal after failure. Same as DID_RECOVER. Handle there.");
break;
default:
console.log("Hit default.");
break;
};
})
.catch((error) => {
console.log("Error validating receipt from App Store server.", error);
});
});
Это вывод, который я получаю (это только часть уведомления, которое Apple отправляет). Я не получаю notification_type
или другие части файла JSON, которые, согласно документам Apple, должны быть получены:
{ latest_receipt: 'ewoJInNpZ25hdHVyZSIgPSAiQTNVM0FjaDJpbXRPMG53cEtrQW9 <<shortened for this post>>
Я никогда не вижу console.log для каких-либо кусков.
Что я могу сделать, чтобы убедиться, что я получил все «куски» и сложил их в полный файл JSON, который Apple отправляет мне, чтобы я мог с ним работать?