RevenueCat / RevenueCat/react-native-purchases
IOS: Payment cancelled while doing payment from UPI
Open
@facumenzella is already working on this.
Since Feb 4, 2026.
bug
- Dominant language
- TypeScript
- Stars
- 1.2k
- Forks
- 117
- Avg merge
- 14h 40m
- Merged PRs (30d)
- 40
Description
- I have updated Purchases SDK to the latest version
- I have read the Contribution Guidelines
- I have searched the Community
- I have read docs.revenuecat.com
- I have searched for existing Github issues
Describe the bug
On IOS, while making a payment through UPI in India, the purchase is getting cancelled in background when i go to the payment app for accepting the payment.
Error Code is PURCHASE_CANCELLED in the above case as soon as i go to payment app, Payment is successful but error code is incorrect in this case.
- Environment
- Platform: IOS
- SDK version: 9.6.15
- OS version:
- Xcode/Android Studio version:
- React Native version: 0.73.11
- SDK installation (CocoaPods + version or manual):
- How widespread is the issue. Percentage of devices affected.
- Debug logs that reproduce the issue
- Steps to reproduce, with a description of expected vs. actual behavior
- Other information (e.g. stacktraces, related issues, suggestions how to fix, links for us to have context, eg. stackoverflow, etc.)
Additional context
Here is the code snippet
const purchasePackage = async (
parentAuthId: string,
parentServiceId: string,
pkg: PurchasesPackage,
) => {
return withInAppPurchase(parentAuthId, parentServiceId, async () => {
try {
const result = await Purchases.purchasePackage(pkg);
return result;
} catch (error) {
logError(InAppPurchaseAnalyticsEvents.PURCHASE_PACKAGE_FAILED, {
error,
parentAuthId,
parentServiceId,
});
throw error;
}
});
};
const purchase = useCallback(
(pkg: PurchasesPackage) => {
return purchasePackage(parentAuthId, parentServiceId, pkg);
},
[parentAuthId, parentServiceId],
);
const handlePurchase = useCallback(async () => {
if (!selectedPlan) {
return;
}
setStatus('inprogress');
trackEvent(getAnalyticsEvent('purchase', 'inprogress'), { plan_type: planType });
try {
await purchase(selectedPlan);
validateCustomerInfo();
} catch {
setStatus('failed');
}
}, [selectedPlan, planType, purchase, validateCustomerInfo]);
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.