PHP如何对接苹果应用内支付_苹果应用内支付PHP对接指南【步骤】

星夢妙者
发布: 2025-12-22 20:00:02
原创
898人浏览过
苹果IAP PHP对接需五步:一、客户端传base64收据至PHP;二、解码后用cURL向苹果沙盒/生产接口验证;三、解析响应校验商品ID、去重及订阅状态;四、自动切换环境(21007/21008触发重试);五、定期拉取latest_receipt_info处理续订与过期。

php如何对接苹果应用内支付_苹果应用内支付php对接指南【步骤】

如果您正在开发一个iOS应用并需要在后端验证苹果应用内购买(IAP)的交易凭证,则PHP是常用的服务器端语言之一。以下是完成苹果应用内支付PHP对接的具体步骤:

一、获取苹果提供的交易凭证

客户端(iOS应用)在完成购买后,会收到一个base64编码的交易收据(receipt-data),该数据需提交至您的PHP服务器进行验证。服务器不应直接信任客户端传来的任何信息,必须通过与苹果服务器交互完成真实性校验。

1、iOS客户端调用SKPaymentQueue的transactionReceipt属性或使用StoreKit 2的Transaction.receipt获得原始收据数据。

2、将该收据数据以JSON格式POST至您的PHP接口,字段名建议为receipt_data

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

3、PHP接口接收该字段值,并进行base64解码前的合法性检查,确保字符串仅含base64字符集且长度合理。

二、向苹果验证收据

苹果提供两个环境对应的验证URL:沙盒环境用于测试,生产环境用于上线应用。PHP需根据收据来源自动选择对应地址,避免在生产中误用沙盒接口导致验证失败。

1、对客户端传入的receipt_data执行base64_decode(),获取原始二进制收据数据。

2、构造JSON请求体:array('receipt-data' => $decoded_receipt, 'password' => $shared_secret);其中shared_secret为App Store Connect中配置的共享密钥(仅适用于自动续期订阅)。

3、使用cURL向https://sandbox.itunes.apple.com/verifyReceipt(沙盒)或https://buy.itunes.apple.com/verifyReceipt(生产)发起POST请求,Content-Type设为application/json。

4、接收苹果返回的JSON响应,检查response['status']字段值:0表示验证成功,21007或21008表示需转向另一环境重试

三、解析并校验响应内容

苹果返回的JSON中包含receipt、latest_receipt_info、pending_renewal_info等关键结构。PHP需逐层提取并比对业务所需字段,防止伪造响应。

1、若status为0,从response['receipt']['in_app']中提取所有订单记录,每条记录含product_id、transaction_id、original_transaction_id、purchase_date_ms等。

必剪Studio
必剪Studio

Bilibili发布的免费AI数字分身定制和视频创作工具

必剪Studio 183
查看详情 必剪Studio

2、比对product_id是否属于您预设的有效商品列表,拒绝任何未注册的商品标识

3、检查transaction_id是否已在本地数据库中标记为已处理,防止重复发货或重复扣费

4、针对订阅类商品,读取response['latest_receipt']并保存用于后续续订验证;同时解析response['pending_renewal_info']判断用户当前订阅状态是否有效。

四、实现双环境自动切换逻辑

由于苹果未提供收据来源环境的明确标识,PHP需通过试探性验证实现沙盒/生产环境自动识别,避免人工配置错误导致线上验证失败。

1、首次使用生产URL验证,若返回status为21007(收据来自沙盒)或21008(收据来自未知环境),则立即切换至沙盒URL重试。

2、若两次验证均失败(如status=21002),说明收据数据损坏或被篡改,应拒绝该请求并记录日志

3、将本次验证所用环境(sandbox或production)连同transaction_id一并存入数据库,供后续查询与审计使用。

五、处理订阅续订与过期通知

苹果不会主动推送续订结果,PHP服务必须定期拉取最新收据并解析latest_receipt_info,才能准确掌握用户订阅生命周期变化。

1、当检测到response['receipt']['subscription_expires_date_ms']临近过期时,触发一次新的receipt验证请求,获取最新状态。

2、遍历response['latest_receipt_info']数组,查找purchase_date_ms晚于本地记录的最大值,确认最新一笔交易。

3、若发现auto_renew_status为0,或grace_period_expires_date_ms已过期且未恢复,应立即停用用户订阅权益

4、对response['pending_renewal_info']中的expiration_intent字段进行判断,值为1表示用户主动取消,值为2表示账单问题,需差异化处理。

以上就是PHP如何对接苹果应用内支付_苹果应用内支付PHP对接指南【步骤】的详细内容,更多请关注php中文网其它相关文章!

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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