# 上线前检查表

上线集成时请使用此检查清单。

> [成为 Stripe 合作伙伴](https://stripe.com/partners/become-a-partner)访问其他最佳实践并从 Stripe 接收相关的新闻和更新。

完成每项并勾选时，每个复选框的状态都会存储在浏览器的缓存中。您可以随时回到此页面，看看自己完成了哪一项。

您可以[登录](https://dashboard.stripe.com)后看到下方您的一些当前设置。

Stripe 在设计其真实环境和*沙盒* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes)环境时，其功能[尽可能相似](https://docs.stripe.com/keys.md#test-live-modes)。在它们之间切换主要是交换您的 [API 密钥](https://docs.stripe.com/keys.md)。

如果您是开发人员（或曾让开发人员为您执行集成），在上线前也要考虑以下事项。如果您通过连接的网站或插件使用 Stripe，大部分内容可能不适用。

- [ ] 设置 API 版本
      > 除非您覆盖了 API 版本，否则所有请求都将使用您账户的 API 设置。[变更记录](https://docs.stripe.com/changelog.md)列出了所有可用版本。默认情况下，除非您在[创建端点](https://docs.stripe.com/api/webhook_endpoints/create.md)时设置了 API 版本，否则 Webhook 事件会按照您账户的 API 版本进行构建。

      如果您使用的是强类型语言（Go、Java、TypeScript、.NET），服务器端库会根据您使用的库版本固定 API 版本。如果您不熟悉 Stripe 的版本管理方式，请参阅[版本控制](https://docs.stripe.com/sdks.md#server-side-libraries)。

      要确保一切同步：

      - 在管理平台内的 [Workbench](https://dashboard.stripe.com/workbench) 中升级到最新的 API 版本
      - 对于动态语言（Node.js、PHP、Python、Ruby）：在服务器端库中[设置 API 版本](https://docs.stripe.com/sdks.md#server-side-libraries)
      - 对于强定型语言（Go、Java、TypeScript、.NET）：将您选择的库[升级到最新版本](https://docs.stripe.com/sdks.md#server-side-libraries)

- [ ] 处理边界情况
      我们创建了多个[测试值](https://docs.stripe.com/testing.md)，您可以用来模拟各种状态和响应。除了这些选项之外，请进行尽职调查，使用以下内容测试您的集成：

      - 数据不完整
      - 数据无效
      - 重复数据（例如，重试同一请求以查看会发生什么情况）我们还建议让其他人测试您的集成，尤其是当该人本身不是开发人员时。

- [ ] 检查您的 API 错误处理
      不要等到上线后才发现，自己并未妥善处理所有可能的[错误类型](https://docs.stripe.com/api/errors.md)——包括那些“绝不该”出现的错误。确保编写防御式代码，不仅要覆盖常见错误，还要能处理所有可能的情况。

      在测试错误处理时，请密切注意向用户显示哪些信息。被拒绝的卡（即`card_error`）与后端错误（例如`invalid_request_error`）是不同的问题。

- [ ] 检查您的日志记录
      Stripe 会记录使用您的 API 密钥发出的每个请求，这些记录可以在[管理平台](https://dashboard.stripe.com/logs) 中查看。我们建议您在自己的系统中也记录所有重要数据，尽管这看似冗余。如果您的服务器无法联系 Stripe 或 API 密钥出现问题，您的日志可作为备份——这两种情况都可能导致我们无法记录您的请求。

      定期检查您的日志，确保仅存储所需信息，不包含敏感内容（例如信用卡详情或个人身份信息）。

- [ ] 确保您未依赖于测试对象
      Stripe 沙盒环境中创建的对象——如计划、优惠券、产品和 SKU——无法在真实模式中使用。这可防止测试数据意外用于生产代码。在真实模式中重新创建必要对象时，请确保使用相同的 ID 值（例如，相同的计划 *ID*，而不是相同的 *name*），以保证代码正常运行。

- [ ] 确保您已注册您的生产用 Webhooks
      您的 Stripe 账户可以同时拥有测试和真实的 [Webhook 端点](https://docs.stripe.com/webhooks.md)。如果您使用 Webhooks，请确保在 Stripe 账户中定义了实时端点。然后确认实时端点的功能与测试端点完全相同。

      在检查 Webhook 状态时，还需确保生产环境的端点：

      - 处理延迟的 Webhook 通知
      - 处理重复的 Webhook 通知
      - 不要求事件通知以特定顺序发生

- [ ] 订阅 API 通知邮件列表
      建议所有开发人员都订阅我们的 [API 更新邮件列表](https://groups.google.com/a/lists.stripe.com/forum/#!forum/api-announce)，以便在我们发布新功能时可以及时了解。

- [ ] 更改及保护您的 API 密钥
      作为一项安全措施，我们建议您定期[轮换您的 API 密钥](https://docs.stripe.com/keys.md#rolling-keys)。在上线前：

      - 轮换您的密钥，以防在开发期间它们被保存在代码库之外的某个地方。
      - 确保您的代码中不包含任何 API 密钥。
      - 在您的集成上线之前，请查阅其他关于管理机密 API 密钥的 [最佳实践](https://docs.stripe.com/keys-best-practices.md)。
