Ошибка подписки при покупке приложения при проверке Google API (подписка без продления/предоплата)Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка подписки при покупке приложения при проверке Google API (подписка без продления/предоплата)

Сообщение Anonymous »

Я хочу предложить непродлеваемую подписку для пользователей моего приложения и покупок в Google Play.
У меня все настроено, но связанные транзакции не могут быть проверены должным образом с помощью моей облачной функции.
Я использую androidpublisher_v3 из «googleapis» внутри функции typescript/nodejs.
Когда я пытаюсь подтвердить подписку без продления, проверка сервера (Purchases.products:get) вызывает 404 ошибка:

Код: Выделить всё

could not verify the purchase because of error GaxiosError: The document type is not supported.
at Gaxios._request (/workspace/node_modules/gaxios/build/src/gaxios.js:136:23)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async JWT.requestAsync (/workspace/node_modules/google-auth-library/build/src/auth/oauth2client.js:408:18)
at async GooglePlayPurchaseHandler.handleNonSubscription (/workspace/lib/google-play.purchase-handler.js:85:30)
at async /workspace/node_modules/firebase-functions/lib/common/providers/https.js:458:26
.
.
.
code: 404,
errors: [
{
message: 'The document type is not supported.',
domain: 'androidpublisher',
reason: 'unsupportedDocType',
location: 'token',
locationType: 'parameter'
}
[Symbol(gaxios-gaxios-error)]: '6.5.0'"
Токен действителен, тот же, что и в Google Order Management, покупка которого оплачивается.
Если я попытаюсь подтвердить подписку без продления с помощью Purchases.subscription :get, это вызывает ошибку 404: «Ваш запрос недействителен для этой покупки подписки», что кажется нормальным, как ожидается, однажды будет использоваться Purchases.products:get для предоплаченных подписок, согласно документации.
Я боролся уже неделю и пробовал разные способы справиться с этим, но безуспешно.
Продлеваемая подписка и одноразовые непотребляемые продукты работают правильно (Purchases.subscription:get / Purchases. продукты: получить).
Мой код:

Код: Выделить всё

export class GooglePlayPurchaseHandler extends PurchaseHandler {
private androidPublisher: AndroidPublisherApi.Androidpublisher;

constructor(private dbCalls: dbCalls) {
super();
this.androidPublisher = new AndroidPublisherApi.Androidpublisher({
auth: new GoogleAuth({
credentials,
scopes: ["https://www.googleapis.com/auth/androidpublisher"],
}),
});
}

async handleSubscription(
userId: string, productData: ProductData, token: string, productID: string
) : Promise {
console.warn(
"called Google handleSubscription"
);
console.warn(
`ANDROID_PACKAGE_ID: ("${ANDROID_PACKAGE_ID}")`
);
console.warn(
`productID: ("${productID}")`
);
console.warn(
`token: ("${token}")`
);
try {
const response = await this.androidPublisher.purchases.subscriptions.get({
packageName: ANDROID_PACKAGE_ID,
subscriptionId: productID,
token,
});

if (!response.data.orderId) {
console.error("Could not handle purchase without order id");
return false;
}

console.log("mapped orderId handleSubscription");
// Update order id if necessary
let orderId = response.data.orderId;
const orderIdMatch = /^(.+)?[.]{2}[0-9]+$/g.exec(orderId);
if (orderIdMatch) {
orderId = orderIdMatch[1];
}

console.log("called SubscriptionPurchase handleSubscription Google Play");
const purchaseData: SubscriptionPurchase = {
iapSource: "google_play",
orderId: orderId,
productId: productID,
userId: userId,
purchaseDate: new Date(parseInt(response.data.startTimeMillis ?? "0", 10)),
type: "SUBSCRIPTION",
expiryDate: new Date(parseInt(response.data.expiryTimeMillis ?? "0", 10)),
status: [
"PENDING",
"ACTIVE",
"ACTIVE",
"PENDING",
"EXPIRED",
][response.data.paymentState ?? 4] as SubscriptionStatus,
};
if (userId) {
await this.dbCalls.insertPurchaseInfo(
{...purchaseData, userId} as Purchase
);
} else {
await this.dbCalls.updatePurchaseInfo(
purchaseData as Purchase
);
}
return true;
} catch (e) {
console.log("could not verify the purchase because of error", e);
return false;
}
}
Мои зависимости:

Код: Выделить всё

"dependencies": {
"firebase-admin": "^12.1.0",
"firebase-functions": "^4.9.0",
"google-auth-library": "^9.8.0",
"googleapis": "^134.0.0",
"node-apple-receipt-verify": "^1.13.0"
},
Заранее всем спасибо.

Подробнее здесь: https://stackoverflow.com/questions/783 ... ing-subscr
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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