使用 React JS 条纹

Stripe with React JS

我需要在 React JS 中使用 Stripe.js 创建令牌,但我找不到任何简单的方法。在 node.js 我会做这样的事情:

   stripeClient.tokens.create({
      card: {
        number: '4242424242424242',
        exp_month: 12,
        exp_year: 2050,
        cvc: '123'
      }

但是 Stripe npm 模块在 React JS 中对我不起作用。我遇到错误:

Cannot resolve module 'child_process'

因为这显然是节点库,所以我想使用

<script type="text/javascript" src="https://js.stripe.com/v2/"></script>

但我不确定在 React 中实现外部库的最佳实践应该是什么

您可以像添加任何其他客户端库一样继续添加它,就像您过去所做的那样。

包括这个脚本标签:

<script type="text/javascript" src="https://js.stripe.com/v2/"></script>

然后使用它在您的代码中公开的全局变量。

import React from 'react';

// we didn't have to import stripe, because it's already
// in our global namespace.
Stripe.setPublishableKey('pk_test_6pRNASCoBOKtIshFeQd4XMUh');

它不像能够从 NPM 要求它那么干净,但它会工作得很好。

对于那些在 React 中使用 Stripe 时寻求指导的人:Accept Stripe Payments with React and Express 是一篇文章,其中包含 React 中 Stripe 的直接实现(create-react-app)和一个最小的 Express 服务器来处理您的支付请求并将它们转发到 Stripe 平台。本文将样板文件保持在最低限度,并附带一个您可以自己尝试的开源项目。

切换到 BrainTree
他们支持可以与 create-react-app (Webpack / Browserify): https://developers.braintreepayments.com/guides/client-sdk/setup/javascript/v3#npm

一起使用的客户端 NPM 包

npm install --save braintree-web

不幸的是,Stripe 和 React 不能很好地结合在一起
Stripe on NPM 的版本仅供服务器端使用;因此,即使您使用 Webpack / Browserify 库(由 create-react-app 提供),客户端功能也可以配置 public-key 并标记信用-卡片信息缺失。
对于客户端,Stripe 更喜欢从外部 URL 使用 "stripe.js"https://js.stripe.com/v3/。不幸的是,外部 URL 不太适合 create-react-app - 例如,ES6 import 不能使用,并且外部文件未被 Webpack 捆绑。此外,版本 (v3) 强制用户使用 elements 方法并查询 DOM(基本上与 React 背道而驰)。

您可以在 html 文件中直接添加 link,但另一方面,即使没有要求,它也会每次加载。 所以我建议你通过你的代码添加条带库以保持 lazy lodaing 概念。

            const script = document.createElement("script");
            script.src = "https://js.stripe.com/v3/";
            script.async = true;
            document.body.appendChild(script); 

然后

Stripe = Stripe('your keys').

之后Stripe.createToken('add any of your card element').then(setOutcome)

请试试这个方法... 在publicindex.html

<script src="https://js.stripe.com/v2/"></script>
    <title>React App</title>
</head>

并在组件中

componentDidMount() {
    if(window.Stripe.setPublishableKey){
        window.Stripe.setPublishableKey('pk_test_LkK8cMTD4YXUImjZquRnAqXb');
    }
}

它对我有用...

然后在调用 Stripe 方法时,您只需要做:

!window.Stripe.card.validateCardNumber(