# @adopted-ember-addons/ember-stripe-elements 中文文档

规范地址：https://npmcn.com/package/%40adopted-ember-addons/ember-stripe-elements/

版本：2\.0\.5
npm 元数据更新时间：2024-10-18T21:34:56.265Z
中文译文更新时间：2026-11-05T20:14:08.769Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40adopted-ember-addons/ember-stripe-elements
原文对照：https://npmcn.com/package/%40adopted-ember-addons/ember-stripe-elements/?lang=original
项目主页：https://github.com/adopted-ember-addons/ember-stripe-elements#readme
源码仓库：https://github.com/adopted-ember-addons/ember-stripe-elements

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：91.2 kB，37 个文件
- TypeScript 类型：未声明
- Node.js 要求：12\.\* \|\| 14\.\* \|\| \>= 16
- 运行依赖：2 个
- 首次发布：2020-01-14T09:53:34.136Z
- 最新版本发布：2023-08-31T21:00:06.415Z
- 近 30 天下载量：30138（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：11（近 12 个月 0 个）

## 中文简介

条纹元素的简单 Ember 包装.

## 安装

```sh
npm install @adopted-ember-addons/ember-stripe-elements
```

也可以使用：`pnpm add @adopted-ember-addons/ember-stripe-elements`、`yarn add @adopted-ember-addons/ember-stripe-elements`、`bun add @adopted-ember-addons/ember-stripe-elements`

## README

![](https://github.com/adopted-ember-addons/ember-stripe-elements/raw/master/docs/img/ember-stripe-elements.png)  
![](https://github.com/adopted-ember-addons/ember-stripe-elements/raw/master/docs/img/demo.gif)

* * *

[![Build Status](https://travis-ci.org/adopted-ember-addons/ember-stripe-elements.svg?branch=master)](https://travis-ci.org/adopted-ember-addons/ember-stripe-elements) [![Latest NPM release](https://img.shields.io/npm/v/@adopted-ember-addons/ember-stripe-elements.svg)](https://www.npmjs.com/package/@adopted-ember-addons/ember-stripe-elements) [![Ember Observer Score](https://emberobserver.com/badges/@adopted-ember-addons/ember-stripe-elements.svg)](https://emberobserver.com/addons/@adopted-ember-addons/ember-stripe-elements)

# 嵌入结构元素

简单的 Ember 包装 [条纹元素](https://stripe.com/docs/elements)。 。 。 .

## 想要的维护者

如果你能抽出时间 帮助维持这个加登, 请让我们知道 [解析器](https://discord.gg/emberjs) `adopted-ember-addons` 频道或打开一个问题.

## 特征

-   弹出 `<script src="https://js.stripe.com/v3/"></script>` 输入您的申请 `<body>`
-   初始化 `Stripe` 使用您的可公布密钥
-   输入 a `stripev3` 服务到您的控制器中, 这样您就可以使用通常可用的函数 `stripe` 对象(参见 [https://stripe.com/docs/stripe-js/ reference#the-stripe-object 互联网档案馆的存檔,存档日期2014-12-22](https://stripe.com/docs/stripe-js/reference#the-stripe-object):
    -   `stripe.elements()`
    -   `stripe.confirmCardPayment()`
    -   `stripe.createToken()`
    -   `stripe.createSource()`
    -   `stripe.createPaymentMethod()`
    -   `stripe.retrieveSource()`
    -   `stripe.paymentRequest()`
    -   `stripe.redirectToCheckout()`
    -   `stripe.retrievePaymentIntent()`
    -   `stripe.handleCardPayment()`
    -   `stripe.handleCardAction()`
    -   `stripe.confirmPaymentIntent()`
    -   `stripe.handleCardSetup()`
    -   `stripe.confirmCardSetup()`
    -   `stripe.retrieveSetupIntent()`
    -   `stripe.confirmSetupIntent()`
-   简单,可配置的 Ember 组件像 `<StripeCard/>` (在上图中被删除)

## 安装

```
ember install @adopted-ember-addons/ember-stripe-elements
```

## 中断更改

**2.0.0版 (中文(简体) )**

测试助手需要从“ 通过- ember- addons/ ember- stripe- 要素/ test- support” 导入

## 兼容性

-   Ember.js v3.24 或以上 (中文(简体) )
-   Ember CLI v3.24 或以上 (中文(简体) )
-   节点.js v12 或以上

## 配置

### Ưμ㼯A

你必须设置你的 [可公布密钥](https://support.stripe.com/questions/where-do-i-find-my-api-keys) 内 `config/environment.js`。 。 。 . 还有.., [条形选项](https://stripe.com/docs/js/initializing#init_stripe_js-options) 包含您想要配置的可选值.

```js
ENV.stripe = {
  publishableKey: 'pk_thisIsATestKey',
  stripeOptions: {
    stripeAccount: 'acct_test_account',
    locale: 'en',
  },
};
```

### 模仿花纹 API

您可以配置要被嘲笑的条纹 API 而不是从中加载 `https://js.stripe.com/v3/`。用于测试.

```js
ENV.stripe = {
  mock: true,
};
```

启用时, a [缩写对象](https://github.com/adopted-ember-addons/ember-stripe-elements/blob/master/addon/utils/stripe-mock.js) 将指派给 `window.Stripe` 当您的应用程序初始化.

在测试中使用"花脸"模型时,您可能需要根据您这样的测试需求来推翻模型的方法:

```js
this.owner.lookup('service:stripev3').createToken = () => ({ token: { id: 'token' } });
```

### 测试和模拟用户输入

当一个"stripe-element"被即时化,在DOM中,基础 `stripeElement` 可通过 `stripev3` 服务。 通话 `stripeService.getActiveElements()` 将返回这些本地条纹元素.

这主要用于测试. Frade使一个在测试环境中大多无法进入的iframe 无法模拟用户输入.

您可以通过制作 `stripeElement` 发出相容事件,这是在测试时对结果的合理模拟.

这一加法包括一些为此目的可以从条纹模具中进口的方便用品.

```js
import StripeMock, { stripeEventUtils } from '@adopted-ember-addons/ember-stripe-elements/test-support';

hooks.beforeEach(() => window.Stripe = StripeMock);

stripeEventUtils.triggerReady(stripeElement);
stripeEventUtils.triggerBlur(stripeElement);
stripeEventUtils.triggerFocus(stripeElement);
stripeEventUtils.triggerIncomplete(stripeElement);
stripeEventUtils.triggerComplete(stripeElement);
stripeEventUtils.triggerError(stripeElement, additionalArgs);
stripeEventUtils.triggerChange(stripeElement, additionalArgs);
```

两者 `triggerError` 财务报告和审定财务报表 `triggerChange` 接受第二个参数,该参数可用于覆盖此加通提供的默认事件属性.

注意:这些不会实际改变"条纹UI"的内容,只是强迫条纹Element释放正在被听取的事件. 警告:这些公用设施依赖于无证方法,因此这在未来可能会被打破. 这只用于试验环境。 这些事件也并非详尽无遗,而是涵盖核心用户流量.

```js
import StripeMock, { stripeEventUtils } from '@adopted-ember-addons/ember-stripe-elements/test-support';

module('...', function (hooks) {

  hooks.beforeEach(() => window.Stripe = StripeMock);

  test('user enters valid data', function (assert) {

    //...some code rendering a {{stripe element}}

    const [stripeElement] = stripeService.getActiveElements();
    stripeEventUtils.triggerComplete(stripeElement);
    ...
  });
});
```

### 懒惰装入

需要时可以配置花脸.js来作懒载.

```js
ENV.stripe = {
  lazyLoad: true,
};
```

启用时, Frede.js 将不会被加载,直到您调用 `load()` 函数。 最好在路由中称这个功能 `beforeModel` 钩.

```js
// subscription page route

import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';

export default class SubscriptionRoute extends Route {
  @service('stripev3') stripe;

  beforeModel() {
    return this.stripe.load();
  }
}
```

注意 `load` 函数返回 a `Promise`。通过返回这个承诺,您保证在路由铺设到下一条路之前 Frede 完全装入 `model` 钩.

也可以通过 `publishableKey` 和可选 `stripeOptions` 页:1 `load` 函数.

```js
this.stripe.load('pk_thisIsATestKey', {
  locale: 'en',
  stripeAccount: 'acct_24BFMpJ1svR5A89k',
});
```

## 构成部分

### 基本情况

每个组成部分将:

-   接受相同的数组 [`options`](https://stripe.com/docs/elements/reference#element-options) 条纹元素接受
-   打电话 `update` 条纹上 `element` 若为 `options` 正在更新
-   将 JavaScript 事件装入动作
-   条纹山自己的 `StripeElement` 在一个 `<div role="mount-point">` 打开 `didInsertElement`
-   卸载 `willDestroyElement`
-   提供进入 `stripev3` 服务
-   使用 CSS 类名称 `.ember-stripe-element`
-   拥有一个CSS类,用于符合组件名称的特定元素,例如. `<EmberStripeCard/>` 有课 `.ember-stripe-card`
-   划到一个街区
-   接受 `autofocus=true` 直接通过组件,例如:. `<StripeCard @autofocus={{true}}/>`

> 每个组成部分都从 `StripeElement` 基础组件,该组件不暴露于您的应用程序.

### 行动

部件都泡了起来 [由条纹元素处理的 JavaScript 事件 `element.on()`](https://stripe.com/docs/elements/reference#element-on) 使用下列动作从 Ember 组件中提取:

-   `onReady`
-   `onBlur`
-   `onChange` (同时设置/取消) `stripeError` 组件上的财产,可随块产生)
-   `onFocus`
-   `onComplete`
-   `onError`

你可以自己处理这些动作,例如:

```hbs
<StripeCard @onBlur={{this.onBlur}} />
```

### 构成部分类型

这个加词给出了匹配不同组件的组件 [元素类型](https://stripe.com/docs/elements/reference#element-types)数字 :

条纹建议使用 `card` 元素 - 这个 `<StripeCard />` 组件提供这一投入.

此外,Frede还提供了以下元素,可以用来构建自己的表格来收集卡片细节:

-   `cardNumber`:牌号.
-   `cardExpiry`:卡片过期日期.
-   `cardCvc`: 该卡的CVC号码.
-   `postalCode`: ZIP/邮编.

这些是通过我们 `<StripeElements />` 产生每个元素类型的子组件的上下文组件:

```hbs
<StripeElements as |elements|>
  <elements.cardNumber />
  <elements.cardExpiry />
  <elements.cardCvc />
  <elements.postalCode />
</StripeElements>
```

> 这个 `<StripeElements />` 组件是无标记的组件,所以其中没有任何类等.

### 要素选项

这个 `<StripeElements />` 上下文组件确保所有单个元素都是从 同样的 [条纹元素对象](https://stripe.com/docs/stripe-js/reference#the-elements-object)。 。 。 .

如果您想要将选项传递给条纹元素对象,请将其传递给 `<StripeElements />` 内容。 例如,当使用单行时 `card` 元素 :

```hbs
<StripeElements @options={{this.elementOptions}} as |elements|>
  <elements.card @options={{this.cardOptions}} />
</StripeElements>
```

或者在创建自己的形式时:

```hbs
<StripeElements @options={{this.elementsOptions}} as |Elements|>
  <Elements.cardNumber @options={{this.cardNumberOptions}} />
  <Elements.cardExpiry />
  <Elements.cardCvc />
<StripeElements/>
```

当您创建自己的形式时, 您需要访问 Frede 链接所有单个输入的元素对象。 要做到这一点,使用 `onReady` 在其中任何一个组件上为对象存储动作 在提交表格时使用。 例如:

```js
import Component from '@glimmer/component';
import { action } from '@ember/object';

export default class FormComponent extends Component {
  stripeElement = null;

  @action
  handleReady(stripeElement) {
    this.stripeElement = stripeElement;
  }

  @action
  handleSubmit(evt) {
    evt.preventDefault();
    this.args.onSubmit(this.stripeElement);
  }
}
```

```hbs
<form {{on "submit" this.handleSubmit}}>
  <StripeElements as |Elements|>
    <Elements.cardNumber @onReady={{this.handleReady}} />
    <Elements.cardExpiry />
    <Elements.cardCvc />
    <button type="submit">Submit</button>
  <StripeElements/>
</form>
```

### 有元素的块使用 `options`

除了上面的简单用法外 `<StripeCard />`,您也可以向一个区块屈服,它将产生两个 `stripeError` 对象和 [页:1 `stripeElement` 本身](https://stripe.com/docs/elements/reference#the-element)。 。 。 .

举例来说,你可以选择制作 `stripeError`,如下(可在我们的假应用程序中运行).

```hbs
<StripeCard @options={{this.options}} as |stripeElement stripeError|>
  {{#if stripeError}}
    <p class="error">{{stripeError.message}}</p>
  {{/if}}
  <button {{on "click" (fn this.submit stripeElement)}}>Submit</button>
  {{#if this.token}}
    <p>Your token: <code>{{this.token.id}}</code></p>
  {{/if}}
</StripeCard>
```

还注意到 `submit` 移动到 `stripeElement`您可以在控制器中这样定义 :

```js
import Controller from '@ember/controller';
import { inject as service } from '@ember/service';
import { tracked } from "@glimmer/tracking";
import { action } from '@ember/object';

export default class SubscriptionController extends Controller {
  @service stripev3;

  options = {
    hidePostalCode: true,
    style: {
      base: {
        color: '#333',
      },
    },
  };

  @tracked token = null;

  @action
  async submit(stripeElement) {
    const { token } = await this.stripe.createToken(stripeElement);
    this.token = token;
  }
}
```

注意命名公约 `stripeElement` 改为 `element`,因为这可能与使用 `element` 在一个Ember组件.

### 样式

请注意,您可以使用 CSS 来样式组件的一些方面,但请注意 [页:1 `styles` 目标 `options` 优先排序](https://stripe.com/docs/elements/reference#element-options)。 。 。 .

## 捐款

叉出这回波,做个新的分行,并发出拉出请求. 请添加测试以合并您的更改 .

### 安装

```sh
git clone git@github.com:adopted-ember-addons/ember-stripe-elements.git
cd ember-stripe-elements
npm install
```

### 运行

```sh
ember serve
```

访问您的应用程序 [http://localhost:4200 (英语)](http://localhost:4200/)。 。 。 .

### 运行测试

```sh
ember test
```

#### 在浏览器中测试自动填充

里面有自签名的证书 `/ssl` 这将允许您在模拟应用程序内测试自动填充(或者作为您自己在应用程序中进行这项工作的蓝图).

要使用自签证书运行,必须:

-   添加 `127.0.0.1 localhost.ssl` 给您的 `hosts` 文件
-   运行应用程序 `ember serve --ssl`
-   将证书添加到您的密钥链并信任它用于 SSL
-   访问应用程序 : [https://localhost.ssl:4200 (英语)](https://localhost.ssl:4200/)。 。 。 .

### 大楼

```sh
ember build
```

关于使用ember-cli的更多信息,请访问 [https://ember-cli.com/ (中文(简体) )](https://ember-cli.com/)。 。 。 .

## 贡献者

多亏了@begedin、@snewcomer、@filipecrosk和@Kilowhisky!

## 常见问题

### @adopted-ember-addons/ember-stripe-elements 是什么？

条纹元素的简单 Ember 包装\.

### 如何安装 @adopted-ember-addons/ember-stripe-elements？

在项目目录运行 npm install @adopted-ember-addons/ember-stripe-elements，或使用 pnpm add / yarn add / bun add。

### @adopted-ember-addons/ember-stripe-elements 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/adopted-ember-addons\_\_ember-stripe-elements 是否存在。

### @adopted-ember-addons/ember-stripe-elements 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js 12\.\* \|\| 14\.\* \|\| \>= 16。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @adopted-ember-addons/ember-stripe-elements 可以商用吗？

@adopted-ember-addons/ember-stripe-elements 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @adopted-ember-addons/ember-stripe-elements 的下载量有多少？

根据 npm 官方下载统计，@adopted-ember-addons/ember-stripe-elements 在 2026/10/05 – 2026/11/03 这 30 天内被下载 30,138 次，日均约 1,005 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @adopted-ember-addons/ember-stripe-elements 还在维护吗？

最新版本 2\.0\.5 发布于 2023/09/01（3 年前）；至今共发布 11 个版本，其中过去 12 个月发布了 0 个；首次发布于 2020/01/14。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

