Development/iPhone

IAP Receipt validation function

Lonepine 2018. 8. 7. 10:08

func checkReceiptInfo(completion: @escaping (Bool) -> Void) -> Void

    {

        let receiptURL = Bundle.main.appStoreReceiptURL

        let receipt = NSData(contentsOf: receiptURL!)

        let requestContents: [String: Any] = [

            "receipt-data": receipt!.base64EncodedString(options: [])

        ]

        

        let appleServer = receiptURL?.lastPathComponent == "sandboxReceipt" ? "sandbox" : "buy"

        

        let stringURL = "https://\(appleServer).itunes.apple.com/verifyReceipt"

        

        print("Loading user receipt: \(stringURL)...")

        

        Alamofire.request(stringURL, method: .post, parameters: requestContents, encoding: JSONEncoding.default)

            .responseJSON { response in

                if let value = response.result.value as? NSDictionary {

                    print(value)

                    let status = value.object(forKey: "status") as? Int ?? -1

                    print("status ==== >> \(status)")

                    if let receiptDic = value.object(forKey: "receipt") as? NSDictionary{

                        let inApp = receiptDic.object(forKey: "in_app") as? NSArray ?? NSArray()

                        print("in_app ---> \(inApp.count)")

                        if inApp.count > 0

                        {

                            completion(true)

                        }

                        else

                        {

                            completion(false)

                        }

                        return

                    }

                    

                    completion(false)

                } else {

                    print("Receiving receipt from App Store failed: \(response.result)")

                    

                    completion(false)

                }

        }

        

        

        

    }