Я получаю сообщение об ошибке при выполнении 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
FinishTransaction не работает при оплате внутриигровых приложений Android в приложениях, созданных с помощью RN Webview ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
URL-адрес обратного вызова при оплате UPI в Android с использованием upi://
Anonymous » » в форуме Android - 0 Ответы
- 46 Просмотры
-
Последнее сообщение Anonymous
-