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

如果您在PHP后端接收到苹果应用内购买的收据数据,但无法确认其有效性与真实性,则可能是由于未正确调用苹果验证接口或未处理沙盒/生产环境切换逻辑。以下是验证苹果支付收据的多种方法:
一、使用苹果官方验证接口(基础HTTP请求方式)
苹果提供两个验证端点:沙盒环境用于测试,生产环境用于正式发布。需根据收据内容自动识别并选择对应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表示收据来自沙盒但提交至生产环境。
二、使用cURL配合SSL证书校验(增强安全性)
直接使用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数组。
三、引入第三方SDK(如joshcam/php-apple-receipt-validator)
该库封装了环境自动检测、重试机制及常见status码映射,减少手动处理逻辑出错概率。
1、通过Composer安装:composer require joshcam/apple-receipt-validator
标签: php word js json composer 编码 app 苹果 ssl 后端 curl ai ios apple
还木有评论哦,快来抢沙发吧~