1. // 正式环境验证地址
  2. $ios_verify_url = 'https://buy.itunes.apple.com/verifyReceipt';
  3. // 测试环境验证地址
  4. $ios_sandbox_verify_url = 'https://sandbox.itunes.apple.com/verifyReceipt';
  5.  
  6. $defaults = array(
  7. CURLOPT_POST => 1,
  8. CURLOPT_HEADER => 0,
  9. CURLOPT_URL => $ios_sandbox_verify_url,
  10. CURLOPT_FRESH_CONNECT => 1,
  11. CURLOPT_RETURNTRANSFER => 1,
  12. CURLOPT_FORBID_REUSE => 1,
  13. CURLOPT_TIMEOUT => 60,
  14. CURLOPT_SSL_VERIFYPEER => FALSE,
  15. CURLOPT_POSTFIELDS => $receipt // 苹果购买后返回的票据信息
  16. );
  17.  
  18. $ch = curl_init();
  19. curl_setopt_array($ch, $defaults);
  20. $result = curl_exec($ch);
  21. $errno = curl_errno($ch);
  22. $errmsg = curl_error($ch);
  23. curl_close($ch);
  24.  
  25. // 判断时候出错,抛出异常
  26. if ($errno != 0) {
  27. throw new Exception($errmsg, $errno);
  28. }
  29.  
  30. $object = json_decode($result);
  31. // 判断返回的数据是否是对象
  32. if (!is_object($object) || !isset($object->status)) {
  33. throw new Exception('Invalid response data');
  34. }
  35.  
  36. if($object->status === 0) {
  37. // 认证成功
  38. $return = array(
  39. 'status' => 1,
  40. 'receipt' => null,
  41. 'expires_date_ms' => null,
  42. 'remote_server_code' => $object->status
  43. );
  44.  
  45. if (isset($object->latest_receipt) && !empty($object->latest_receipt)) {
  46. // 如果是订阅购买,需要将票据保存到数据库中
  47. // 如果苹果返回了这个值,那么需要同步将这个值更新到数据库中
  48. }
  49.  
  50. if (isset($object->latest_receipt_info) && !empty($object->latest_receipt_info)) {
  51. // 获取过期时间
  52. $last_receipt_info = end($object->latest_receipt_info);
  53. $expires_date_ms = $last_receipt_info->expires_date_ms / 1000;
  54. }
  55.  
  56. // 其他操作
  57. } else {
  58. return array(
  59. 'status' => 0,
  60. 'receipt' => null,
  61. 'expires_date_ms' => null,
  62. 'remote_server_code' => $object->status
  63. );
  64. }

或者

  1. $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==';
  2. validate_receipt($receipt, false);
  3. function validate_receipt($receipt_data, $sandbox_receipt = FALSE) {
  4. if ($sandbox_receipt) {
  5. $url = "https://sandbox.itunes.apple.com/verifyReceipt";
  6. }
  7. else {
  8. $url = "https://buy.itunes.apple.com/verifyReceipt";
  9. }
  10. $ch = curl_init($url);
  11. $data_string = json_encode(array(
  12. 'receipt-data' => $receipt_data,
  13. 'password' => '501692890fec42cab66dfc10d3b7xxxx',//订阅购买需要认证密码
  14. ));
  15. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
  16. curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
  17. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  18. curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  19. 'Content-Type: application/json',
  20. 'Content-Length: ' . strlen($data_string))
  21. );
  22. $output = curl_exec($ch);
  23. $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  24. curl_close($ch);
  25. if (200 != $httpCode) {
  26. die("Error validating App Store transaction receipt. Response HTTP code $httpCode");
  27. }
  28.  
  29. $decoded = json_decode($output, TRUE);
  30. var_dump($decoded);exit;
  31. }

  

IOS苹果购买PHP服务器端验证(订阅购买和一次性购买通用)的更多相关文章

  1. Android Google购买PHP服务器端验证(订阅购买和一次性购买)

    一.订阅购买验证 android端采用google service account进行校验 1.打开https://cloud.google.com/console创建一个project: 2.打开p ...

  2. ios 苹果内购订单验证 --- nodejs实现

    实现代码 function IosPlayVerify(data,orderid,cb) { itunesPost(data,function (error,responseData) { if (e ...

  3. ios 苹果内购订单验证 --- php实现

    验证函数: function appleVerify($receipt_data,$orderId = 0) { /* * 21000 App Store不能读取你提供的JSON对象 * 21002 ...

  4. 苹果IOS内购二次验证返回state为21002的坑

    项目是三四年前的老项目,之前有IOS内购二次验证的接口,貌似很久都没用了,然而最近IOS的妹子说接口用不了,让我看看啥问题.接口流程时很简单的,就是前端IOS在购买成功之后,接收到receipt后进行 ...

  5. IOS,苹果内购和添加广告

    内购——应用内购买 通过苹果应用程序商店有三种主要赚钱的方式: 直接收费(与国内大部分用户的消费习惯相悖) 广告(降低用户体验 应用程序名称带Lite可以添加广告) O2O -> Online推 ...

  6. FineUI(开源版)v6.0中FState服务器端验证的实现原理

    前言 1. FineUI(开源版)是完整开源,最早发起于 2008-04,下载全部源代码:http://fineui.codeplex.com/ 2. 你可以通过捐赠作者来支持FineUI(开源版)的 ...

  7. SpringMVC 服务器端验证

    1.导入JSR303验证类库Jar包2.在MVC的配置文件中添加<mvc:annotation-driven/>的配置3.在MVC的配置文件中添加验证器的配置4.在接收表单数据的类中添加验 ...

  8. jsf服务器端验证用户输入

    服务器端验证用户输入数据步骤 1 html页面上插入要输入数据控件 <h:inputText size="10" value="#{commodityBean.fo ...

  9. jQuery html5Validate基于HTML5表单 异步服务器端验证

    1. HTML5 自带的Validate 很漂亮,很好用, 但是一定要在form里用submit按钮,才生效 <form id="frmInfo" action=" ...

随机推荐

  1. js里一些经典的算法

    //1.找出某个数字在一组数组内的存不存在 如果存在 找出他所在的索引. function indexOf(arr,item){ var i; if(Array.prototype.indexOf){ ...

  2. Maven 仓库

    Maven仓库分为本地仓库和远程仓库(中央仓库,私服,其他公共仓库)一张图就可以很清楚的看出结构 本地仓库:本地仓库是在我们当前电脑系统盘的user-administrator-m2-reposito ...

  3. swift 中异常的处理方法

    swift 中什么时候需要处理异常,在调用系统某个方法的时,该方法最后有一个throws 说明该方法会抛出异常,如果一个方法抛出异常,那么需要对该异常进行处理 swift 异常处理提供了三种方法 方式 ...

  4. 视频播放-VideoVIew,Vitamio

    播放视频文件其实并不比播放音频文件复杂,主要是使用 VideoView类来实现的.这个类将视频的显示和控制集于一身,使得我们仅仅借助它就可以完成一个简易的视频播放器.VideoView的用法和 Med ...

  5. HDU 3999 The order of a Tree 二叉搜索树 BST

    建一个二叉搜索树,然后前序输出. 用链表建的,发现很久没做都快忘了... #include <cstdio> #include <cstdlib> struct Node{ i ...

  6. JSONP与JSON的关系

    这篇文章<说说JSON和JSONP,也许你会豁然开朗>写得非常棒,推荐一下 http://kb.cnblogs.com/page/139725/ (大神,对不起,我记录一下,因为你写的真得 ...

  7. ResponseBody的使用

    使用Spring的@ResponseBody有时还是挺方便的,在ajax调用返回纯字符串时有中文编码问题. @ResponseBody @RequestMapping(value="/dec ...

  8. 24小时学通Linux内核之如何处理输入输出操作

    真的是悲喜交加呀,本来这个寒假早上8点都去练车,两个小时之后再来实验室陪伴Linux内核,但是今天教练说没名额考试了,好纠结,不过想想就可以睡懒觉了,哈哈,自从大三寒假以来还没睡过懒觉呢,现在也有更多 ...

  9. Ehcache(2.9.x) - API Developer Guide, Using Explicit Locking

    About Explicit Locking Ehcache contains an implementation which provides for explicit locking, using ...

  10. 第六节 ADO.NET

    ADO.NET是一组为.NET编程人员提供数据访问服务的类,封装在System.Data.dll 中,是.NET框架的一部分,它是一种数据访问技术. 使用SQLServer数据提供程序 类 说明 Sq ...