需通过四种方式动态获取苹果支付产品列表:一、调用App Store Server API解析inAppPurchaseList;二、从MySQL表apple_products查询预设商品;三、解析iOS客户端POST的SKProduct JSON快照;四、静态加载config/apple_products.php配置数组。

如果您在开发支持苹果支付(Apple Pay)的PHP后端服务时,需要动态获取苹果支付可售产品列表,则需通过与App Store Server API或自建商品配置系统交互实现。以下是获取苹果支付产品列表的多种方法:
一、调用App Store Server API获取已上架商品信息
App Store Server API本身不直接提供“产品列表”端点,但可通过验证交易收据后解析其中的product_id字段反向归纳可用商品;更实用的方式是结合已知的Bundle ID与环境(Sandbox/Production),向自有商品数据库查询预配置的苹果支付商品ID集合。
1、在您的PHP项目中安装cURL扩展(确保启用)。
2、构造HTTPS请求头,包含Authorization(使用JWT令牌)、Content-Type: application/json。
立即学习“PHP免费学习笔记(深入)”;
3、向https://api.storekit.itunes.apple.com/inApps/v1/lookup/{bundleId}发送GET请求(需替换{bundleId}为实际值)。
4、解析返回的JSON响应,提取inAppPurchaseList数组中的productId、displayName、price等字段。
5、将解析结果缓存至Redis或本地文件,避免高频重复请求。
二、从本地MySQL数据库读取预设苹果支付商品表
为保障响应速度与稳定性,推荐将苹果支付商品元数据(如product_id、中文名称、价格、是否订阅型)预先存入MySQL表,并在PHP中执行SELECT查询获取全量或条件筛选后的列表。
1、创建名为apple_products的表,包含字段:id(INT)、product_id(VARCHAR)、name_zh(VARCHAR)、price_usd(DECIMAL)、is_subscription(TINYINT)、status(TINYINT)。
2、使用PDO连接数据库,设置字符集为utf8mb4。
3、执行SQL语句:SELECT product_id, name_zh, price_usd FROM apple_products WHERE status = 1 ORDER BY id。
4、遍历PDOStatement返回的关联数组,构建标准JSON结构并输出。
三、解析iOS客户端传入的SKProduct列表快照
iOS端调用StoreKit的SKProductsRequest成功后,会将SKProduct对象序列化为JSON并通过HTTP POST提交至PHP接口;PHP需接收该原始数据并校验签名与完整性,再提取商品信息。
1、在PHP脚本中调用file_get_contents('php://input')获取原始POST体。
2、使用json_decode()解析JSON,检查是否存在products数组及每个元素的identifier、localizedTitle、price字段。
3、对identifier字段执行正则校验:/^com\.[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-]+$/,排除非法product_id。
4、过滤掉price为空或非数字的条目,保留localizedTitle与price字符串用于前端展示。
四、使用配置文件方式静态加载苹果支付商品定义
适用于商品极少变动、无需实时更新的轻量级场景。将所有苹果支付商品以PHP数组形式写入config/apple_products.php,由主逻辑require_once引入。
1、在config/apple_products.php中定义返回数组:return ['com.example.monthly' => ['name' => '月度会员', 'price' => '¥18'], 'com.example.yearly' => ['name' => '年度会员', 'price' => '¥188']]。
2、在业务控制器中执行$products = require 'config/apple_products.php';。
3、遍历$products数组,将键作为product_id,值中的name与price组合为展示项。
4、对每个product_id调用filter_var($pid, FILTER_SANITIZE_STRING)进行基础清洗。











