Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 验证App Store上应用内购买的收据_Ios_Swift_In App Purchase - Fatal编程技术网

Ios 验证App Store上应用内购买的收据

Ios 验证App Store上应用内购买的收据,ios,swift,in-app-purchase,Ios,Swift,In App Purchase,我使用下面的函数来验证收据。如您所见,我使用了沙盒URL,因为我在将接收提交到商店之前测试了它们。我想了解的是:在提交之前,我应该在storeUrl部分写些什么?我如何访问或找到该URL?根据我的研究,我需要把我的服务器地址或什么的,但我想提交的产品是非消费品,所以我没有任何服务器 func verifyReciept (transaction : SKPaymentTransaction?) { let recieptURL = Bundle.main.appStoreRec

我使用下面的函数来验证收据。如您所见,我使用了沙盒URL,因为我在将接收提交到商店之前测试了它们。我想了解的是:在提交之前,我应该在storeUrl部分写些什么?我如何访问或找到该URL?根据我的研究,我需要把我的服务器地址或什么的,但我想提交的产品是非消费品,所以我没有任何服务器

func verifyReciept (transaction : SKPaymentTransaction?) {

        let recieptURL = Bundle.main.appStoreReceiptURL!
        if let reciept = NSData(contentsOf: recieptURL){
            let requestContents = ["receipt-data" : reciept.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue:0))]

            do {

                let requestData = try JSONSerialization.data(withJSONObject: requestContents, options: JSONSerialization.WritingOptions(rawValue : 0))

                let storeURL = NSURL(string: "https:/sandbox.itunes.apple.com/verifyReceipt")
                let request = NSMutableURLRequest(url: storeURL! as URL)
                request.httpMethod = "Post"
                request.httpBody = requestData

               let session = URLSession.shared
                let task = session.dataTask(with: request as URLRequest, completionHandler: { (responseData: Data?, response : URLResponse?, error : Error?) -> Void in

                do {
                let json = try JSONSerialization.jsonObject(with: responseData!, options: .mutableLeaves) as! NSDictionary
                    print(json)

                    if(json.object(forKey: "status") as! NSNumber) == 0 {

                        let receipt_dict = json["receipt"] as! NSDictionary
                        if let purchases = receipt_dict["in_app"] as? NSArray {
                            self.validatePurchaseArray(purchases: purchases)
                        }
                        if transaction != nil {
                            SKPaymentQueue.default().finishTransaction(transaction!)
                        }
                    }

                    else {
                    print(json.object(forKey: "status") as! NSNumber)

                    }

                }

                catch{
                    print(error)

                    }
               })

                task.resume()

            } catch {

                print(error)
            }
        }
        else {

            print("No Reciept")
        }

    }

您应将其替换为用于验证收据的产品URL:

"https://buy.itunes.apple.com/verifyReceipt"

您所谈论的涉及服务器的事情是您可以采取的另一项措施。对于服务器端验证,您需要将收据发送到服务器,然后从服务器运行相同的功能

您应该将其替换为用于验证收据的产品URL:

"https://buy.itunes.apple.com/verifyReceipt"

您所谈论的涉及服务器的事情是您可以采取的另一项措施。对于服务器端验证,您需要将收据发送到服务器,然后从服务器运行相同的功能

谢谢我研究并同意你的解决方案。谢谢我研究并同意你的解决方案。