You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native Expo集成Razorpay报错:TypeError: Cannot read property 'open' of null

解决React Native Razorpay中TypeError: Cannot read property 'open' of null的问题

这个错误本质是RazorpayCheckout实例未正确初始化,通常是原生端依赖未正确链接或项目缓存导致的,以下是针对性的解决步骤:

1. 确保原生端依赖链接完成

React Native 0.60+支持自动链接,但部分场景下可能失效,需手动验证:

iOS端:

  • 进入项目根目录下的ios文件夹,执行:
    pod install
    
  • 完成后重新用Xcode编译项目,或执行npx react-native run-ios

Android端:

  • 检查android/app/build.gradle的dependencies块中是否包含:
    implementation project(':react-native-razorpay')
    
  • 检查android/settings.gradle是否包含:
    include ':react-native-razorpay'
    project(':react-native-razorpay').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-razorpay/android')
    
  • 确认MainApplication.java中已自动注册RazorpayPackage(0.60+版本自动完成,无需手动添加)

2. 清理缓存并重启项目

缓存问题常导致依赖加载异常,执行以下操作:

  • 清除npm缓存:
    npm cache clean --force
    
  • 重置Metro缓存并重启服务:
    npx react-native start --reset-cache
    
  • 关闭当前模拟器/真机,重新编译运行项目

3. 重新安装依赖确保完整性

如果上述步骤无效,尝试完全重置依赖:

  • 删除node_modules文件夹和锁文件:
    rm -rf node_modules package-lock.json yarn.lock
    
  • 重新安装依赖:
    npm install
    
  • 再次执行iOS端的pod install

4. 验证代码调用逻辑

确保代码中没有提前调用open方法,比如不要在组件初始化阶段(如constructor、组件挂载前)调用,必须在用户触发的事件回调(如onPress)或组件挂载完成后调用。

以下是正确的调用示例:

import React from 'react';
import { TouchableOpacity, Text } from 'react-native';
import RazorpayCheckout from 'react-native-razorpay';

const PaymentButton = () => {
  const handlePayment = () => {
    const paymentOptions = {
      key: 'rzp_test_你的商家密钥',
      amount: '5000', // 单位为最小货币单位,如5000代表50 INR
      currency: 'INR',
      name: '测试商家',
      description: '测试商品支付',
      prefill: {
        contact: '1234567890',
        email: 'test@example.com'
      }
    };

    RazorpayCheckout.open(paymentOptions)
      .then(res => {
        console.log('支付成功:', res);
      })
      .catch(err => {
        console.error('支付失败:', err);
      });
  };

  return (
    <TouchableOpacity onPress={handlePayment} style={{ padding: 15, backgroundColor: '#2196F3' }}>
      <Text style={{ color: '#fff', fontSize: 16 }}>发起支付</Text>
    </TouchableOpacity>
  );
};

export default PaymentButton;

5. 检查Razorpay配置参数

确保options中的key是从Razorpay后台获取的有效密钥(测试环境用rzp_test_xxx,生产环境用rzp_live_xxx),其他参数如amount、currency格式符合要求。

内容的提问来源于stack exchange,提问作者jeevan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 09:20:22