dooboolab-community / react-native-iap

In App Purchase module for React Native!
https://react-native-iap.dooboolab.com
MIT License
2.76k stars 633 forks source link

validateReceiptIos() not working #2432

Open Stophface opened 1 year ago

Stophface commented 1 year ago

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:

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 commented 11 months ago

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 commented 4 months ago

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();
    };
  }, []);