@chargebee/chargebee-js-react-wrapper

中文文档
0.6.9发布于 2025/10/10MITTypeScriptESM + CJS零依赖近 30 天下载 16.1万

Curgebee.js组件的反效果包装器

中文使用文档
文档目录11 节
  1. 实例
  2. 现场直播
  3. 安装
  4. 使用量
  5. 基本用途
  6. 一个更为复杂的例子是:
  7. 使用下个JS 的服务器侧面渲染
  8. 3DS 授权
  9. 组件和API
  10. 参考:
  11. 支助

充电蜂JS反应收发器

充电器组件的回放包装器

实例

详细例子: 点击这里

现场直播

查看实况演示 这里

安装

从 npm 安装 :

npm install @chargebee/chargebee-js-react-wrapper

使用量

充电蜂组件需要您以 site 财务报告和审定财务报表 publishableKey

想知道在哪里获得您的 API 密钥吗 ? 参考这里

在你身边 index.html数字 :

<html>
    <head>
        ...
        <script src="https://js.chargebee.com/v2/chargebee.js"></script>
        <script>
            Chargebee.init({
                site: 'your-site',
                publishableKey: 'your-publishable-key'
            })
        </script>
    </head>
    <body>
        <div id='root'></div>
    </body>
</html>

基本用途

在您的反应组件中

import { CardComponent } from '@chargebee/chargebee-js-react-wrapper';

class App extends React.Component {
    cardRef = React.createRef()
    ...
    onSubmit = (e) => {
        if(e) e.preventDefault()
        this.cardRef.current.tokenize()
        .then((data) => {
          console.log('chargebee token', data.token)
        });
    }
    ...
    render() {
        // Using combined mode
        return(
            <div className="App">
                <form>
                    ...
                    <CardComponent ref={this.cardRef} onChange={this.onChange}/>
                    <button type="submit" onClick={this.onSubmit}>Submit</button>
                    ...
                </form>
            </div>
        )
    }
}

一个更为复杂的例子是:

import {CardComponent, CardNumber, CardExpiry, CardCVV} from "react-cb";
import './App.css'

class App extends Component {
  cardRef = React.createRef()

  state = {
    errors: {},
    errorMessage: '',
    // CSS class names for field's status
    classes: {
        'focus': 'focus-css-class',
        'complete': 'complete-css-class',
        'invalid': 'invalid-css-class',
        'empty': 'empty-css-class',
    },
    // Google Fonts and other whitelisted fonts
    fonts: [
        'https://fonts.googleapis.com/css?family=Open+Sans'
    ],
    // Style customizations
    styles: {
        base: {
            color: '#fff',
            fontWeight: 600,
            fontFamily: 'Quicksand, Open Sans, Segoe UI, sans-serif',
            fontSize: '16px',
            fontSmoothing: 'antialiased',

            ':focus': {
                color: '#424770',
            },

            '::placeholder': {
                color: '#9BACC8',
            },

            ':focus::placeholder': {
                color: '#CFD7DF',
            },
        },
        invalid: {
            color: '#fff',
            ':focus': {
                color: '#FA755A',
            },
            '::placeholder': {
                color: '#FFCCA5',
            },
        },
    }
  }

  onSubmit = (e) => {
    if(e) e.preventDefault()
    if(this.cardRef) {
      // Call tokenize method on card element
      this.cardRef.current.tokenize().then((data) => {
          console.log('chargebee token', data.token)
      });
    }
  }

  onChange = (status) => {
    let errors = {
      ...this.state.errors,
      [status.field]: status.error
    };
    let errMessages = Object.values(errors).filter(message => !!message);
    this.setState({
      errors,
      errorMessage: errMessages.pop() || '',
    })
  }

  onReady = (el) => {
    el.focus();
  }

  render() {
    const { fonts, styles, classes, locale } = this.state;
    // Using individual fields mode
    return (
      <div className="App">
          <div className="cell example example3" id="example-3">
            <form>
              <div className="fieldset">
                <CardComponent className="field" 
                    fonts={fonts} 
                    classes={classes} 
                    locale={locale} 
                    styles={styles} 
                    ref={this.CardRef} 
                    showTestCards={true}           
                    onReady={this.onReady}
                >
                    <CardNumber placeholder='4111 1111 1111 1111' className="field empty" onChange={this.onChange} onReady={this.onReady} />
                    <CardExpiry placeholder='MM / YY' className="field empty" onChange={this.onChange} />
                    <CardCVV placeholder='CVV' className="field empty" onChange={this.onChange} />
                </CardComponent>
              </div>
              <button type="submit" onClick={this.onSubmit}>Pay now</button>
            </form>
            <div id="errors">{this.state.errorMessage}</div>
          </div>
      </div>
    );
  }
}

使用下个JS 的服务器侧面渲染

先决条件:

充蜜蜂实例应初始化 site 财务报告和审定财务报表 API Key 启动的 cb 实例应作为道具传递给 Provider 组件。 进行了验证,以检查三件事:

  • 通过 site 作为非空字符串, 在初始化调用时
  • 通过 API Key 作为非空字符串, 在初始化调用时
  • cb 初始状态

另外,一个使用 NextJS 应设置

用法 :

  1. 装入 chargebee.js script 在任何其他代码/标语执行之前(一般) index.html) (中文(简体) ). 这是用来启动 Chargebee 成为客户端浏览器的一部分 window
<script src="https://js.chargebee.com/v2/chargebee.js"> </script>
  1. 初始化组件内部的充电蜂 DidMount( ), 在使用 SSR 时不要在构造器( ) 或渲染器( ) 中使用它
componentDidMount() {
..
    // initialize with site, publishableKey
    window.Chargebee.init({
        site: "...",
        publishableKey: "..."
    });
    
    // get cb Instance
    cbInstance = window.Chargebee.getInstance();
..
}
  1. 从模块中导入提供者、 纸质组件等组件
import {CardComponent, CardNumber, CardExpiry, CardCVV, Provider} from "@chargebee/chargebee-js-react-wrapper";
  1. 在自定义组件中,将 CardComponent 内置 a Provider 组件,通过 cbInstance 作为道具
<Provider cbInstance={this.props.cbInstance}>
   <CardComponent ... >
    ...
    </CardComponent>
</Provider>

示例

详细实例 :

import {CardComponent, CardNumber, CardExpiry, CardCVV, Provider} from "@chargebee/chargebee-js-react-wrapper";

...
componentDidMount() {
  window.Chargebee.init({
    site: "honeycomics-v3-test",
    publishableKey: "your_site_pub_api_key"
  })

  this.setState({
    cbInstance: window.Chargebee.getInstance()
  })
}

render() {
...
<script src="https://js.chargebee.com/v2/chargebee.js" ></script>
...
<Provider cbInstance={this.state.cbInstance}>
  <CardComponent ref={this.cardRef} className="fieldset field"
    styles={style} 
    classes={classes} 
    locale={locale}
    placeholder={placeholder}
    fonts={fonts}
    showTestCards={true}
  >
    <div className="ex1-field">
      {/* Card number component */}
      <CardNumber className="ex1-input"/>
      <label className="ex1-label">Card Number</label><i className="ex1-bar"></i>
    </div>

    <div className="ex1-fields">
      <div className="ex1-field">
        {/* Card expiry component */}
        <CardExpiry className="ex1-input"/>
        <label className="ex1-label">Expiry</label><i className="ex1-bar"></i>
      </div>

      <div className="ex1-field">
        {/* Card cvv component */}
        <CardCVV className="ex1-input"/>
        <label className="ex1-label">CVC</label><i className="ex1-bar"></i>
      </div>

    </div>
  </CardComponent>
</Provider>
... 
}

运行应用程序

  • npm 安装
  • (NextJS项目结构,安装了充电蜂-js-反应-收发机) - > npm 运行构建 / start / dev
"scripts": {
   "dev": "next dev",
   "build": "next build",
   "start": "next start"
 }

3DS 授权

在您的反应组件中

import { CardComponent } from '@chargebee/chargebee-js-react-wrapper';

class App extends React.Component {
    cardRef = React.createRef()
    ...
    createPaymentIntent() {
      // make ajax call to server to create payment intent
    }
    ...
    componentDidMount() {
      this.createPaymentIntent().then(intent => {
        this.state.intent = intent;
      })
    }
    ...
    onSubmit = (e) => {
        if(e) e.preventDefault()
        
        const intent = this.state.intent;
        const additionalData = this.state.additionalData;
        
        this.cardRef.current.authorizeWith3ds(intent, additionalData)
        .then(authorizedPaymentIntent => {
          console.log('Authorized payment intent', authorizedPaymentIntent.id)
        }).catch(error => {
          console.error('Error occured', error)
        });
    }
    ...
    render() {
        // Using combined mode
        return(
            <div className="App">
                <form>
                    ...
                    <CardComponent ref={this.cardRef} onChange={this.onChange}/>
                    <button type="submit" onClick={this.onSubmit}>Submit</button>
                    ...
                </form>
            </div>
        )
    }
}

组件和API

卡片组件文档(中文(简体) )

道具说明数据类型
className容器 div 的 CSS 类名称字符串
fonts字体面或链接的阵列字体
classes用于替换各种 CSS 类名的集 事件类
locale语言代码语言
styles样式定制集样式
placeholder卡片字段的一组占位符占位符
ref用于表示数据的Ref 元素反应参考文献
showTestCards添加在测试站点显示测试卡的能力布尔
活动支持( E)文档(中文(简体) )
道具说明参数
onReady组件挂起并准备好时触发器外地
onChange每个州变化的触发器战地状态
onFocus当组件被聚焦时触发战地状态
onBlur组件模糊时触发战地状态
onKeyPress在组件内按下密钥时触发
支助 ESC 键
战地状态

外地构成部分(文档(中文(简体) )

  • 卡片号码
  • 纸质打印
  • 纸牌CVV
道具说明数据类型
className容器的 CSS 类名 div字符串
styles二元字段样式样式
placeholder字段的占位符字符串
活动支持( E)文档(中文(简体) )
道具说明参数
onReady组件挂起并准备好时触发器外地
onChange每个州变化的触发器战地状态
onFocus当组件被聚焦时触发战地状态
onBlur组件模糊时触发战地状态

参考:

充气管组件-联署文件

支助

是否有人询问执行情况? 联系 支持@ forcebee.com

版本与发布记录

@chargebee/chargebee-js-react-wrapper 共发布 25 个版本,首次发布于 2019/04/28;过去 12 个月发布了 0 个版本。

版本发布日期距今
0.6.9latest2025/10/101.1 年前
0.6.82025/10/091.1 年前
0.6.72025/04/151.6 年前
0.6.6next2024/11/182 年前
0.6.7-rc.02024/11/182 年前
0.6.52024/05/202 年前

关于 @chargebee/chargebee-js-react-wrapper 的常见问题

@chargebee/chargebee-js-react-wrapper 是什么?

Curgebee.js组件的反效果包装器

如何安装 @chargebee/chargebee-js-react-wrapper?

在项目目录运行 npm install @chargebee/chargebee-js-react-wrapper,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(^19.0.0 || ^18.0.0 || ^17.0.0)、react-dom(^19.0.0 || ^18.0.0 || ^17.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@chargebee/chargebee-js-react-wrapper 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@chargebee/chargebee-js-react-wrapper 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@chargebee/chargebee-js-react-wrapper 可以商用吗?

@chargebee/chargebee-js-react-wrapper 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@chargebee/chargebee-js-react-wrapper 的下载量有多少?

根据 npm 官方下载统计,@chargebee/chargebee-js-react-wrapper 在 2026/10/10 – 2026/11/08 这 30 天内被下载 161,142 次,日均约 5,371 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@chargebee/chargebee-js-react-wrapper 还在维护吗?

最新版本 0.6.9 发布于 2025/10/10(1.1 年前);至今共发布 25 个版本,其中过去 12 个月发布了 0 个;首次发布于 2019/04/28。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。