FinishTransaction не работает при оплате внутриигровых приложений Android в приложениях, созданных с помощью RN WebviewAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 FinishTransaction не работает при оплате внутриигровых приложений Android в приложениях, созданных с помощью RN Webview

Сообщение Anonymous »

Я получаю сообщение об ошибке при выполнении FinishTransaction после процесса оплаты в приложении Android в приложении, которое я создал с помощью RN Webview. Я использую библиотеку реагирования-native-iap.
const purchase = async (sku: string, itemId: string, accessToken: string) => {
console.info('Purchase start');
console.info(JSON.stringify({sku, itemId, accessToken}, null, 2));

let order: any;
try {
const {data} = await axios.post(
`${Config.WEBVIEW_HOST}api/purchase/prepare`,
{
packId: itemId,
price: sku.split('_').pop(),
amount: 1,
currency: 'KRW',
},
{
headers: {
Authorization: `Bearer ${accessToken}`,
},
},
);
console.info('Purchase prepared');
console.info(JSON.stringify(data, null, 2));
if (data.message !== 'success') {
Alert.alert('Error', data.message);
return;
}
order = data;
console.info('order', order);
await getProducts({skus: typeof sku === 'object' ? sku : [sku]});
const requestParams: any = {};

if (Platform.OS === 'android') {
requestParams.skus = typeof sku === 'object' ? sku : [sku];
} else {
requestParams.sku = sku;
requestParams.andDangerouslyFinishTransactionAutomaticallyIOS = false;
}
const purchases = await requestPurchase(requestParams);
const {data: webhookResponse} = await axios.post(
`${Config.WEBVIEW_HOST}api/purchase/webhook`,
{
imp_uid: Platform.OS === 'ios' ? 'Apple' : 'Android',
merchant_uid: order.result.id,
receipt: (purchases as any).transactionReceipt,
status: 'paid',
},
{
headers: {
Authorization: `Bearer ${accessToken}`,
},
},
);
console.info('Webhook response');
console.info(JSON.stringify(webhookResponse, null, 2));
if (webhookResponse.message !== 'success') {
Alert.alert('Error', webhookResponse.message);
return;
}

if (purchases) {
if (Array.isArray(purchases)) {
for (const _purchase of purchases) {
await finishTransaction({
purchase: _purchase,
isConsumable: true,
...(Platform.OS === 'android'
? {developerPayloadAndroid: ''}
: {}),
});
}
} else {
await finishTransaction({
purchase: purchases,
isConsumable: true,
...(Platform.OS === 'android' ? {developerPayloadAndroid: ''} : {}),
});
}
}

webViewRef.current?.injectJavaScript(
`try {
window.finishPurchase({
itemId: '${itemId}',
orderId: '${order.result.id}'
});
} catch(error) {
console.warn(error);
}`,
);
} catch (err: any) {
console.warn(err.code, err.message);
await axios.post(
`${Config.WEBVIEW_HOST}api/purchase/cancel`,
{
orderId: order.result.id,
},
{
headers: {
Authorization: `Bearer ${accessToken}`,
},
},
);
Alert.alert('Cancel', `${err.code} ${err.message}`);
}
};

Для этого, когда я запускал функцию FinishTransaction, у меня было только отдельное ветвление Android. Но кажется, что он падает в защелку, потому что в этой строке ошибка. Вот почему я думаю, что отправлю отмену после оплаты.
if (purchases) {
if (Array.isArray(purchases)) {
for (const _purchase of purchases) {
await finishTransaction({
purchase: _purchase,
isConsumable: true,
...(Platform.OS === 'android'
? {developerPayloadAndroid: ''}
: {}),
});
}
} else {
await finishTransaction({
purchase: purchases,
isConsumable: true,
...(Platform.OS === 'android' ? {developerPayloadAndroid: ''} : {}),
});
}
}


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

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

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

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

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

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

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