javascript — Электрон — Покупка в приложении — как проверить получение Apple с помощью PHP?

У меня есть приложение Electron с Покупки в приложении интегрированный.

Сами покупки в приложении работают — я могу опустить цену и отобразить ее — и пользователь может купить IAP. Однако у меня возникли проблемы с подтверждением получения Apple.

Я использую это Яблочно-магазин-квитанций валидатор-в-PHP PHP-скрипт для проверки получения Apple. И это прекрасно работает, если я использую данные квитанции по умолчанию («ewoJInNpZ25hdHVyZSIgPSAiQX …» — строка 18 в сценарии PHP), где я получаю этот ответ:

{
"receipt":{
"original_purchase_date_pst":"2012-04-30 08:05:55 America\/Los_Angeles",
"original_transaction_id":"1000000046178817",
"original_purchase_date_ms":"1335798355868",
"transaction_id":"1000000046178817",
"quantity":"1",
"product_id":"com.mindmobapp.download",
"bvrs":"20120427",
"purchase_date_ms":"1335798355868",
"purchase_date":"2012-04-30 15:05:55 Etc\/GMT",
"original_purchase_date":"2012-04-30 15:05:55 Etc\/GMT",
"purchase_date_pst":"2012-04-30 08:05:55 America\/Los_Angeles",
"bid":"com.mindmobapp.MindMob",
"item_id":"521129812"},
"status":0
}

Однако, когда я читаю файл квитанции Apple, кодирую его в base64 и отправляю в скрипт проверки в Electron, я получаю следующий ответ:

{
status:21002
}

Согласно Сайт Apple для разработчиков, этот код ошибки означает:

The data in the receipt-data property was malformed or missing.

Вот как я читаю квитанцию ​​Apple, кодирую ее в base64 и отправляю в скрипт php:

inAppPurchase.on('transactions-updated', (event, transactions) => {
transactions.forEach(function (transaction) {
var payment = transaction.payment

switch (transaction.transactionState) {

case 'purchased':
// Get the receipt url.
let receiptURL = inAppPurchase.getReceiptURL()

// get receipt data from file
var receiptRaw = fs.readFileSync(receiptURL)

// base64 encode the receipt data
var receiptEncoded = receiptRaw.toString('base64')

// submit the receipt file to the server and check if it is valid
$this.$axios({
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: {
res: receiptEncoded
},
url: 'http://temp.dconnell.co.uk'
}).then(function (response) {
console.log('response: ', response);
if (!response.data.status) {
console.log('Valid receipt.');
}
else {
console.log('Invalid receipt!');
}
}).catch(function (error) {
console.log(error);
});

// Finish the transaction.
inAppPurchase.finishTransactionByDate(transaction.transactionDate)
break

default:
break
}

})
})

Я также пытался использовать JS-base64 библиотека для кодирования данных квитанции Apple, но безрезультатно:

var receiptEncoded = Base64.encode(receiptRaw)

Я считаю, что перед отправкой я неправильно читаю и / или не кодирую данные файла чека Apple. Может кто-нибудь, пожалуйста, скажите мне, как это сделать правильно?

Спасибо за вашу помощь!

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]