Я получаю сообщение об ошибке при выполнении 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
Форум для тех, кто программирует под Android
1716453446
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: ''} : {}),
});
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78521861/finishtransaction-not-working-while-paying-for-android-in-app-on-apps-made-with[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия