3
에 대한 영수증 검증
내가 필사적 스위프트로 작성된 FUTUR IOS 응용 프로그램에서 인 - 앱의 영수증을 확인하기 위해 노력하고있어, IOS8.1IOS 8, 스위프트, IAP
내가 보상하기 위해 Alamofire 프레임 워크를 사용하고 있습니다 NSURLConnection의 버그로 신속하게 대응할 수는 있지만 여전히 Apple 서버에서 돌아 오지는 않습니다.
func checkReceipt(data:NSData) {
let ITMS_PROD_VERIFY_RECEIPT_URL = "https://buy.itunes.apple.com/verifyReceipt"
let ITMS_SANDBOX_VERIFY_RECEIPT_URL = "https://sandbox.itunes.apple.com/verifyReceipt"
let base64String = self.base64forData(data)
if base64String != nil {
let decodedData = NSData(base64EncodedString: base64String!, options: NSDataBase64DecodingOptions(0))
let receiptInformation = self.dictionaryFromPlistData(decodedData!)
let payload:NSString = "{\"receipt-data\" : \"\(base64String)\"}"
println("-----------------------------------------")
println("payload \(payload)")
println("-----------------------------------------")
let payloadData:NSData = payload.dataUsingEncoding(NSUTF8StringEncoding)!
let serverURL = NSURL(string: ITMS_SANDBOX_VERIFY_RECEIPT_URL) //ITMS_PROD_VERIFY_RECEIPT_URL;
var request = NSMutableURLRequest(URL: serverURL!) // (URL:
request.HTTPMethod = "POST"
request.HTTPBody = payloadData
let (param, _) = Alamofire.ParameterEncoding.URL.encode(request, parameters: nil)
Alamofire.request(param)
.response { (request, response, data, error) in
println(request)
println(response)
println(error)
}
}
}
서버로부터의 피드백은 다음과 같습니다 대신 신청 접수
Optional(<NSHTTPURLResponse: 0x17403b760> { URL: https://sandbox.itunes.apple.com/verifyReceipt } { status code: 200, headers {
"Cache-Control" = "private, no-cache, no-store, no-transform, must-revalidate, max-age=0";
Connection = "keep-alive";
"Content-Encoding" = gzip;
"Content-Length" = 36;
Date = "Tue, 11 Nov 2014 19:20:38 GMT";
Expires = "Tue, 11 Nov 2014 19:20:38 GMT";
"Set-Cookie" = "Pod=100; version=\"1\"; expires=Thu, 11-Dec-2014 19:20:38 GMT; path=/; domain=.apple.com, itspod=100; version=\"1\"; expires=Thu, 11-Dec-2014 19:20:38 GMT; path=/; domain=.apple.com, mzf_in=990212; version=\"1\"; path=/WebObjects; domain=.apple.com; secure; HttpOnly, mzf_dr=0; version=\"1\"; expires=Thu, 01-Jan-1970 00:00:00 GMT; path=/WebObjects; domain=.apple.com";
"apple-timing-app" = "193 ms";
"edge-control" = "no-store, cache-maxage=0";
itspod = 100;
pod = 100;
"x-apple-application-instance" = nnnnnnnn;
"x-apple-application-site" = SB;
"x-apple-jingle-correlation-key" = xxxxxxxxx;
"x-apple-lokamai-no-cache" = true;
"x-apple-orig-url" = "http://sandbox.itunes.apple.com/WebObjects/MZFinance.woa/wa/verifyReceipt";
"x-apple-translated-wo-url" = "/WebObjects/MZFinance.woa/wa/verifyReceipt";
"x-frame-options" = SAMEORIGIN;
"x-webobjects-loadaverage" = 0;
} })
...
이 어떤 도움이
있는 NSURLConnection에서 어떤 버그? –
답변으로 게시하지 않지만 Apple은 기기와 앱 스토어 서버간에 직접 영수증을 원격으로 확인하지 않을 것을 강력히 권유합니다. "앱 스토어에서 유효성을 검사하려면 앱과 서버 사이에 보안 연결이 필요하고 앱 스토어에서 영수증을 확인하기 위해 서버에 코드를 작성해야합니다." 대신 여기에 장치 유효성 검사에 대한 정말 좋은 기사를보십시오 : http://www.objc.io/issues/17-security/receipt-validation/ – Shirkrin