@apple/app-store-server-library

中文文档
3.1.0发布于 2026/05/06MITTypeScriptCommonJS近 30 天下载 433.1万

App Store 服务器库

中文使用文档
文档目录13 节
  1. 目录
  2. 安装
  3. 所需资源
  4. 国家预防机制/也门
  5. 文档
  6. 从 App Store 连接获取内购密钥
  7. 获取苹果根证书
  8. 使用量
  9. API 使用量
  10. 核查使用情况
  11. 收款使用情况
  12. 促进提供签署
  13. 支助

App Store 服务器节点.js 库

用于 App Store 服务器 API, (中文(简体) ), App Store 服务器通知, (中文(简体) ), 保留通讯API,以及 高级商务 API。也可以在 挥发, (中文(简体) ), 蟒,以及 爪哇语。 。 。 .

目录

  1. 安装
  2. 文档
  3. 使用量
  4. 支助

安装

所需资源

  • 节点16+

国家预防机制/也门

# With NPM
npm install @apple/app-store-server-library --save
# With Yarn
yarn add @apple/app-store-server-library

文档

文档

WWDC 视频

从 App Store 连接获取内购密钥

要使用 App Store 服务器 API 或创建促销要约签名,需要从 App Store Connect 下载签名密钥. 要获得这个密钥,你必须拥有管理员的角色. 转到用户和访问 > 集成 > 内部购买。 您可以在这里创建和管理密钥, 并找到您的发行者 ID 。 使用密钥时,也需要密钥ID和发证人ID.

获取苹果根证书

下载并存储在 $ 1 的 Apple Root 证书部分中找到的根证书 苹果公用钥匙 网站。 将这些证书作为数组提供给一个已签名的Data验证器,以便验证所签名的数据来自苹果公司.

使用量

API 使用量

import { AppStoreServerAPIClient, Environment, SendTestNotificationResponse } from "@apple/app-store-server-library"

const issuerId = "99b16628-15e4-4668-972b-eeff55eeff55"
const keyId = "ABCDEFGHIJ"
const bundleId = "com.example"
const filePath = "/path/to/key/SubscriptionKey_ABCDEFGHIJ.p8"
const encodedKey = readFile(filePath) // Specific implementation may vary
const environment = Environment.SANDBOX

const client = new AppStoreServerAPIClient(encodedKey, keyId, issuerId, bundleId, environment)

try {
    const response: SendTestNotificationResponse = await client.requestTestNotification()
    console.log(response)
} catch (e) {
    console.error(e)
}

核查使用情况

import { SignedDataVerifier } from "@apple/app-store-server-library"

const bundleId = "com.example"
const appleRootCAs: Buffer[] = loadRootCAs() // Specific implementation may vary
const enableOnlineChecks = true
const environment = Environment.SANDBOX
const appAppleId = undefined // appAppleId is required when the environment is Production
const verifier = new SignedDataVerifier(appleRootCAs, enableOnlineChecks, environment, bundleId, appAppleId)

const notificationPayload = "ey..."
const verifiedNotification = await verifier.verifyAndDecodeNotification(notificationPayload)
console.log(verifiedNotification)

收款使用情况

import { AppStoreServerAPIClient, Environment, GetTransactionHistoryVersion, ReceiptUtility, Order, ProductType, HistoryResponse, TransactionHistoryRequest } from "@apple/app-store-server-library"

const issuerId = "99b16628-15e4-4668-972b-eeff55eeff55"
const keyId = "ABCDEFGHIJ"
const bundleId = "com.example"
const filePath = "/path/to/key/SubscriptionKey_ABCDEFGHIJ.p8"
const encodedKey = readFile(filePath) // Specific implementation may vary
const environment = Environment.SANDBOX

const client =
        new AppStoreServerAPIClient(encodedKey, keyId, issuerId, bundleId, environment)

const appReceipt = "MI..."
const receiptUtil = new ReceiptUtility()
const transactionId = receiptUtil.extractTransactionIdFromAppReceipt(appReceipt)
if (transactionId != null) {
    const transactionHistoryRequest: TransactionHistoryRequest = {
        sort: Order.ASCENDING,
        revoked: false,
        productTypes: [ProductType.AUTO_RENEWABLE]
    }
    let response: HistoryResponse | null = null
    let transactions: string[] = []
    do {
        const revisionToken = response !== null && response.revision !== null ? response.revision : null
        response = await client.getTransactionHistory(transactionId, revisionToken, transactionHistoryRequest, GetTransactionHistoryVersion.V2)
        if (response.signedTransactions) {
            transactions = transactions.concat(response.signedTransactions)
        }
    } while (response.hasMore)
    console.log(transactions)
}

促进提供签署

import { PromotionalOfferSignatureCreator } from "@apple/app-store-server-library"

const keyId = "ABCDEFGHIJ"
const bundleId = "com.example"
const filePath = "/path/to/key/SubscriptionKey_ABCDEFGHIJ.p8"
const encodedKey = readFile(filePath) // Specific implementation may vary

const productId = "<product_id>"
const subscriptionOfferId = "<subscription_offer_id>"
const appAccountToken = "<app_account_token>"
const nonce = "<nonce>"
const timestamp = Date.now()
const signatureCreator = new PromotionalOfferSignatureCreator(encodedKey, keyId, bundleId)

const signature = signatureCreator.createSignature(productId, subscriptionOfferId, appAccountToken, nonce, timestamp)
console.log(signature)

支助

只有最新的主要版本的图书馆才会收到更新,包括安全更新. 因此,建议更新新的主要版本.

版本与发布记录

@apple/app-store-server-library 共发布 14 个版本,首次发布于 2023/06/08;过去 12 个月发布了 3 个版本。

版本发布日期距今
3.1.0latest2026/05/066 个月前
3.0.02026/03/137 个月前
2.0.02025/12/0411 个月前
1.6.02025/06/171.4 年前
1.5.02025/03/081.7 年前
1.4.02024/07/172 年前

关于 @apple/app-store-server-library 的常见问题

@apple/app-store-server-library 是什么?

App Store 服务器库

如何安装 @apple/app-store-server-library?

在项目目录运行 npm install @apple/app-store-server-library,或使用 pnpm add / yarn add / bun add。

@apple/app-store-server-library 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@apple/app-store-server-library 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@apple/app-store-server-library 可以商用吗?

@apple/app-store-server-library 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@apple/app-store-server-library 的下载量有多少?

根据 npm 官方下载统计,@apple/app-store-server-library 在 2026/10/07 – 2026/11/05 这 30 天内被下载 4,331,039 次,日均约 144,368 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@apple/app-store-server-library 还在维护吗?

最新版本 3.1.0 发布于 2026/05/06(6 个月前);至今共发布 14 个版本,其中过去 12 个月发布了 3 个;首次发布于 2023/06/08。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。