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

当苹果支付(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(中间部分)。
标签: php js json app 字节 苹果 ssl apple 状态码 退款 环境配置 red
还木有评论哦,快来抢沙发吧~