アプリ内課金ローカル認証(デバッグ用)

サーバー側で検証に使うレシートの内容をアプリ内で確認したい場合のコード

func receiptValidation() {
        let receiptUrl = Bundle.main.appStoreReceiptURL
        let receiptData = try! Data(contentsOf: receiptUrl!)

        let requestContents = [
            "receipt-data": receiptData.base64EncodedString(options: .endLineWithCarriageReturn),
            "password": "共有シークレット"
        ]

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

        var request = URLRequest(url: URL(string: "https://sandbox.itunes.apple.com/verifyReceipt")!)
        request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField:"content-type")
        request.timeoutInterval = 5.0
        request.httpMethod = "POST"
        request.httpBody = requestData

        let session = URLSession.shared
        let task = session.dataTask(with: request, completionHandler: {(data, response, error) -> Void in

            guard let jsonData = data else {
                return
            }
            do {
                let json:Dictionary<String, AnyObject> = try JSONSerialization.jsonObject(with: jsonData, options: .init(rawValue: 0)) as! Dictionary<String, AnyObject>

                guard let receipts:Dictionary<String, AnyObject> = json["receipt"] as? Dictionary<String, AnyObject> else {
                    return
                }
                print(receipts)

            } catch let error {
                print("SKPaymentManager : Failure to validate receipt: \(error)")
            }
        })
        task.resume()
    }