readdle/app-store-server-api

一个纯PHP库,允许使用App Store Server API管理客户交易,并使用App Store Server Notifications V2处理服务器之间的通知

3.8.1 2024-07-08 11:52 UTC

README

这是一个 无依赖项*纯PHP 库,允许使用App Store Server API来管理客户交易,并通过提供实现App Store Server Notifications V2端点所需的一切来处理服务器之间的通知。

* 无依赖项表示此库不依赖于任何第三方库。同时,此库依赖于如jsonopenssl等基本PHP扩展

注意

如果您需要处理发票而不是(或与)API一起,请查看此库

安装

这里没有特殊之处,只需使用composer安装包即可

composer install readdle/app-store-server-api

用法

App Store Server API

API初始化

try {
    $api = new \Readdle\AppStoreServerAPI\AppStoreServerAPI(
        \Readdle\AppStoreServerAPI\Environment::PRODUCTION,
        '1a2b3c4d-1234-4321-1111-1a2b3c4d5e6f',
        'com.readdle.MyBundle',
        'ABC1234DEF',
        "-----BEGIN PRIVATE KEY-----\n<base64-encoded private key goes here>\n-----END PRIVATE KEY-----"
    );
} catch (\Readdle\AppStoreServerAPI\Exception\WrongEnvironmentException $e) {
    exit($e->getMessage());
}

执行API调用

try {
    $transactionHistory = $api->getTransactionHistory($transactionId, ['sort' => GetTransactionHistoryQueryParams::SORT__DESCENDING]);
    $transactions = $transactionHistory->getTransactions();
} catch (\Readdle\AppStoreServerAPI\Exception\AppStoreServerAPIException $e) {
    exit($e->getMessage());
}

App Store Server Notifications

try {
    $responseBodyV2 = \Readdle\AppStoreServerAPI\ResponseBodyV2::createFromRawNotification(
        '{"signedPayload":"..."}',
        \Readdle\AppStoreServerAPI\Util\Helper::toPEM(file_get_contents('https://www.apple.com/certificateauthority/AppleRootCA-G3.cer'))
    );
} catch (\Readdle\AppStoreServerAPI\Exception\AppStoreServerNotificationException $e) {
    exit('Server notification could not be processed: ' . $e->getMessage());
}

示例

examples/目录中可以找到所有实现端点的示例。API客户端的初始化被分开到client.php,并在所有示例中使用。

为了运行示例,您必须在examples/目录中创建credentials.json和/或notifications.json

credentials.json结构应如下所示

{
  "env": "Production",
  "issuerId": "1a2b3c4d-1234-4321-1111-1a2b3c4d5e6f",
  "bundleId": "com.readdle.MyBundle",
  "keyId": "ABC1234DEF",
  "key": "-----BEGIN PRIVATE KEY-----\n<base64-encoded private key goes here>\n-----END PRIVATE KEY-----",
  "orderId": "ABC1234DEF",
  "transactionId": "123456789012345"
}

在大多数示例中使用了transactionId。请注意,transactionId环境相关联,因此如果您放入沙盒中的transactionId,则环境属性也应为沙盒,否则您将收到{"errorCode":4040010,"errorMessage":"Transaction id not found."}错误。

对于订单 ID 查找,您必须指定orderId。此端点(以及相应的示例)在沙盒环境中不可用。

notification.json结构与您在服务器到服务器通知端点收到的结构相同

{"signedPayload":"<JWT token goes here>"}

涵盖内容

应用内购买历史

获取交易历史

AppStoreServerAPI::getTransactionHistory(string $transactionId, array $queryParams)

获取您的应用程序的客户应用内购买交易历史。

交易信息

获取交易信息

AppStoreServerAPI::getTransactionInfo(string $transactionId)

获取有关您的应用程序单个交易的信息。

订阅状态

获取所有订阅状态

AppStoreServerAPI::getAllSubscriptionStatuses(string $transactionId, array $queryParams = [])

获取您的应用程序中所有客户的自动续订订阅的状态。

消费信息

发送消费信息

AppStoreServerAPI::sendConsumptionInformation(string $transactionId, array $requestBody)

在您的服务器收到消费请求通知后,将应用内购买的消费信息发送到App Store。

订单 ID 查找

查找订单 ID

AppStoreServerAPI::lookUpOrderId(string $orderId)

使用订单 ID 从收据获取客户的内购。

退款查找

获取退款历史

AppStoreServerAPI::getRefundHistory(string $transactionId)

获取您应用程序中所有客户的退款内购列表。

订阅续订日期扩展

扩展订阅续订日期

AppStoreServerAPI::extendSubscriptionRenewalDate(string $originalTransactionId, array $requestBody)

使用原始交易标识符扩展客户的活跃订阅的续订日期。

为所有活跃订阅者扩展订阅续订日期

AppStoreServerAPI::massExtendSubscriptionRenewalDate(array $requestBody)

使用订阅的产品标识符为所有符合条件的活跃订阅者扩展续订日期。

获取订阅续订日期扩展的状态

AppStoreServerAPI::getStatusOfSubscriptionRenewalDateExtensionsRequest(string $productId, string $requestIdentifier)

检查续订日期扩展请求是否完成,并提供成功或失败的扩展最终计数。

App Store服务器通知历史记录

获取通知历史

AppStoreServerAPI::getNotificationHistory(array $requestBody)

获取App Store服务器尝试发送到您的服务器上的通知列表。

App Store服务器通知测试

请求测试通知

AppStoreServerAPI::requestTestNotification()

要求App Store服务器通知向您的服务器发送测试通知。

获取测试通知状态

AppStoreServerAPI::getTestNotificationStatus(string $testNotificationToken)

检查发送到您的服务器的测试App Store服务器通知的状态。