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