苹果收据验证需区分沙盒与生产环境,通过官方接口、cURL安全请求、第三方SDK、本地签名验证及订阅收据链解析五种方式综合校验有效性与真实性。

如果您在PHP后端接收到苹果应用内购买的收据数据,但无法确认其有效性与真实性,则可能是由于未正确调用苹果验证接口或未处理沙盒/生产环境切换逻辑。以下是验证苹果支付收据的多种方法:
苹果提供两个验证端点:沙盒环境用于测试,生产环境用于正式发布。需根据收据内容自动识别并选择对应URL,避免硬编码导致验证失败。
1、提取收据数据中的base64编码字符串,确保未被截断或添加额外空格。
2、构造JSON请求体:{"receipt-data": "原始base64字符串", "password": "共享密钥(仅适用于自动续订订阅)"}
立即学习“PHP免费学习笔记(深入)”;
3、向https://sandbox.itunes.apple.com/verifyReceipt发起POST请求;若返回status为21007,则改用https://buy.itunes.apple.com/verifyReceipt重试。
4、检查响应中status字段值:21000表示格式错误,21002表示收据数据损坏,21003表示签名无效,21004表示共享密钥不匹配,21005表示Apple服务器不可用,21006表示收据有效但已过期(仅限旧版收据),21008表示收据来自沙盒但提交至生产环境。
直接使用file_get_contents可能忽略SSL证书验证,存在中间人攻击风险。通过cURL显式设置CURLOPT_SSL_VERIFYPEER和CURLOPT_CAINFO可提升通信安全性。
1、下载最新Apple根证书(AppleIncRootCertificate.cer)并转换为PEM格式。
2、初始化cURL句柄,设置CURLOPT_URL为目标验证地址,CURLOPT_POST为true,CURLOPT_POSTFIELDS为JSON数据。
3、启用SSL验证:CURLOPT_SSL_VERIFYPEER设为true,CURLOPT_CAINFO指向本地PEM证书路径。
4、执行请求并捕获响应,使用json_decode解析结果,检查receipt属性是否存在且包含in_app数组。
该库封装了环境自动检测、重试机制及常见status码映射,减少手动处理逻辑出错概率。
1、通过Composer安装:composer require joshcam/apple-receipt-validator
2、实例化Validator类,并传入base64收据字符串与共享密钥(如有)。
3、调用validate()方法,返回对象包含isValid()布尔值、getLatestReceiptInfo()获取最新交易记录、getEnvironment()返回'development'或'production'。
4、检查getLatestReceiptInfo()中expires_date_ms是否大于当前时间戳,确认订阅未过期。
苹果收据本质是PKCS#7签名容器,可使用OpenSSL命令或PHP openssl_pkcs7_verify函数进行本地签名验证,作为网络验证失败时的辅助判断依据。
1、将base64收据解码后保存为.der文件。
2、执行命令openssl pkcs7 -inform DER -in receipt.der -print -noout,确认输出含signer info及certificate sections。
3、在PHP中调用openssl_pkcs7_verify(),指定临时文件路径与CA证书路径,返回true表示签名由Apple证书链签发且未篡改。
4、注意此方法无法验证交易状态或过期时间,仅能确认收据来源可信性。
对于iOS 11+的订阅收据,latest_receipt字段包含完整收据链base64,latest_receipt_info数组按时间倒序排列所有历史交易,需逐条比对product_id与original_transaction_id。
1、解析response中latest_receipt_info数组,取第一条记录作为最新有效交易。
2、比对product_id是否与预期商品标识一致,original_transaction_id必须与首次购买时返回值完全相同。
3、计算expires_date_ms与当前毫秒时间戳差值,若小于0则视为已过期。
4、检查cancellation_date_ms字段是否存在,若存在则说明用户已主动取消,但当前周期仍有效直至expires_date_ms。
以上就是PHP怎么验证苹果支付收据_苹果支付收据PHP验证技巧【教程】的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号