Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

validateReceiptIos() not working #2432

Open
Stophface opened this issue May 9, 2023 · 3 comments
Open

validateReceiptIos() not working #2432

Stophface opened this issue May 9, 2023 · 3 comments

Comments

@Stophface
Copy link

Stophface commented May 9, 2023

Description

I am trying to validate an iOS receipt on the device. I am following along what is written in the documentation here: https://react-native-iap.dooboolab.com/docs/guides/receipts. This should be pretty straigh forward. What I am actually getting as a response is a {"status": 21002}. When I validate the receipt with another library (https://github.com/sibelius/iap-receipt-validator) I am able to validate the receipt. I wonder why it is not working with react-native-iap.

Expected Behavior

A validated receipt from Apple.

Screenshots

Environment:

  • react-native-iap: 11.0.0-rc.7
  • react-native: 0.71.7
  • Platforms (iOS, Android, emulator, simulator, device): iOS Simulator

To Reproduce
This does not work

import {validateReceiptIos} from 'react-native-iap';

const isTestEnvironment = __DEV__;
try {
  const decodedReceipt = await validateReceiptIos(
    JSON.stringify({
      'receipt-data': '...',
      password: APP_STORE_CONNECT_SHARED_SECRET,
    }),
    isTestEnvironment,
  );
  console.log(decodedReceipt);
} catch (error) {
  console.warn('Cannot validate receipt.', error);
}

{"status": 21002}


This on the contrary works

import iapReceiptValidator from 'iap-receipt-validator';

const receipt = '...';
const isProduction = __DEV__;
const validatedReceipt = iapReceiptValidator(
  APP_STORE_CONNECT_SHARED_SECRET,
  !isProduction,
);
try {
  const validationData = await validatedReceipt(receipt);
  console.log(validationData);
} catch (err) {
  console.warn(
    'Receipt could not be validated. ',
    err.valid,
    err.error,
    err.message,
  );
  return false;
}

{"environment": "Sandbox", "latest_receipt": "...", "latest_receipt_info": [{"expires_date": "2023-05-09 16:28:44 Etc/GMT", "expires_date_ms": "1683649724000", "expires_date_pst": "2023-05-09 09:28:44 America/Los_Angeles", "in_app_ownership_type": "PURCHASED", "is_in_intro_offer_period": "false", "is_trial_period": "false", "original_purchase_date": "2023-05-08 13:11:37 Etc/GMT", "original_purchase_date_ms": "1683551497000", "original_purchase_date_pst": "2023-05-08 06:11:37 America/Los_Angeles", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription_year", "purchase_date": "2023-05-09 15:28:44 Etc/GMT", "purchase_date_ms": "1683646124000", "purchase_date_pst": "2023-05-09 08:28:44 America/Los_Angeles", "quantity": "1", "subscription_group_identifier": "21308251", "transaction_id": "2000000327606606", "web_order_line_item_id": "2000000026963068"}, {"expires_date": "2023-05-09 15:23:55 Etc/GMT", "expires_date_ms": "1683645835000", "expires_date_pst": "2023-05-09 08:23:55 America/Los_Angeles", "in_app_ownership_type": "PURCHASED", "is_in_intro_offer_period": "false", "is_trial_period": "false", "original_purchase_date": "2023-05-08 13:11:37 Etc/GMT", "original_purchase_date_ms": "1683551497000", "original_purchase_date_pst": "2023-05-08 06:11:37 America/Los_Angeles", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription", "purchase_date": "2023-05-09 15:18:55 Etc/GMT", "purchase_date_ms": "1683645535000", "purchase_date_pst": "2023-05-09 08:18:55 America/Los_Angeles", "quantity": "1", "subscription_group_identifier": "21308251", "transaction_id": "2000000327599893", "web_order_line_item_id": "2000000026962711"}, {"expires_date": "2023-05-09 15:18:55 Etc/GMT", "expires_date_ms": "1683645535000", "expires_date_pst": "2023-05-09 08:18:55 America/Los_Angeles", "in_app_ownership_type": "PURCHASED", "is_in_intro_offer_period": "false", "is_trial_period": "false", "original_purchase_date": "2023-05-08 13:11:37 Etc/GMT", "original_purchase_date_ms": "1683551497000", "original_purchase_date_pst": "2023-05-08 06:11:37 America/Los_Angeles", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription", "purchase_date": "2023-05-09 15:13:55 Etc/GMT", "purchase_date_ms": "1683645235000", "purchase_date_pst": "2023-05-09 08:13:55 America/Los_Angeles", "quantity": "1", "subscription_group_identifier": "21308251", "transaction_id": "2000000327597406", "web_order_line_item_id": "2000000026962309"}, {"expires_date": "2023-05-09 15:13:55 Etc/GMT", "expires_date_ms": "1683645235000", "expires_date_pst": "2023-05-09 08:13:55 America/Los_Angeles", "in_app_ownership_type": "PURCHASED", "is_in_intro_offer_period": "false", "is_trial_period": "false", "original_purchase_date": "2023-05-08 13:11:37 Etc/GMT", "original_purchase_date_ms": "1683551497000", "original_purchase_date_pst": "2023-05-08 06:11:37 America/Los_Angeles", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription", "purchase_date": "2023-05-09 15:08:55 Etc/GMT", "purchase_date_ms": "1683644935000", "purchase_date_pst": "2023-05-09 08:08:55 America/Los_Angeles", "quantity": "1", "subscription_group_identifier": "21308251", "transaction_id": "2000000327594191", "web_order_line_item_id": "2000000026961982"}, {"expires_date": "2023-05-09 15:08:55 Etc/GMT", "expires_date_ms": "1683644935000", "expires_date_pst": "2023-05-09 08:08:55 America/Los_Angeles", "in_app_ownership_type": "PURCHASED", "is_in_intro_offer_period": "false", "is_trial_period": "false", "original_purchase_date": "2023-05-08 13:11:37 Etc/GMT", "original_purchase_date_ms": "1683551497000", "original_purchase_date_pst": "2023-05-08 06:11:37 America/Los_Angeles", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription", "purchase_date": "2023-05-09 15:03:55 Etc/GMT", "purchase_date_ms": "1683644635000", "purchase_date_pst": "2023-05-09 08:03:55 America/Los_Angeles", "quantity": "1", "subscription_group_identifier": "21308251", "transaction_id": "2000000327591636", "web_order_line_item_id": "2000000026961691"}, {"expires_date": "2023-05-09 15:03:55 Etc/GMT", "expires_date_ms": "1683644635000", "expires_date_pst": "2023-05-09 08:03:55 America/Los_Angeles", "in_app_ownership_type": "PURCHASED", "is_in_intro_offer_period": "false", "is_trial_period": "false", "original_purchase_date": "2023-05-08 13:11:37 Etc/GMT", "original_purchase_date_ms": "1683551497000", "original_purchase_date_pst": "2023-05-08 06:11:37 America/Los_Angeles", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription", "purchase_date": "2023-05-09 14:58:55 Etc/GMT", "purchase_date_ms": "1683644335000", "purchase_date_pst": "2023-05-09 07:58:55 America/Los_Angeles", "quantity": "1", "subscription_group_identifier": "21308251", "transaction_id": "2000000327588504", "web_order_line_item_id": "2000000026901091"}, {"expires_date": "2023-05-08 23:21:52 Etc/GMT", "expires_date_ms": "1683588112000", "expires_date_pst": "2023-05-08 16:21:52 America/Los_Angeles", "in_app_ownership_type": "PURCHASED", "is_in_intro_offer_period": "false", "is_trial_period": "false", "original_purchase_date": "2023-05-08 13:11:37 Etc/GMT", "original_purchase_date_ms": "1683551497000", "original_purchase_date_pst": "2023-05-08 06:11:37 America/Los_Angeles", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription_year", "purchase_date": "2023-05-08 22:21:52 Etc/GMT", "purchase_date_ms": "1683584512000", "purchase_date_pst": "2023-05-08 15:21:52 America/Los_Angeles", "quantity": "1", "subscription_group_identifier": "21308251", "transaction_id": "2000000327041726", "web_order_line_item_id": "2000000026898594"}, {"expires_date": "2023-05-08 22:21:52 Etc/GMT", "expires_date_ms": "1683584512000", "expires_date_pst": "2023-05-08 15:21:52 America/Los_Angeles", "in_app_ownership_type": "PURCHASED", "is_in_intro_offer_period": "false", "is_trial_period": "false", "original_purchase_date": "2023-05-08 13:11:37 Etc/GMT", "original_purchase_date_ms": "1683551497000", "original_purchase_date_pst": "2023-05-08 06:11:37 America/Los_Angeles", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription_year", "purchase_date": "2023-05-08 21:21:52 Etc/GMT", "purchase_date_ms": "1683580912000", "purchase_date_pst": "2023-05-08 14:21:52 America/Los_Angeles", "quantity": "1", "subscription_group_identifier": "21308251", "transaction_id": "2000000327027287", "web_order_line_item_id": "2000000026895847"}, {"expires_date": "2023-05-08 21:21:52 Etc/GMT", "expires_date_ms": "1683580912000", "expires_date_pst": "2023-05-08 14:21:52 America/Los_Angeles", "in_app_ownership_type": "PURCHASED", "is_in_intro_offer_period": "false", "is_trial_period": "false", "original_purchase_date": "2023-05-08 13:11:37 Etc/GMT", "original_purchase_date_ms": "1683551497000", "original_purchase_date_pst": "2023-05-08 06:11:37 America/Los_Angeles", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription_year", "purchase_date": "2023-05-08 20:21:52 Etc/GMT", "purchase_date_ms": "1683577312000", "purchase_date_pst": "2023-05-08 13:21:52 America/Los_Angeles", "quantity": "1", "subscription_group_identifier": "21308251", "transaction_id": "2000000327015553", "web_order_line_item_id": "2000000026893062"}, {"expires_date": "2023-05-08 20:21:52 Etc/GMT", "expires_date_ms": "1683577312000", "expires_date_pst": "2023-05-08 13:21:52 America/Los_Angeles", "in_app_ownership_type": "PURCHASED", "is_in_intro_offer_period": "false", "is_trial_period": "false", "original_purchase_date": "2023-05-08 13:11:37 Etc/GMT", "original_purchase_date_ms": "1683551497000", "original_purchase_date_pst": "2023-05-08 06:11:37 America/Los_Angeles", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription_year", "purchase_date": "2023-05-08 19:21:52 Etc/GMT", "purchase_date_ms": "1683573712000", "purchase_date_pst": "2023-05-08 12:21:52 America/Los_Angeles", "quantity": "1", "subscription_group_identifier": "21308251", "transaction_id": "2000000326996817", "web_order_line_item_id": "2000000026890001"}, {"expires_date": "2023-05-08 19:21:52 Etc/GMT", "expires_date_ms": "1683573712000", "expires_date_pst": "2023-05-08 12:21:52 America/Los_Angeles", "in_app_ownership_type": "PURCHASED", "is_in_intro_offer_period": "false", "is_trial_period": "false", "original_purchase_date": "2023-05-08 13:11:37 Etc/GMT", "original_purchase_date_ms": "1683551497000", "original_purchase_date_pst": "2023-05-08 06:11:37 America/Los_Angeles", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription_year", "purchase_date": "2023-05-08 18:21:52 Etc/GMT", "purchase_date_ms": "1683570112000", "purchase_date_pst": "2023-05-08 11:21:52 America/Los_Angeles", "quantity": "1", "subscription_group_identifier": "21308251", "transaction_id": "2000000326977106", "web_order_line_item_id": "2000000026886660"}, {"expires_date": "2023-05-08 18:21:52 Etc/GMT", "expires_date_ms": "1683570112000", "expires_date_pst": "2023-05-08 11:21:52 America/Los_Angeles", "in_app_ownership_type": "PURCHASED", "is_in_intro_offer_period": "false", "is_trial_period": "false", "original_purchase_date": "2023-05-08 13:11:37 Etc/GMT", "original_purchase_date_ms": "1683551497000", "original_purchase_date_pst": "2023-05-08 06:11:37 America/Los_Angeles", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription_year", "purchase_date": "2023-05-08 17:21:52 Etc/GMT", "purchase_date_ms": "1683566512000", "purchase_date_pst": "2023-05-08 10:21:52 America/Los_Angeles", "quantity": "1", "subscription_group_identifier": "21308251", "transaction_id": "2000000326955651", "web_order_line_item_id": "2000000026883509"}, {"expires_date": "2023-05-08 17:21:50 Etc/GMT", "expires_date_ms": "1683566510000", "expires_date_pst": "2023-05-08 10:21:50 America/Los_Angeles", "in_app_ownership_type": "PURCHASED", "is_in_intro_offer_period": "false", "is_trial_period": "false", "original_purchase_date": "2023-05-08 13:11:37 Etc/GMT", "original_purchase_date_ms": "1683551497000", "original_purchase_date_pst": "2023-05-08 06:11:37 America/Los_Angeles", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription_year", "purchase_date": "2023-05-08 16:21:50 Etc/GMT", "purchase_date_ms": "1683562910000", "purchase_date_pst": "2023-05-08 09:21:50 America/Los_Angeles", "quantity": "1", "subscription_group_identifier": "21308251", "transaction_id": "2000000326935049", "web_order_line_item_id": "2000000026879901"}, {"expires_date": "2023-05-08 16:21:50 Etc/GMT", "expires_date_ms": "1683562910000", "expires_date_pst": "2023-05-08 09:21:50 America/Los_Angeles", "in_app_ownership_type": "PURCHASED", "is_in_intro_offer_period": "false", "is_trial_period": "false", "original_purchase_date": "2023-05-08 13:11:37 Etc/GMT", "original_purchase_date_ms": "1683551497000", "original_purchase_date_pst": "2023-05-08 06:11:37 America/Los_Angeles", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription_year", "purchase_date": "2023-05-08 15:21:50 Etc/GMT", "purchase_date_ms": "1683559310000", "purchase_date_pst": "2023-05-08 08:21:50 America/Los_Angeles", "quantity": "1", "subscription_group_identifier": "21308251", "transaction_id": "2000000326904521", "web_order_line_item_id": "2000000026875671"}, {"expires_date": "2023-05-08 15:21:50 Etc/GMT", "expires_date_ms": "1683559310000", "expires_date_pst": "2023-05-08 08:21:50 America/Los_Angeles", "in_app_ownership_type": "PURCHASED", "is_in_intro_offer_period": "false", "is_trial_period": "false", "original_purchase_date": "2023-05-08 13:11:37 Etc/GMT", "original_purchase_date_ms": "1683551497000", "original_purchase_date_pst": "2023-05-08 06:11:37 America/Los_Angeles", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription_year", "purchase_date": "2023-05-08 14:21:50 Etc/GMT", "purchase_date_ms": "1683555710000", "purchase_date_pst": "2023-05-08 07:21:50 America/Los_Angeles", "quantity": "1", "subscription_group_identifier": "21308251", "transaction_id": "2000000326868285", "web_order_line_item_id": "2000000026871295"}, {"expires_date": "2023-05-08 14:21:50 Etc/GMT", "expires_date_ms": "1683555710000", "expires_date_pst": "2023-05-08 07:21:50 America/Los_Angeles", "in_app_ownership_type": "PURCHASED", "is_in_intro_offer_period": "false", "is_trial_period": "false", "original_purchase_date": "2023-05-08 13:11:37 Etc/GMT", "original_purchase_date_ms": "1683551497000", "original_purchase_date_pst": "2023-05-08 06:11:37 America/Los_Angeles", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription_year", "purchase_date": "2023-05-08 13:21:50 Etc/GMT", "purchase_date_ms": "1683552110000", "purchase_date_pst": "2023-05-08 06:21:50 America/Los_Angeles", "quantity": "1", "subscription_group_identifier": "21308251", "transaction_id": "2000000326821876", "web_order_line_item_id": "2000000026870847"}, {"expires_date": "2023-05-08 13:21:30 Etc/GMT", "expires_date_ms": "1683552090000", "expires_date_pst": "2023-05-08 06:21:30 America/Los_Angeles", "in_app_ownership_type": "PURCHASED", "is_in_intro_offer_period": "false", "is_trial_period": "false", "original_purchase_date": "2023-05-08 13:11:37 Etc/GMT", "original_purchase_date_ms": "1683551497000", "original_purchase_date_pst": "2023-05-08 06:11:37 America/Los_Angeles", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription", "purchase_date": "2023-05-08 13:16:30 Etc/GMT", "purchase_date_ms": "1683551790000", "purchase_date_pst": "2023-05-08 06:16:30 America/Los_Angeles", "quantity": "1", "subscription_group_identifier": "21308251", "transaction_id": "2000000326818184", "web_order_line_item_id": "2000000026870536"}, {"expires_date": "2023-05-08 13:16:30 Etc/GMT", "expires_date_ms": "1683551790000", "expires_date_pst": "2023-05-08 06:16:30 America/Los_Angeles", "in_app_ownership_type": "PURCHASED", "is_in_intro_offer_period": "false", "is_trial_period": "false", "original_purchase_date": "2023-05-08 13:11:37 Etc/GMT", "original_purchase_date_ms": "1683551497000", "original_purchase_date_pst": "2023-05-08 06:11:37 America/Los_Angeles", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription", "purchase_date": "2023-05-08 13:11:30 Etc/GMT", "purchase_date_ms": "1683551490000", "purchase_date_pst": "2023-05-08 06:11:30 America/Los_Angeles", "quantity": "1", "subscription_group_identifier": "21308251", "transaction_id": "2000000326813861", "web_order_line_item_id": "2000000026870535"}], "pending_renewal_info": [{"auto_renew_product_id": "mapbox_mapview_subscription_year", "auto_renew_status": "1", "original_transaction_id": "2000000326813861", "product_id": "mapbox_mapview_subscription_year"}], "receipt": {"adam_id": 0, "app_item_id": 0, "application_version": "1", "bundle_id": "org.reactjs.native.example.Hexplore", "download_id": 0, "in_app": [[Object], [Object]], "original_application_version": "1.0", "original_purchase_date": "2013-08-01 07:00:00 Etc/GMT", "original_purchase_date_ms": "1375340400000", "original_purchase_date_pst": "2013-08-01 00:00:00 America/Los_Angeles", "receipt_creation_date": "2023-05-08 13:18:55 Etc/GMT", "receipt_creation_date_ms": "1683551935000", "receipt_creation_date_pst": "2023-05-08 06:18:55 America/Los_Angeles", "receipt_type": "ProductionSandbox", "request_date": "2023-05-09 15:49:34 Etc/GMT", "request_date_ms": "1683647374575", "request_date_pst": "2023-05-09 08:49:34 America/Los_Angeles", "version_external_identifier": 0}, "status": 0}

@MTPL0005-AbhishekDube
Copy link

I was also facing the issue earlier but it was solved by making some changes to the way I was passing the parameter to the validateReceiptIos. before I was passing it as "RNIap.validateReceiptIos(receiptBody, true)". but now I have made the changes and called it like this "RNIap.validateReceiptIos({receiptBody: receiptBody, isTest: true})" and It started working properly .

@hotaryuzaki
Copy link

i think one of the reasons this issue is rising is because the docs are not giving the right suggestions.
i solved with this useEffect

  useEffect(() => {
    const subscription = purchaseUpdatedListener((purchase) => {
      // console.log('>>> APP JS useEffect purchaseUpdatedListener', purchase.transactionReceipt);

      const verify = async purchase => {
        const verifyPurchase = await validateReceiptIos({
          receiptBody: { 'receipt-data': purchase.transactionReceipt },
          isTest: true
        });
      }

      verify(purchase);
    });

    return () => {
      subscription.remove();
    };
  }, []);

@sandeepdoad
Copy link

sandeepdoad commented Dec 10, 2024

Hi @hotaryuzaki can, i add the below code for Production in react-native iOS ?

const verify = async purchase => {
const verifyPurchase = await validateReceiptIos({
receiptBody: {
'receipt-data': purchase.transactionReceipt,
'password': 'secret password from my apple account',
},
isTest: false
});
}

Please Help

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants