readdle / app-store-server-api
一个纯PHP库,允许使用App Store Server API管理客户交易,并使用App Store Server Notifications V2处理服务器之间的通知
Requires
- ext-json: *
- ext-openssl: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.23
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.5
README
这是一个 无依赖项*纯PHP 库,允许使用App Store Server API
来管理客户交易,并通过提供实现App Store Server Notifications V2
端点所需的一切来处理服务器之间的通知。
* 无依赖项表示此库不依赖于任何第三方库。同时,此库依赖于如json
和openssl
等基本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服务器通知的状态。