如何验证服务器上的ios In-App Purchase

时间:2014-01-09 07:04:23

标签: ios app-store in-app-purchase

我打算构建我的第一个应用内购买应用。我想知道是否有办法在您的服务器上验证购买。

我必须构建整个用户管理,并且我想知道所有注册用户他们已经在他们的iOS设备上购买了什么,以便他们免费获得Web应用程序,或类似的东西。那么,如果这个用户已经购买了一些产品,我有办法检查Apple商店吗?

编辑:

情景是这样的:

用户A在移动设备上购买应用程序B.在此之后,我想检查我的服务器(在我的网页上,...),如果用户A被购买应用程序B,或(类似)用户A购买了哪个应用程序。

我不想从移动设备向用户A购买应用B的服务器发送消息,因为即使他们没有购买应用B,用户也可以在服务器上重现此呼叫。

如果用户A购买了应用程序B,我会检查服务器端的惠特应用商店。

6 个答案:

答案 0 :(得分:23)

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

  • 解析收据,并根据Apple的证书as described here检查其签名(在您的服务器上,而不是在应用中)。或者,

  • 将收据(再次从您的服务器发送)到应用商店进行验证as described here

答案 1 :(得分:3)

我刚刚发布了一个简单的Python / Django Web应用程序(In-App Purchase Receipt Verifier),它可以自动处理此过程中令人讨厌的部分(即,在保持加密完整性的同时验证服务器上的收据)。代码本身相对简单,但我认为其他人会欣赏不必在这里做咕噜咕噜的工作。

要使用它,只需确保准备好特定于应用程序的共享密钥,然后转到here并单击“部署到Heroku”。您的应用将在一分钟内启动并运行。

我还提供了一些示例代码,说明如何使用此网络应用验证您应用内的收据。使用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 Receipt Validation Programming Guide中的文档:

  

使用受信任的服务器与App Store进行通信。使用您自己的服务器,您可以将应用程序设计为仅识别和信任您的服务器,并确保您的服务器与App Store服务器连接。由于您不控制该连接的任何一端,因此无法在用户的设备和App Store之间直接建立可信连接。

可能会在响应标头中添加某种加密签名,以便您的应用可以检查响应是否安全,但我可能会在将来的版本中添加它。 >完成:))

答案 2 :(得分:1)

答案 3 :(得分:0)

为此您可以使用以下内容: 1.在服务器上输入用户的条目以及购买状态。 2.您还可以使用商店套件使用Apple提供的付款收件人。

此外,如果您使用的是非消耗品,那么您只需要一个恢复按钮即可。请仔细阅读苹果的文件。 https://developer.apple.com/in-app-purchase/

答案 4 :(得分:0)

https://developer.apple.com/documentation/appstorereceipts/verifyreceipt

在此页面上,您可以找到有关IOS收据验证的详细信息。这很容易。您应该只发送带有有效负载的http请求。

答案 5 :(得分:0)

您需要致电

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

在帖子中,您需要发送带有收据的json,类似这样

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

,然后您从苹果服务器收到响应。 记住,当您要进行测试时,需要切换到生产状态

Apple in app purchase verication