0

0

PHP怎么对接苹果支付服务端_苹果支付服务端PHP对接方法【指南】

雪夜

雪夜

发布时间:2025-12-24 12:25:23

|

390人浏览过

|

来源于php中文网

原创

苹果IAP服务端验证需用cURL或Guzzle调用官方接口,严格处理21007/21008重试逻辑,本地验签仅作辅助,自动续订须解析latest_receipt_info并校验product_id与有效期,错误码须分类响应。

php怎么对接苹果支付服务端_苹果支付服务端php对接方法【指南】

如果您在PHP项目中需要验证苹果应用内购买(IAP)的交易凭证,但无法正确解析苹果返回的响应,则可能是由于请求格式、证书配置或验签逻辑存在问题。以下是实现苹果支付服务端验证的多种方法:

一、使用cURL发送POST请求至苹果验证接口

该方法通过标准HTTP POST方式将交易凭证提交至苹果官方验证地址,适用于所有PHP版本,无需额外扩展依赖。

1、准备原始交易凭证(receipt-data),需为Base64编码字符串,通常由iOS客户端传递至您的PHP服务端。

2、构建JSON请求体,包含receipt-data字段及可选的password(仅适用于自动续订订阅且配置了共享密钥的应用)。

立即学习PHP免费学习笔记(深入)”;

3、设置cURL选项:URL为https://buy.itunes.apple.com/verifyReceipt(生产环境)或https://sandbox.itunes.apple.com/verifyReceipt(沙盒测试),Content-Type为application/json,启用SSL验证并设置超时时间。

4、执行请求并获取响应,使用json_decode解析返回的JSON数据,检查status字段是否为0(表示验证成功)。

5、若status为21007或21008,需将请求重定向至沙盒或生产环境对应接口进行二次验证,务必注意苹果要求的重试逻辑必须严格遵循其文档定义

二、使用Guzzle HTTP客户端发起验证请求

Guzzle提供更简洁的HTTP抽象层和异常处理机制,适合已集成Composer依赖管理的项目。

1、通过Composer安装guzzlehttp/guzzle:composer require guzzlehttp/guzzle。

2、实例化Guzzle客户端,配置base_uri为苹果验证地址,并设置timeout和verify参数。

3、调用post方法,传入receipt-data数组作为JSON body,例如['receipt-data' => $receipt, 'password' => $sharedSecret]。

4、捕获GuzzleException异常,区分网络错误与HTTP状态码错误(如400、500)。

5、对响应体执行json_decode($response->getBody(), true),验证返回数据中in_app数组是否存在且非空,避免仅依赖status字段忽略业务逻辑错误

三、本地验签验证App Store签名(仅限iOS 11.3+ Receipt)

当需离线校验收据签名真实性时,可使用OpenSSL扩展解析并验证苹果签名证书链,适用于高安全要求场景。

1、从原始收据数据中提取PKCS#7签名部分(位于receipt-data末尾的ASN.1结构)。

2、使用openssl_pkcs7_verify()函数对签名文件执行验证,需提前将苹果根证书(AppleIncRootCertificate.cer)与中间证书(AppleWWDRCAG6.cer)合并为PEM格式。

Rustic AI
Rustic AI

AI驱动的创意设计平台

下载

3、若验证失败,检查PHP OpenSSL扩展是否启用,以及证书路径是否可读。

4、成功后使用openssl_x509_parse()解析证书信息,确认颁发者为Apple Worldwide Developer Relations Certification Authority。

5、注意:此方法不替代服务器端在线验证,仅作辅助校验;苹果明确要求最终验证必须通过其HTTPS接口完成

四、处理苹果返回的嵌套收据字段(auto-renewable subscription)

对于自动续订订阅,苹果返回的receipt中包含latest_receipt_info数组,需从中提取最新有效交易记录。

1、检查响应中latest_receipt_info是否为数组且不为空,否则回退至top-level receipt-info字段。

2、遍历latest_receipt_info数组,按expires_date_ms字段降序排序,取第一条作为当前有效订阅项。

3、比对product_id是否与预期一致,防止用户篡改凭证替换为其他商品ID。

4、解析expires_date_ms为时间戳,转换为DateTime对象并与当前时间比较,判断是否仍在有效期。

5、特别注意:sandbox环境的expires_date_ms可能比实际时间快数小时,测试阶段应预留至少30分钟缓冲期

五、错误码分类处理与日志记录策略

苹果验证接口返回的status字段涵盖20余种错误码,需按类别分别应对,避免统一返回失败误导客户端。

1、status为21000–21003、21005:代表客户端提交的数据格式错误或服务不可用,应记录原始receipt-data用于排查,禁止向客户端暴露具体错误码,防止被用于探测攻击

2、status为21004:表示共享密钥不匹配,需核对App Store Connect中配置的Password字段是否与代码中一致,且未误填为App ID或Bundle ID。

3、status为21006:表示订阅已过期但存在宽限期,此时应允许用户继续访问服务直至宽限期结束,同时触发续订提醒。

4、status为21007或21008:必须切换验证地址重试,重试前需记录原始请求时间与环境标识,防止无限循环调用

5、status为21010:表示收据为测试环境生成但发往生产接口,应直接拒绝并返回明确提示,不得尝试自动降级至沙盒接口,以免引发安全风险

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

1640

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1073

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

977

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1396

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1226

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1437

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1302

2023.11.13

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

6

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 7.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号