0

0

PHP怎么处理苹果支付状态变更_苹果支付状态变更PHP处理步骤【指南】

看不見的法師

看不見的法師

发布时间:2025-12-23 12:45:09

|

676人浏览过

|

来源于php中文网

原创

苹果支付状态变更需五步处理:一、用php://input解析JSON;二、验证signingCertURL证书及signature;三、用sharedSecret和IV解密AES-GCM加密的data;四、依status更新订单并保证事务原子性;五、5秒内返回空HTTP 200响应。

php怎么处理苹果支付状态变更_苹果支付状态变更php处理步骤【指南】

苹果支付(Apple Pay)完成交易后,服务器会收到状态变更通知,PHP需要正确验证并处理这些通知。以下是处理苹果支付状态变更的具体步骤:

一、接收并解析苹果支付回调请求

苹果支付通过HTTPS POST方式向您的服务器发送状态变更通知,内容为JSON格式的原始数据,需读取原始输入流并解码。

1、使用php://input获取原始POST数据,避免因Content-Type非application/x-www-form-urlencoded导致$_POST为空。

2、调用json_decode(file_get_contents('php://input'), true)将JSON字符串转为关联数组。

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

3、检查是否成功解码,若返回null则说明JSON格式错误或为空,此时应立即返回HTTP 400状态码

二、验证苹果签名与证书链

苹果在通知中附带signingCertURL、signature、notificationType和data字段,需下载证书、验证签名以确保通知真实来自Apple服务器。

1、从signingCertURL下载证书内容,使用file_get_contents获取PEM格式证书字符串。

2、使用openssl_x509_read()加载证书,并用openssl_x509_parse()提取公钥信息。

3、拼接data字段与notificationType字段(按字典序排序后拼接),使用openssl_verify()验证signature是否匹配该数据与证书公钥。

4、若签名验证失败,必须拒绝该通知并返回HTTP 401状态码

三、解密加密的data字段

苹果将敏感业务数据(如transactionId、status等)使用AES-GCM加密后放入data字段,需使用通知中提供的sharedSecret及IV进行解密。

1、从通知中提取data、version、transactionId、bundleId字段,并确认version为"EC_v1"。

2、从环境配置中读取与App ID绑定的sharedSecret(即App Store Connect中配置的密钥)。

3、对data字段进行Base64解码,分离出nonce(前12字节)、authTag(后16字节)和ciphertext(中间部分)。

谱乐AI
谱乐AI

谱乐AI,集成 Suno、Udio 等顶尖AI音乐模型的一站式AI音乐生成平台。

下载

4、使用openssl_decrypt()配合aes-128-gcm算法、sharedSecret作为key、nonce作为iv进行解密,传入authTag用于完整性校验。

5、解密失败时不得记录任何敏感字段,且必须返回HTTP 400

四、解析解密后的业务数据并更新订单状态

解密后获得标准JSON结构,包含transactionId、originalTransactionId、productId、status、purchaseDate等关键字段,用于匹配本地订单并更新状态。

1、根据transactionId或originalTransactionId查询本地订单记录,优先使用originalTransactionId匹配订阅续订场景

2、校验productId是否与订单预期一致,防止越权篡改商品标识。

3、依据status字段值执行对应操作:状态为0表示购买成功,1表示取消,2表示退款,3表示退款已恢复,5表示订阅过期。

4、对status为0的订单,更新数据库中订单状态为“已支付”,并记录purchaseDate与expiresDate(若存在)。

5、所有状态变更操作必须在数据库事务中完成,确保原子性

五、向苹果服务器返回确认响应

苹果要求在收到通知后5秒内返回HTTP 200响应,且响应体必须为空,否则视为未确认,将在后续重发通知。

1、在完成全部验证与业务处理逻辑后,调用http_response_code(200)设置状态码。

2、清除所有输出缓冲区,使用ob_end_clean()防止意外输出干扰响应。

3、直接调用exit或return终止脚本执行,禁止输出任何字符(包括空格、BOM、换行)

4、记录日志时仅写入文件或远程服务,不得使用echo、print、var_dump等输出函数。

相关专题

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

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

2524

2023.09.01

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

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

1600

2023.10.11

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

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

1493

2023.10.11

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

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

952

2023.10.23

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

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

1416

2023.10.23

html怎么上传
html怎么上传

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

1234

2023.11.03

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

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

1445

2023.11.09

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

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

1306

2023.11.13

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

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

精品课程

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

共137课时 | 8.6万人学习

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

共6课时 | 7万人学习

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

共13课时 | 0.9万人学习

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

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