У меня есть приложение 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. Может кто-нибудь, пожалуйста, скажите мне, как это сделать правильно?
Спасибо за вашу помощь!
Задача ещё не решена.
Других решений пока нет …