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

关于Apple内购Server-to-Server通知接收失败的技术求助

Apple内购Server-to-Server通知未接收排查方案

针对你描述的Node.js/Express+Heroku环境下无法接收Apple内购Server-to-Server通知的问题,结合已执行的操作,补充以下针对性排查步骤:

  • 验证端点路由与请求解析
    确保Express端点正确配置POST路由,且启用JSON请求体解析。示例代码检查:

    const express = require('express');
    const app = express();
    
    // 必须添加此中间件解析Apple发送的JSON格式通知
    app.use(express.json());
    
    // 确认路由路径与App Store Connect中填写的完全一致
    app.post('/apple-iap-notifications', (req, res) => {
      console.log('收到Apple通知:', req.body);
      // 必须立即返回200 OK,Apple要求响应超时不超过5秒
      res.sendStatus(200);
    });
    

    避免在响应前执行耗时操作(如收据验证),可将异步逻辑放入后台处理,优先返回成功响应。

  • 测试端点可访问性
    使用curl或Postman模拟Apple通知请求,验证端点是否能正常接收并记录请求:

    curl -X POST -H "Content-Type: application/json" -d '{"notificationType":"CONSUMPTION_REQUEST","version":"2.0"}' https://your-heroku-app.herokuapp.com/your-endpoint-path
    

    同时通过heroku logs --tail查看日志,确认请求是否被记录。如果模拟请求也无法收到,排查Heroku应用的部署状态、路由映射是否正确。

  • 检查App Store Connect通知配置细节

    1. 确认生产和沙箱环境的端点URL完全一致(包括路径),无拼写错误。
    2. 检查通知类型勾选情况:确保勾选了测试交易对应的类型(如交易成功、订阅续订等),未勾选的类型不会触发通知。
    3. 沙箱环境下部分通知(如订阅过期)需等待特定时间触发,不要立即判定未收到。
  • 强化日志排查
    在Express应用中添加详细请求日志,确保捕获所有进入的请求:

    const morgan = require('morgan');
    // 记录完整请求信息,包括请求头、状态码等
    app.use(morgan('combined'));
    

    重新部署后触发沙箱交易,通过heroku logs --tail实时查看是否有Apple服务器的请求记录。若有请求但状态码非200,排查响应逻辑问题。

  • 确认证书与TLS兼容性
    虽然Heroku默认支持TLS 1.2,仍需确保端点SSL证书有效且被Apple信任:

    • 检查证书是否过期、是否包含完整证书链。
    • 避免使用自签名证书,Heroku默认证书通常符合要求,若用自定义证书需确认配置正确。
  • 查看Apple通知发送状态
    在App Store Connect的「App信息」-「内购项目」-「通知」页面,部分地区或版本支持查看通知历史记录,可确认Apple是否尝试发送过通知及失败原因。

内容的提问来源于stack exchange,提问作者Mohamed Emad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:38:13