Sac*_*ria 7 javascript stripe-payments reactjs stripe.js react-stripe-elements
我正在使用 react-stripe-elements 创建一个用于支付的令牌。但是,根据文档,当卡片形式包含在 Elements 组件中时,它应该自动选择要标记化的条纹元素。
但是,在这种情况下,我们会遇到错误
You must provide a Stripe Element or a valid token type to create a Token.
Run Code Online (Sandbox Code Playgroud)
这是代码:
import React from 'react';
import {CardCVCElement, CardExpiryElement, CardNumberElement, PostalCodeElement, StripeProvider, Elements} from 'react-stripe-elements';
class CheckoutForm extends React.Component {
constructor(props) {
super(props);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleSubmit(ev) {
ev.preventDefault();
this.props.stripe.createToken({email: 'test@test.com'}).then(({token }) => {console.log('Received Stripe token:', token)});
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
Card details
<CardNumberElement />
<CardExpiryElement />
<CardCVCElement />
<PostalCodeElement />
</label>
<button>Confirm order</button>
</form>
);
}
}
class App extends React.Component {
constructor() {
super();
this.state = { stripe: null };
}
componentDidMount() {
this.setState({ stripe: window.Stripe('test_key') });
}
render() {
return (
<StripeProvider stripe={this.state.stripe}>
<Elements>
<CheckoutForm stripe={this.state.stripe} />
</Elements>
</StripeProvider>
);
}
}
export default App;
Run Code Online (Sandbox Code Playgroud)
根据文档,以下内容应该是正确的:
“在 的上下文中Elements
,对 createToken 的调用知道要标记哪个元素,因为该组中只有一个元素。”
然而,情况似乎并非如此。我也尝试过使用单一的“卡片元素”,但没有发现任何成功。
事实证明我从未设法使用react-stripe-elements 解决这个问题。我最终使用了标准 JS 版本(来自 stripe 文档)。这是我当前的工作解决方案:
import React from 'react';
class CheckoutForm extends React.Component {
constructor(props) {
super(props);
this.handleSubmit = this.handleSubmit.bind(this);
this.state = {
elements: null,
card: null
};
}
componentWillReceiveProps() {
this.setState({ elements: this.props.stripe.elements() }, () => {
this.setState({ card: this.state.elements.create('card') }, () => {
this.state.card.mount('#card-element');
});
});
}
handleSubmit(ev) {
ev.preventDefault();
this.props.stripe.createToken(this.state.card).then((token) => {
console.log('Received Stripe token:', token);
});
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<div className="row">
<label >
Credit or debit card
</label>
<div id="card-element"/>
<div id="card-errors" role="alert"/>
</div>
<button>Submit Payment</button>
</form>
);
}
}
class App extends React.Component {
constructor() {
super();
this.state = {stripe: window.Stripe('test_key')};
}
render() {
return (
<CheckoutForm stripe={this.state.stripe}/>
);
}
}
export default App;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9702 次 |
最近记录: |