Ошибка 401 с внешним отчетом от отчета о покупке API -серверHtml

Программисты Html
Ответить
Anonymous
 Ошибка 401 с внешним отчетом от отчета о покупке API -сервер

Сообщение Anonymous »

Доброе утро, я настраиваю в бэкэнд отправки отчетов, касающихся покупок, сделанных в приложении с внешней платформой (полоса) в соответствии с документацией. Чтобы ясно, я говорю о ExternalPurchase. Однако, когда я делаю звонок, он возвращает: «Apple ответила со статусом 401». Я проверил токен на jwt.io в соответствии с документацией, и он работает. Я не понимаю, куда я пойду не так.const express = require("express");
const bodyParser = require("body-parser");
const jwt = require("jsonwebtoken");
const fs = require("fs");
const app = express();
const https = require("https");

const APPLE_KEY_ID = "xxx";
const APPLE_ISSUER_ID = "xxx-xxx-xxx-xxx-xxx";
const APPLE_PRIVATE_KEY = fs.readFileSync("AuthKey_xxx.p8", "utf8");
const APPLE_AUDIENCE = "appstoreconnect-v1";

function generateAppleJwt() {
const now = Math.floor(Date.now() / 1000);
const payload = {
iss: APPLE_ISSUER_ID,
iat: now,
exp: now + (5 * 60),
aud: APPLE_AUDIENCE
};

return jwt.sign(payload, APPLE_PRIVATE_KEY, {
algorithm: "ES256",
header: {
alg: "ES256",
kid: APPLE_KEY_ID,
typ: "JWT"
}
});
}

app.post('/webhook', bodyParser.json({ type: 'application/json' }), async (req, res) => {
let eventType = req.body.type;

const relevantEvents = [
"invoice.paid"
];

if (relevantEvents.includes(eventType)) {
try {
const data= req.body.data;
const platform = data.object.subscription_details.metadata.platform;

if (platform === "IOS") {
const token = generateAppleJwt();

const applePayload = {
appAppleId: "xxx",
bundleId: 'com.xxx.xxx.test',
externalPurchaseId: data.object.id,
purchaseTime: new Date(data.object.created * 1000).toISOString(),
purchaseAmount: {
amount: (data.object.total / 100).toFixed(2),
currencyCode: data.object.currency.toUpperCase()
},
purchaseLocation: {
isoCountryCode: "IT"
}
};

const jsonString = JSON.stringify(applePayload);
const agent = new https.Agent({ keepAlive: false });

const response = await fetch(
"https://api.storekit-sandbox.apple.com/ ... v1/reports",
{
method: "PUT",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
"Accept-Encoding": "identity",
},
body: JSON.stringify(applePayload),
}
);

if (!response.ok) {
const errorText = await response.text();
throw new Error(
`Apple responded with status ${response.status}: ${errorText}`
);
}

console.log("✅ Notifica inviata ad Apple con successo");

} else {
if(!canSendNotification){
console.log("Non è una Sub. Nessuna notifica inviata.");
}else{
console.log("Customer non iOS. Nessuna notifica inviata.");
}
}

} catch (err) {
console.error("Errore durante l’invio ad Apple:");
if (err.response) {
console.error("Status:", err.response.status);
console.error("Headers:", err.response.headers);
console.error("Data:", err.response.data);
} else {
console.error("Message:", err.message);
}
}
}

res.status(200).send("OK");
});

exports.checkSubStripe = functions.https.onRequest(app);


Подробнее здесь: https://stackoverflow.com/questions/796 ... ect-server
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Html»