IOS苹果购买PHP服务器端验证(订阅购买和一次性购买通用)
// 正式环境验证地址
$ios_verify_url = 'https://buy.itunes.apple.com/verifyReceipt';
// 测试环境验证地址
$ios_sandbox_verify_url = 'https://sandbox.itunes.apple.com/verifyReceipt'; $defaults = array(
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_URL => $ios_sandbox_verify_url,
CURLOPT_FRESH_CONNECT => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FORBID_REUSE => 1,
CURLOPT_TIMEOUT => 60,
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_POSTFIELDS => $receipt // 苹果购买后返回的票据信息
); $ch = curl_init();
curl_setopt_array($ch, $defaults);
$result = curl_exec($ch);
$errno = curl_errno($ch);
$errmsg = curl_error($ch);
curl_close($ch); // 判断时候出错,抛出异常
if ($errno != 0) {
throw new Exception($errmsg, $errno);
} $object = json_decode($result);
// 判断返回的数据是否是对象
if (!is_object($object) || !isset($object->status)) {
throw new Exception('Invalid response data');
} if($object->status === 0) {
// 认证成功
$return = array(
'status' => 1,
'receipt' => null,
'expires_date_ms' => null,
'remote_server_code' => $object->status
); if (isset($object->latest_receipt) && !empty($object->latest_receipt)) {
// 如果是订阅购买,需要将票据保存到数据库中
// 如果苹果返回了这个值,那么需要同步将这个值更新到数据库中
} if (isset($object->latest_receipt_info) && !empty($object->latest_receipt_info)) {
// 获取过期时间
$last_receipt_info = end($object->latest_receipt_info);
$expires_date_ms = $last_receipt_info->expires_date_ms / 1000;
} // 其他操作
} else {
return array(
'status' => 0,
'receipt' => null,
'expires_date_ms' => null,
'remote_server_code' => $object->status
);
}
或者
$receipt = 'MIIigAYJKoZIhvcNAQcCoIIicTCCIm0CAQExCzAJBgUrDgMCGgUAMIISMQYJKoZIhvcNAQcBoIISIgSCEh4xghIaMAoCARQCAQEEAgwAMAsCAQ4CAQEEAwIBWTALAgEZAgEBBAMCAQMwDQIBAwIBAQQFDAMxLjAwDQIBCgIBAQQFFgMxMiswDQIBCwIBAQQFAgMtHgEwDQIBDQIBAQQFAgMBEdYwDQIBEwIBAQQFDAMxLjAwDgIBAQIBAQQGAgQzjjr4MA4CAQkCAQEEBgIEUDIzNDAOAgEQAgEBBAYCBCE1CIEwEAIBDwIBAQQIAgY2lI1x8OkwFAIBAAIBAQQMDApQcm9kdWN0aW9uMBgCAQQCAQIEEPla7h1dVDLc5NsqH6vpEBYwHAIBBQIBAQQU8JPlM/fnlNvAigtcnDCXECnvVUYwHgIBCAIBAQQWFhQyMDE0LTA5LTIwVDE2OjExOjIwWjAeAgEMAgEBBBYWFDIwMTUtMDctMjJUMDc6MzM6MzVaMB4CARICAQEEFhYUMjAxNC0wOS0xOVQwODoxMTowNFowKAIBAgIBAQQgDB5jb20uaGlnaC1zcGVlZC1ib3l6LmZvdW5kYXRpb24wSgIBBwIBAQRCYL0Sped+FclUJ6Zm0e1KH86nyNBBZ9/cWCm5v9Bj5U+FtZI4eY80jNkxJxIoYHF/SIQs/KtrIvbxdri7Qu6wO8ZgMFsCAQYCAQEEU27vfgnMZ8vMOlr+6VgOyPAPxYHI9RgV6j3ki06MfvqgxaMdDm3EsSV/LF8HM7ndH6fEpWANQk6MYs3KzgtbriWWjraIzrC5aqjZHOxR8LAQfPgJMIIBbgIBEQIBAQSCAWQxggFgMAsCAgatAgEBBAIMADALAgIGsAIBAQQCFgAwCwICBrICAQEEAgwAMAsCAgazAgEBBAIMADALAgIGtAIBAQQCDAAwCwICBrUCAQEEAgwAMAsCAga2AgEBBAIMADAMAgIGpQIBAQQDAgEBMAwCAgarAgEBBAMCAQMwDAICBrECAQEEAwIBADAPAgIGrgIBAQQGAgQ1kMQAMBICAgavAgEBBAkCBwC15iGhb4YwGQICBqYCAQEEEAwOSGlnaFNwZWVkQm95ejEwGgICBqcCAQEEEQwPMjAwMDAwMTUwNjI0Nzc5MBoCAgapAgEBBBEMDzIwMDAwMDE0NTIxMTY0ODAfAgIGqAIBAQQWFhQyMDE0LTEwLTIwVDE2OjExOjE5WjAfAgIGqgIBAQQWFhQyMDE0LTEwLTIwVDEwOjExOjQyWjAfAgIGrAIBAQQWFhQyMDE0LTExLTIwVDE3OjExOjE5WjCCAW4CARECAQEEggFkMYIBYDALAgIGrQIBAQQCDAAwCwICBrACAQEEAhYAMAsCAgayAgEBBAIMADALAgIGswIBAQQCDAAwCwICBrQCAQEEAgwAMAsCAga1AgEBBAIMADALAgIGtgIBAQQCDAAwDAICBqUCAQEEAwIBATAMAgIGqwIBAQQDAgEDMAwCAgaxAgEBBAMCAQAwDwICBq4CAQEEBgIENZDEADASAgIGrwIBAQQJAgcAteYhoW+HMBkCAgamAgEBBBAMDkhpZ2hTcGVlZEJveXoxMBoCAganAgEBBBEMDzIwMDAwMDE0NTIxMTY0ODAaAgIGqQIBAQQRDA8yMDAwMDAxNDUyMTE2NDgwHwICBqgCAQEEFhYUMjAxNC0wOS0yMFQxNjoxMToxOVowHwICBqoCAQEEFhYUMjAxNC0wOS0yMFQxNjoxMToxOVowHwICBqwCAQEEFhYUMjAxNC0xMC0yMFQxNjoxMToxOVowggFuAgERAgEBBIIBZDGCAWAwCwICBq0CAQEEAgwAMAsCAgawAgEBBAIWADALAgIGsgIBAQQCDAAwCwICBrMCAQEEAgwAMAsCAga0AgEBBAIMADALAgIGtQIBAQQCDAAwCwICBrYCAQEEAgwAMAwCAgalAgEBBAMCAQEwDAICBqsCAQEEAwIBAzAMAgIGsQIBAQQDAgEAMA8CAgauAgEBBAYCBDWQxAAwEgICBq8CAQEECQIHALXmIazveDAZAgIGpgIBAQQQDA5IaWdoU3BlZWRCb3l6MTAaAgIGpwIBAQQRDA8yMDAwMDAxNTYwNTAwOTAwGgICBqkCAQEEEQwPMjAwMDAwMTQ1MjExNjQ4MB8CAgaoAgEBBBYWFDIwMTQtMTEtMjBUMTc6MTE6MTlaMB8CAgaqAgEBBBYWFDIwMTQtMTEtMjBUMTE6MTE6MjlaMB8CAgasAgEBBBYWFDIwMTQtMTItMjBUMTc6MTE6MTlaMIIBbgIBEQIBAQSCAWQxggFgMAsCAgatAgEBBAIMADALAgIGsAIBAQQCFgAwCwICBrICAQEEAgwAMAsCAgazAgEBBAIMADALAgIGtAIBAQQCDAAwCwICBrUCAQEEAgwAMAsCAga2AgEBBAIMADAMAgIGpQIBAQQDAgEBMAwCAgarAgEBBAMCAQMwDAICBrECAQEEAwIBADAPAgIGrgIBAQQGAgQ1kMQAMBICAgavAgEBBAkCBwC15iG4ROswGQICBqYCAQEEEAwOSGlnaFNwZWVkQm95ejEwGgICBqcCAQEEEQwPMjAwMDAwMTYxNDA1ODMxMBoCAgapAgEBBBEMDzIwMDAwMDE0NTIxMTY0ODAfAgIGqAIBAQQWFhQyMDE0LTEyLTIwVDE3OjExOjE5WjAfAgIGqgIBAQQWFhQyMDE0LTEyLTIwVDExOjEyOjE1WjAfAgIGrAIBAQQWFhQyMDE1LTAxLTIwVDE3OjExOjE5WjCCAW4CARECAQEEggFkMYIBYDALAgIGrQIBAQQCDAAwCwICBrACAQEEAhYAMAsCAgayAgEBBAIMADALAgIGswIBAQQCDAAwCwICBrQCAQEEAgwAMAsCAga1AgEBBAIMADALAgIGtgIBAQQCDAAwDAICBqUCAQEEAwIBATAMAgIGqwIBAQQDAgEDMAwCAgaxAgEBBAMCAQAwDwICBq4CAQEEBgIENZDEADASAgIGrwIBAQQJAgcAteYhxDoMMBkCAgamAgEBBBAMDkhpZ2hTcGVlZEJveXoxMBoCAganAgEBBBEMDzIwMDAwMDE2NzQyMzY0NjAaAgIGqQIBAQQRDA8yMDAwMDAxNDUyMTE2NDgwHwICBqgCAQEEFhYUMjAxNS0wMS0yMFQxNzoxMToxOVowHwICBqoCAQEEFhYUMjAxNS0wMS0yMFQxMToxMTozOFowHwICBqwCAQEEFhYUMjAxNS0wMi0yMFQxNzoxMToxOVowggFuAgERAgEBBIIBZDGCAWAwCwICBq0CAQEEAgwAMAsCAgawAgEBBAIWADALAgIGsgIBAQQCDAAwCwICBrMCAQEEAgwAMAsCAga0AgEBBAIMADALAgIGtQIBAQQCDAAwCwICBrYCAQEEAgwAMAwCAgalAgEBBAMCAQEwDAICBqsCAQEEAwIBAzAMAgIGsQIBAQQDAgEAMA8CAgauAgEBBAYCBDWQxAAwEgICBq8CAQEECQIHALXmIdG9wDAZAgIGpgIBAQQQDA5IaWdoU3BlZWRCb3l6MTAaAgIGpwIBAQQRDA8yMDAwMDAxNzI4MjE1ODQwGgICBqkCAQEEEQwPMjAwMDAwMTQ1MjExNjQ4MB8CAgaoAgEBBBYWFDIwMTUtMDItMjBUMTc6MTE6MTlaMB8CAgaqAgEBBBYWFDIwMTUtMDItMjBUMTE6MTE6MjJaMB8CAgasAgEBBBYWFDIwMTUtMDMtMjBUMTY6MTE6MTlaMIIBbgIBEQIBAQSCAWQxggFgMAsCAgatAgEBBAIMADALAgIGsAIBAQQCFgAwCwICBrICAQEEAgwAMAsCAgazAgEBBAIMADALAgIGtAIBAQQCDAAwCwICBrUCAQEEAgwAMAsCAga2AgEBBAIMADAMAgIGpQIBAQQDAgEBMAwCAgarAgEBBAMCAQMwDAICBrECAQEEAwIBADAPAgIGrgIBAQQGAgQ1kMQAMBICAgavAgEBBAkCBwC15iHfFq4wGQICBqYCAQEEEAwOSGlnaFNwZWVkQm95ejEwGgICBqcCAQEEEQwPMjAwMDAwMTc3NzYyMjI0MBoCAgapAgEBBBEMDzIwMDAwMDE0NTIxMTY0ODAfAgIGqAIBAQQWFhQyMDE1LTAzLTIwVDE2OjExOjE5WjAfAgIGqgIBAQQWFhQyMDE1LTAzLTIwVDEwOjExOjIzWjAfAgIGrAIBAQQWFhQyMDE1LTA0LTIwVDE2OjExOjE5WjCCAW4CARECAQEEggFkMYIBYDALAgIGrQIBAQQCDAAwCwICBrACAQEEAhYAMAsCAgayAgEBBAIMADALAgIGswIBAQQCDAAwCwICBrQCAQEEAgwAMAsCAga1AgEBBAIMADALAgIGtgIBAQQCDAAwDAICBqUCAQEEAwIBATAMAgIGqwIBAQQDAgEDMAwCAgaxAgEBBAMCAQAwDwICBq4CAQEEBgIENZDEADASAgIGrwIBAQQJAgcAteYh7LQhMBkCAgamAgEBBBAMDkhpZ2hTcGVlZEJveXoxMBoCAganAgEBBBEMDzIwMDAwMDE4MzMzNTgzNzAaAgIGqQIBAQQRDA8yMDAwMDAxNDUyMTE2NDgwHwICBqgCAQEEFhYUMjAxNS0wNC0yMFQxNjoxMToxOVowHwICBqoCAQEEFhYUMjAxNS0wNC0yMFQxMDoxMToyM1owHwICBqwCAQEEFhYUMjAxNS0wNS0yMFQxNjoxMToxOVowggFuAgERAgEBBIIBZDGCAWAwCwICBq0CAQEEAgwAMAsCAgawAgEBBAIWADALAgIGsgIBAQQCDAAwCwICBrMCAQEEAgwAMAsCAga0AgEBBAIMADALAgIGtQIBAQQCDAAwCwICBrYCAQEEAgwAMAwCAgalAgEBBAMCAQEwDAICBqsCAQEEAwIBAzAMAgIGsQIBAQQDAgEAMA8CAgauAgEBBAYCBDWQxAAwEgICBq8CAQEECQIHALXmIf1NKTAZAgIGpgIBAQQQDA5IaWdoU3BlZWRCb3l6MTAaAgIGpwIBAQQRDA8yMDAwMDAxODg1Njc2MDUwGgICBqkCAQEEEQwPMjAwMDAwMTQ1MjExNjQ4MB8CAgaoAgEBBBYWFDIwMTUtMDUtMjBUMTY6MTE6MTlaMB8CAgaqAgEBBBYWFDIwMTUtMDUtMjBUMTA6MTE6MjRaMB8CAgasAgEBBBYWFDIwMTUtMDYtMjBUMTY6MTE6MTlaMIIBbgIBEQIBAQSCAWQxggFgMAsCAgatAgEBBAIMADALAgIGsAIBAQQCFgAwCwICBrICAQEEAgwAMAsCAgazAgEBBAIMADALAgIGtAIBAQQCDAAwCwICBrUCAQEEAgwAMAsCAga2AgEBBAIMADAMAgIGpQIBAQQDAgEBMAwCAgarAgEBBAMCAQMwDAICBrECAQEEAwIBADAPAgIGrgIBAQQGAgQ1kMQAMBICAgavAgEBBAkCBwC15iIN0OUwGQICBqYCAQEEEAwOSGlnaFNwZWVkQm95ejEwGgICBqcCAQEEEQwPMjAwMDAwMTkzOTMzMjU3MBoCAgapAgEBBBEMDzIwMDAwMDE0NTIxMTY0ODAfAgIGqAIBAQQWFhQyMDE1LTA2LTIwVDE2OjExOjE5WjAfAgIGqgIBAQQWFhQyMDE1LTA2LTIwVDEwOjExOjI4WjAfAgIGrAIBAQQWFhQyMDE1LTA3LTIwVDE2OjExOjE5WjCCAW4CARECAQEEggFkMYIBYDALAgIGrQIBAQQCDAAwCwICBrACAQEEAhYAMAsCAgayAgEBBAIMADALAgIGswIBAQQCDAAwCwICBrQCAQEEAgwAMAsCAga1AgEBBAIMADALAgIGtgIBAQQCDAAwDAICBqUCAQEEAwIBATAMAgIGqwIBAQQDAgEDMAwCAgaxAgEBBAMCAQAwDwICBq4CAQEEBgIENZDEADASAgIGrwIBAQQJAgcAteYiH1suMBkCAgamAgEBBBAMDkhpZ2hTcGVlZEJveXoxMBoCAganAgEBBBEMDzIwMDAwMDE5OTE1NTk5MTAaAgIGqQIBAQQRDA8yMDAwMDAxNDUyMTE2NDgwHwICBqgCAQEEFhYUMjAxNS0wNy0yMFQxNjoxMToxOVowHwICBqoCAQEEFhYUMjAxNS0wNy0yMFQxMDoxMToyNlowHwICBqwCAQEEFhYUMjAxNS0wOC0yMFQxNjoxMToxOVqggg5VMIIFazCCBFOgAwIBAgIIGFlDIXJ0nPwwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAxMTExMjE1ODAxWhcNMTUxMTExMjE1ODAxWjB4MSYwJAYDVQQDDB1NYWMgQXBwIFN0b3JlIFJlY2VpcHQgU2lnbmluZzEsMCoGA1UECwwjQXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMxEzARBgNVBAoMCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtpPCtw8kXu3SNEjohQXjM5RmW+gnN797Q0nr+ckXlzNzMklKyG9oKRS4lKb0ZUs7R9fRLGZLuJjZvPUSUcvmL6n0s58c6Cj8UsCBostWYoBaopGuTkDDfSgu19PtTdmtivvyZ0js63m9Am0EWRj/jDefijfxYv+7ogNQhwrVkuCGEV4jRvXhJWMromqMshC3kSNNmj+DQPJkCVr3ja5WXNT1tG4DGwRdLBuvAJkX16X7SZHO4qERMV4ZAcDazlCDXsjrSTtJGirq4J+/0kZJnNiroYNhbA/B/LOtmXUq/COb7yII63tZFBGfczQt5rk5pjv35j7syqb7q68m34+IgQIDAQABo4IB2DCCAdQwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBSIJxcJqbYYYIvs67r2R1nFUlSjtzBNBgNVHR8ERjBEMEKgQKA+hjxodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9jZXJ0aWZpY2F0aW9uYXV0aG9yaXR5L3d3ZHJjYS5jcmwwDgYDVR0PAQH/BAQDAgeAMB0GA1UdDgQWBBR1diSia2IMlzSh+k5eCAwiv3PvvjCCAREGA1UdIASCAQgwggEEMIIBAAYKKoZIhvdjZAUGATCB8TCBwwYIKwYBBQUHAgIwgbYMgbNSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNhdGlvbiBwcmFjdGljZSBzdGF0ZW1lbnRzLjApBggrBgEFBQcCARYdaHR0cDovL3d3dy5hcHBsZS5jb20vYXBwbGVjYS8wEAYKKoZIhvdjZAYLAQQCBQAwDQYJKoZIhvcNAQEFBQADggEBAKA78Ye8abS3g3wZ9J/EAmTfAsmOMXPLHD7cJgeL/Z7z7b5D1o1hLeTw3BZzAdY0o2kZdxS/uVjHUsmGAH9sbICXqZmF6HjzmhKnfjg4ZPMEy1/y9kH7ByXLAiFx80Q/0OJ7YfdC46u/d2zdLFCcgITFpW9YWXpGMUFouxM1RUKkjPoR1UsW8jI13h+80pldyOYCMlmQ6I3LOd8h2sN2+3o2GhYamEyFG+YrRS0vWRotxprWZpKj0jZSUIAgTTPIsprWU2KxYFLw9fd9EFDkEr+9cb60gMdtxG9bOTXR57fegSAnjjhcgoc6c2DE1vEcoKlmRH7ODCibI3+s7OagO90wggQjMIIDC6ADAgECAgEZMA0GCSqGSIb3DQEBBQUAMGIxCzAJBgNVBAYTAlVTMRMwEQYDVQQKEwpBcHBsZSBJbmMuMSYwJAYDVQQLEx1BcHBsZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEWMBQGA1UEAxMNQXBwbGUgUm9vdCBDQTAeFw0wODAyMTQxODU2MzVaFw0xNjAyMTQxODU2MzVaMIGWMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQXBwbGUgSW5jLjEsMCoGA1UECwwjQXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMxRDBCBgNVBAMMO0FwcGxlIFdvcmxkd2lkZSBEZXZlbG9wZXIgUmVsYXRpb25zIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyjhUpstWqsgkOUjpjO7sX7h/JpG8NFN6znxjgGF3ZF6lByO2Of5QLRVWWHAtfsRuwUqFPi/w3oQaoVfJr3sY/2r6FRJJFQgZrKrbKjLtlmNoUhU9jIrsv2sYleADrAF9lwVnzg6FlTdq7Qm2rmfNUWSfxlzRvFduZzWAdjakh4FuOI/YKxVOeyXYWr9Og8GN0pPVGnG1YJydM05V+RJYDIa4Fg3B5XdFjVBIuist5JSF4ejEncZopbCj/Gd+cLoCWUt3QpE5ufXN4UzvwDtIjKblIV39amq7pxY1YNLmrfNGKcnow4vpecBqYWcVsvD95Wi8Yl9uz5nd7xtj/pJlqwIDAQABo4GuMIGrMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSIJxcJqbYYYIvs67r2R1nFUlSjtzAfBgNVHSMEGDAWgBQr0GlHlHYJ/vRrjS5ApvdHTX8IXjA2BgNVHR8ELzAtMCugKaAnhiVodHRwOi8vd3d3LmFwcGxlLmNvbS9hcHBsZWNhL3Jvb3QuY3JsMBAGCiqGSIb3Y2QGAgEEAgUAMA0GCSqGSIb3DQEBBQUAA4IBAQDaMgCWxVSU0zuCN2Z9LmjVw8a4yyaMSJDPEyRqRo5j1PDQEwbd2MTBNxXyMxM5Ji3OLlVA4wsDr/oSwucNIbjVgM+sKC/OLbNOr4YZBMbpUN1MKUcQI/xsuxuYa0iJ4Vud3kbbNYU17z7Q4lhLOPTtdVofXHAdVjkS5eENEeSJJQa91bQVjl7QWZeQ6UuB4t8Yr0R0HhmgOkfMkR066yNa/qUtl/d7u9aHRkKF61I9JrJjqLSxyo/0zOKzyEfgv5pZg/ramFMqgvV8ZS6V2TNd9e1lzDE3xVoE6Gvh54gDSnWemyjLSkCIZUN13cs6JSPFnlf4Ls7SqZJecy4vJXUVMIIEuzCCA6OgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQGEwJVUzETMBEGA1UEChMKQXBwbGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwHhcNMDYwNDI1MjE0MDM2WhcNMzUwMjA5MjE0MDM2WjBiMQswCQYDVQQGEwJVUzETMBEGA1UEChMKQXBwbGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkkakJH5HbHkdQ6wXtXnmELes2oldMVeyLGYne+Uts9QerIjAC6Bg++FAJ039BqJj50cpmnCRrEdCju+QbKsMflZ56DKRHi1vUFjczy8QPTc4UadHJGXL1XQ7Vf1+b8iUDulWPTV0N8WQ1IxVLFVkds5T39pyez1C6wVhQZ48ItCD3y6wsIG9wtj8BMIy3Q88PnT3zK0koGsj+zrW5DtleHNbLPbU6rfQPDgCSC7EhFi501TwN22IWq6NxkkdTVcGvL0Gz+PvjcM3mo0xFfh9Ma1CWQYnEdGILEINBhzOKgbEwWOxaBDKMaLOPHd5lc/9nXmW8Sdh2nzMUZaF3lMktAgMBAAGjggF6MIIBdjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUK9BpR5R2Cf70a40uQKb3R01/CF4wHwYDVR0jBBgwFoAUK9BpR5R2Cf70a40uQKb3R01/CF4wggERBgNVHSAEggEIMIIBBDCCAQAGCSqGSIb3Y2QFATCB8jAqBggrBgEFBQcCARYeaHR0cHM6Ly93d3cuYXBwbGUuY29tL2FwcGxlY2EvMIHDBggrBgEFBQcCAjCBthqBs1JlbGlhbmNlIG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwgY2VydGlmaWNhdGUgcG9saWN5IGFuZCBjZXJ0aWZpY2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudHMuMA0GCSqGSIb3DQEBBQUAA4IBAQBcNplMLXi37Yyb3PN3m/J20ncwT8EfhYOFG5k9RzfyqZtAjizUsZAS2L70c5vu0mQPy3lPNNiiPvl4/2vIB+x9OYOLUyDTOMSxv5pPCmv/K/xZpwUJfBdAVhEedNO3iyM7R6PVbyTi69G3cN8PReEnyvFteO3ntRcXqNx+IjXKJdXZD9Zr1KIkIxH3oayPc4FgxhtbCS+SsvhESPBgOJ4V9T0mZyCKM2r3DYLP3uujL/lTaltkwGMzd/c6ByxW69oPIQ7aunMZT7XZNn/Bh1XZp5m5MkL72NVxnn6hUrcbvZNCJBIqxw8dtk2cXmPIS4AXUKqK1drk/NAJBzewdXUhMYIByzCCAccCAQEwgaMwgZYxCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkCCBhZQyFydJz8MAkGBSsOAwIaBQAwDQYJKoZIhvcNAQEBBQAEggEAn61JeH/wwbnZisQ0ObwJWKZmGF7bdscE0/OHF4ht9RiyjCP4mN3M/oHZgb47zIUqZ/fojCAyO52BL0HtlpJ01M8lbzk0PmyzfHYmhEP3u0d0weVZ+8HYALwj3n7aWmreagDo2hHXKBAznBn+8Y0zms+qRoA35jkZOEGIZ3i/e/pFJelyFqIruAw1LiR/xFUaJY9fAfoQTN+aFaUQTkM3RFh05MeOZiLRGNziYGY/zELBxw4jL/3Ax1MezlcvhtaMYMyH5ef9XN+M+S925NhCDjm/XgwC0rx6XCaMSG96aUnvzXfu9wplYXiruycCqtdjV7HzV0CQoeBzZemSWvcE1A==';
validate_receipt($receipt, false);
function validate_receipt($receipt_data, $sandbox_receipt = FALSE) {
if ($sandbox_receipt) {
$url = "https://sandbox.itunes.apple.com/verifyReceipt";
}
else {
$url = "https://buy.itunes.apple.com/verifyReceipt";
}
$ch = curl_init($url);
$data_string = json_encode(array(
'receipt-data' => $receipt_data,
'password' => '501692890fec42cab66dfc10d3b7xxxx',//订阅购买需要认证密码
));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
$output = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if (200 != $httpCode) {
die("Error validating App Store transaction receipt. Response HTTP code $httpCode");
} $decoded = json_decode($output, TRUE);
var_dump($decoded);exit;
}
IOS苹果购买PHP服务器端验证(订阅购买和一次性购买通用)的更多相关文章
- Android Google购买PHP服务器端验证(订阅购买和一次性购买)
一.订阅购买验证 android端采用google service account进行校验 1.打开https://cloud.google.com/console创建一个project: 2.打开p ...
- ios 苹果内购订单验证 --- nodejs实现
实现代码 function IosPlayVerify(data,orderid,cb) { itunesPost(data,function (error,responseData) { if (e ...
- ios 苹果内购订单验证 --- php实现
验证函数: function appleVerify($receipt_data,$orderId = 0) { /* * 21000 App Store不能读取你提供的JSON对象 * 21002 ...
- 苹果IOS内购二次验证返回state为21002的坑
项目是三四年前的老项目,之前有IOS内购二次验证的接口,貌似很久都没用了,然而最近IOS的妹子说接口用不了,让我看看啥问题.接口流程时很简单的,就是前端IOS在购买成功之后,接收到receipt后进行 ...
- IOS,苹果内购和添加广告
内购——应用内购买 通过苹果应用程序商店有三种主要赚钱的方式: 直接收费(与国内大部分用户的消费习惯相悖) 广告(降低用户体验 应用程序名称带Lite可以添加广告) O2O -> Online推 ...
- FineUI(开源版)v6.0中FState服务器端验证的实现原理
前言 1. FineUI(开源版)是完整开源,最早发起于 2008-04,下载全部源代码:http://fineui.codeplex.com/ 2. 你可以通过捐赠作者来支持FineUI(开源版)的 ...
- SpringMVC 服务器端验证
1.导入JSR303验证类库Jar包2.在MVC的配置文件中添加<mvc:annotation-driven/>的配置3.在MVC的配置文件中添加验证器的配置4.在接收表单数据的类中添加验 ...
- jsf服务器端验证用户输入
服务器端验证用户输入数据步骤 1 html页面上插入要输入数据控件 <h:inputText size="10" value="#{commodityBean.fo ...
- jQuery html5Validate基于HTML5表单 异步服务器端验证
1. HTML5 自带的Validate 很漂亮,很好用, 但是一定要在form里用submit按钮,才生效 <form id="frmInfo" action=" ...
随机推荐
- 115 Java Interview Questions and Answers – The ULTIMATE List--reference
In this tutorial we will discuss about different types of questions that can be used in a Java inter ...
- python(5)-os模块
os.getcwd() 获取当前工作目录 os.chdir('dirname') 改变当前脚本的工作目录 os.curdir 返回当前目录名,即"." os.pardir 返回当前 ...
- Zabbix Api的使用
API使用 zabbix官网文档:https://www.zabbix.com/documentation/2.2/manual/api, Zabbix API是基于JSON-RPC 2.0规格,具体 ...
- HTML+CSS3 纯代码实现转盘效果
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- HDOJ2003求绝对值
求绝对值 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- MyEclipse中配置SWT/JFace/SWT-Designer 艰辛路程
我最近受一个老师所托,写一个小系统,为了更加熟练使用Java,我决定用Java写一个PC软件. 我是一个比较追求完美的孩子,所以虽然老师对界面没啥要求,但是为了加快速度和界面美观,果断选择SWT/JF ...
- Jquery插件的编写和使用
第七章 Jquery插件的编写和使用 插件的定义: 插件也称为扩展,是一种遵循一定规范的应用程序接口编写出来的程序. 下面是Jquery插件的编写很使用:要查看请点击:Jquery插件的编写很使 ...
- 从客户端中检测到有潜在危险的 request
如题,当遇到这种情况该怎么办呢? 通常情况下一下2种解决方案就可以解决问题了: 解决方案一: 在.aspx文件头中加入这句: <%@ Page validateReques ...
- oracle表分区心得
由于系统是对前批次系统进行改造,需要对表建立分区 1.已建立未分区的表,无法进行任何表分区的操作,如:增加.删除.合并.拆分均无法操作 2.已分区的表至少保留1个分区,即不能全删 3.若有defaul ...
- C# 3.0 特性之扩展方法
今天,我们来聊一聊C#的扩展方法. C# 3.0中为我们提供了一个新的特性—扩展方法.什么是扩展方法呢?我们看一下MSDN的注解: 扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新 ...