Apple verify receipt still returns 21002
See original GitHub issueVersion of react-native-iap
4.6.1
Version of react-native
0.63.2
Platforms you faced the error (IOS or Android or both?)
iOS
Expected behavior
Getting the JSON response from Apple VerifyReceipt service
Actual behavior
Getting a status 21002 error
Tested environment (Emulator? Real Device?)
Both
Steps to reproduce the behavior
Here’s my React Native code :
if (Platform.OS === 'ios') {
console.log('PURCHASE IOS IS DONE');
console.log('Transaction Receipt', JSON.stringify({ transaction: purchase }));
RNIap.getReceiptIOS().then(async result => {
console.log('Purchase Receipt', result);
});
}
It returns me this purchaseReceipt :
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
When I’m trying to send it through postman or any other way, the Apple response is forever :
{ "status": 21002 }
And yes I add the password field with my shared secret key to the request.
I know it means that the current receipt is mal-formatted or something but I don’t know what do to with it as it seems already to be base64 encoded.
Any idea ?
Issue Analytics
- State:
- Created 3 years ago
- Reactions:4
- Comments:15 (1 by maintainers)
The validation of receipt doesn’t work on Simulator and EITHER on real device. You must test it with a download from Testflight and then running your app on a real device. This is how I finally achieved this.
fixed by replace axios to native fetch