You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apple Pay JS集成时onMerchantValidate配置及商户证书获取问题

onMerchantValidate 阶段POST请求提交内容

向苹果服务器发起的校验请求,请求体固定包含4个必填参数:

  • merchantIdentifier:你在苹果开发者后台注册的商户ID,统一以merchant.为前缀
  • displayName:支付弹窗向用户展示的商户名称,需和开发者后台注册时填写的名称保持一致
  • initiative:网页端集成Apple Pay固定填web即可
  • initiativeContext:集成Apple Pay的网站域名,无需携带http/https协议头

额外注意:请求需使用TLS 1.2及以上版本发起,Content-Type请求头需设置为application/json,且必须携带商户身份证书完成双向SSL校验,否则苹果会直接拒绝请求。

商户身份证书及对应密钥获取方式

merchIdentityCert即商户身份证书,获取步骤如下:

  1. 使用付费的苹果开发者账号登录开发者后台,进入「Certificates, Identifiers & Profiles」管理板块
  2. 先创建商户标识符(Merchant ID),即请求参数里的merchantIdentifier,创建时需填写你集成Apple Pay的网站域名并完成域名所有权验证
  3. 针对已创建的Merchant ID,选择创建「Merchant Identity Certificate(商户身份证书)」,按照引导上传本地生成的CSR签名请求文件后,即可下载得到.cer格式的证书文件
  4. 将下载的.cer证书导入系统钥匙串(Mac系统),右键选择导出为.p12格式的证书包,导出时可设置加密密码,该p12包内已包含证书本身和对应的私钥
  5. 可通过openssl命令将p12包拆分为独立的pem格式证书和密钥文件,适配PHP调用:
    • 提取证书文件:openssl pkcs12 -in 你的证书包.p12 -clcerts -nokeys -out merchIdentityCert.pem
    • 提取私钥文件:openssl pkcs12 -in 你的证书包.p12 -nocerts -nodes -out merchIdentityKey.pem
PHP 发起校验请求参考实现

使用cURL发起请求的示例代码如下:

<?php
// onMerchantValidate事件中拿到的苹果校验接口地址
$appleValidationEndpoint = $_POST['validationUrl'];
// 构造请求体
$requestBody = json_encode([
    'merchantIdentifier' => 'merchant.com.example.mystore',
    'displayName' => 'MyStore',
    'initiative' => 'web',
    'initiativeContext' => 'mystore.example.com'
]);

$ch = curl_init($appleValidationEndpoint);
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $requestBody,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
    CURLOPT_SSLCERT => '/server/secure/path/merchIdentityCert.pem', // 证书文件存放在非web可访问目录
    CURLOPT_SSLKEY => '/server/secure/path/merchIdentityKey.pem', // 私钥文件存放在非web可访问目录
    // 若私钥设置了导出密码,新增下面一行配置
    // CURLOPT_SSLKEYPASSWD => '你设置的私钥密码'
]);

$response = curl_exec($ch);
if (curl_errno($ch)) {
    // 按需处理请求错误逻辑
    http_response_code(500);
    exit(curl_error($ch));
}
curl_close($ch);

// 直接返回苹果返回的会话信息给前端即可完成校验
echo $response;
?>

注意:证书和私钥文件必须存放在web服务根目录之外的路径,避免被公开访问泄露

内容的提问来源于stack exchange,提问作者Amr Gadalla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 04:06:04