如何在服务器上验证iOS In-App Purchase

iq3niunx  于 2023-06-25  发布在  iOS
关注(0)|答案(7)|浏览(223)

我正在开发我的第一个应用内购买应用程序。我想知道是否有一种方法来验证购买您的服务器。
我必须建立整个用户管理,我想知道所有注册用户他们已经在iOS设备上购买了什么,以便他们免费获得Web应用程序,或类似的东西。那么,有没有办法让我检查苹果商店方面,如果这个用户已经购买了一些产品?
编辑:
场景是这样的:
用户A在移动终端上购买app B。在此之后,我想检查我的服务器(在我的网页上,...)是否用户A购买了应用程序B,或者(类似的)用户A购买了哪个应用程序。
我不想从移动终端向我的服务器发送用户A购买应用程序B的消息,因为即使用户没有购买应用程序B,他们也可以在服务器上重现此调用。
如果用户A购买了应用B,我会在whit应用商店的服务器端查看。

pdtvr36n

pdtvr36n1#

获取应用程序的收据(从[[NSBundle mainBundle] appStoreReceiptURL]的文件中)并将其发送到您的服务器。那要么...

  • 解析收据并根据Apple证书as described here检查其签名(在您的服务器上,而不是应用程序中)。或者
  • 将收据(再次从服务器发送)发送到应用商店进行验证as described here
lc8prwob

lc8prwob2#

我刚刚发布了一个简单的Python/Django web应用程序(In-App Purchase Receipt Verifier),它可以自动处理这个过程中令人烦恼的部分(即,在保持加密完整性的同时验证服务器上的收据)。代码本身相对简单,但我想其他人会喜欢不必在这里做这些繁琐的工作。
要使用它,只需确保您准备好了应用程序特定的共享密钥,然后转到here并单击“部署到Heroku”。您的应用程序将在一分钟内启动并运行。
我还提供了一些示例代码,说明如何使用这个Web应用程序来验证应用程序中的收据。使用Swift 4:

guard let receiptURL = Bundle.main.appStoreReceiptURL,
    let data = try? Data(contentsOf: receiptURL) else {
      return
}

let encodedData = data.base64EncodedData(options: [])
let url = URL(string: "https://your-app.herokuapp.com/verify")!

var request = URLRequest(url: url)
request.httpBody = encodedData
request.httpMethod = "POST"

let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
    guard let data = data,
        let object = try? JSONSerialization.jsonObject(with: data, options: []),
        let json = object as? [String: Any] else {
            return
    }

    // Your application logic here.
}
task.resume()

注意:在StackOverflow上还有其他的解决方案,建议完全在应用程序本身内进行验证,但我强烈建议不要这样做。来自Apple在《接收验证编程指南》中的文档:
使用受信任的服务器与App Store通信。使用自己的服务器可以让您将应用设计为仅识别和信任您的服务器,并确保您的服务器与App Store服务器连接。不可能直接在用户设备和App Store之间建立可信连接,因为您无法控制该连接的任何一端。
可能会做出进一步的改进,在响应头中添加某种加密签名,以便您的应用可以检查响应是否安全,但我可能会在未来的版本中添加。Done:)

kuhbmx9i

kuhbmx9i3#

verifyReceipthttps://buy.itunes.apple.com/verifyReceipt API的最新信息已弃用截至Mon,5 Jun 2023 23:59:59 GMT,根据verifyReceipt的响应头Deprecation**。
verifyReceipt终结点已弃用。要在服务器上验证收据,请按照在服务器上的设备上验证收据中的步骤操作。若要在您的服务器上验证应用内购买而不使用收据,请调用App Store Server API以获取Apple为您的客户签名的交易和订阅信息,或验证您的应用获取的AppTransaction和Transaction签名数据。您还可以从App Store Server Notifications V2端点获取相同的已签名事务和订阅信息。
verifyReceipt终结点已弃用。HTTP头包括弃用日期,根据RFC 8594。
更多关于服务器端ios回执验证的细节

jdg4fx2g

jdg4fx2g5#

为此,您可以使用以下内容:1.在服务器上输入用户沿着购买状态。2.您也可以使用苹果提供的支付收据使用商店工具包。
此外,如果您使用的是非消耗品,那么您只需要一个恢复按钮。请浏览一下苹果的文档。https://developer.apple.com/in-app-purchase/

iugsix8n

iugsix8n6#

你得打个电话

POST : https://sandbox.itunes.apple.com/verifyReceipt

在post中,你需要发送一个JSON和收据,类似这样

{"receipt-data":"the receipt data you get from the in app purchase"}

然后你会收到苹果服务器的回复。请记住,当您在进行测试时,您需要切换到生产环境
Apple in app purchase verication

c0vxltue

c0vxltue7#

https://developer.apple.com/documentation/appstorereceipts/verifyreceipt
在此页面上,您可以找到有关IOS收据验证的详细信息。这很容易。您应该只发送带有有效负载的HTTP请求。

相关问题