appstore-server-api使用

StoreKit,appstore-server

Posted by Karim on May 15, 2024

前言

前段时间有用户要求我退款,实际上退款只能由用户发起退款,苹果审核通过就可以了,开发者并没有权限处理退款。
但是用户把订单号发我了,我也很好奇开发者能否查到相关的订单信息,因此我去折腾了一下,先说一下结论:

如果是用户是购买App产生的订单号,苹果并没有提供对应的能力给开发者查询。
如果是用户是在App内购产生的订单号,那么可以通过AppStore-Server-API查询相关的信息。

正文

首先用户会向我们提供orderId,如下:
但是我们会发现,苹果的API大多数都是需要通过transactionId,而不是orderId,幸好苹果提供了API给我们可以通过orderId去查transactionId

苹果的接口文档写的很复杂,建议是通过他们已经封装好的框架进行调用,目前已经有Swift、Java、Python、Node。在这里可以获取到对应语言的框架。

我这里也写了一个简单的demo调用可以参考

func fromUser() async {

    let issuerId = "xxx-xxx-xxx-xxx-xxx"
    let keyId = "xxx"
    let bundleId = "com.karim.xxx"

    let encodedKey = try! String(contentsOfFile: "/appstore-server/appstore-server/XXXX.p8")
    let environment = Environment.production
    let client = try! AppStoreServerAPIClient(signingKey: encodedKey, keyId: keyId, issuerId: issuerId, bundleId: bundleId, environment: environment)

    let response = await client.lookUpOrderId(orderId: "XXXXXX")
    switch response {
    case .success(let response):
        print(response)
    case .failure(let errorCode, let rawApiError, let apiError, let errorMessage, let causedBy):
        print(errorCode)
        print(rawApiError)
        print(apiError)
        print(errorMessage)
        print(causedBy)
    }
}

await fromUser()

上面代码中的issuerId、keyId、p8密钥,需要在appstoreconnect中自己生成,bundleId填入对应app的bundleId即可。


请保持转载后文章内容的完整,以及文章出处。本人保留所有版权相关权利。

分享到: