【发布时间】:2018-07-09 05:33:08
【问题描述】:
我正在使用 react-stripe-elements 创建支付令牌。但是,根据文档,当卡片表单包装在 Elements 组件中时,它应该会自动选取要标记的条带元素。
但是,在这种情况下,我们会遇到错误
You must provide a Stripe Element or a valid token type to create a Token.
代码如下:
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;
根据文档,以下应该是正确的:
'在Elements 的上下文中,这个对 createToken 的调用知道要标记哪个元素,因为这个组中只有一个。'
但是,情况似乎并非如此。我也尝试过使用单一的“卡片元素”,但没有发现任何成功。
【问题讨论】:
-
结尾处缺少
':this.props.stripe.createToken({email: 'test@test.com -
谢谢 - 更新(同样的错误)
-
对 react-stripe 不太了解,但似乎您需要使用 HOC
injectStripe(CheckoutForm)而不是直接在ChekoutForm props中传递 stripe -
在这种情况下,我已经通过 props 手动传递了条带对象,我认为结果是相同的(条带已加载,并且在控制台中打印时存在功能。
-
当我使用
injectStripe方法时,它对我来说很好。我尝试做与您类似的事情,因为我正在使用 Redux,但我无法让它工作。我回到只在任何connect()调用下方的组件中使用条带,但使用自述文件github.com/stripe/react-stripe-elements#getting-started 中的主要方法。
标签: javascript reactjs stripe.js stripe-payments