PAYATHON 2026

Unity3d Web App 调用 Facebook Sdk payments 出现 API Error Code:

支付阿杰

结论

API Error Code: 1383008 通常不表示 og:product 标签解析失败,而是 Facebook 创建支付订单时,没有从应用获得有效响应。先检查应用后台配置的 Payments 回调地址及服务器响应,再确认传给 FB.Canvas.Pay 的商品 URL 是完整且可公开访问的 HTTPS 地址。

C# 中的 callback 只负责支付弹窗返回 Unity 后的客户端回调,不能代替 Facebook Payments 要求的服务端回调。

重点检查项

1. 检查 Payments 服务端回调

在 Facebook 应用的支付配置中逐项确认:

  • Payments callback URL 已正确填写。
  • URL 可以从公网访问,不是 localhost、内网地址或只有开发者才能打开的页面。
  • HTTPS 证书有效,证书链完整。
  • 请求不会被登录验证、Cookie 检查、IP 白名单或 CSRF 防护拦截。
  • 服务端可以正确处理 Facebook 发来的支付请求。
  • 回调能及时返回符合对应 Payments API 规范的内容和 HTTP 200。
  • 服务端没有出现 404、500、超时或重定向循环。

排查时应直接查看服务器访问日志。如果点击购买按钮后,Facebook 请求了回调地址,却收到异常响应,问题基本就在服务端配置。

不同时期的 Facebook Payments API 对回调请求和返回内容有不同要求。请以项目实际使用的 Facebook Unity SDK 及对应的 Graph API 文档为准,不要套用旧版教程中的回调格式。

2. 使用完整的商品 URL

示例中的:

product: "my_url/products/coin.html"

需要替换为完整的绝对地址,例如:

https://game.example.com/products/coin.html

商品页面应满足以下条件:

  • 无需登录即可访问。
  • 返回 HTTP 200。
  • 不依赖浏览器本地 Cookie。
  • 没有设备或地区限制。
  • Facebook 服务器可以抓取。
  • og:type、价格、币种、标题和图片等商品信息有效。
  • 最终 URL 使用的域名与应用配置中允许的域名一致。

即使 Open Graph 调试工具可以识别该页面,也要检查实际支付请求期间是否出现重定向、偶发超时或访问控制。

Unity 调用示例

public void OnCoinsClicked()
{
    const string productUrl =
        "https://game.example.com/products/coin.html";

    FB.Canvas.Pay(
        product: productUrl,
        action: "purchaseitem",
        quantity: 1,
        testCurrency: "EUR",
        callback: response =>
        {
            if (response == null)
            {
                FbDebug.Log("Payment returned no response.");
                return;
            }

            FbDebug.Log("Payment response: " + response.Text);
        }
    );

    FbDebug.Log("OnCoinsClicked invoked.");
}

action 必须准确写成:

purchaseitem

不要修改大小写,也不要加入空格。testCurrency 只用于测试流程,无法解决服务端回调或商品页面的配置问题。

建议的排查顺序

  1. 在浏览器无痕窗口中打开商品 URL,确认页面无需登录,并返回 200。
  2. 使用 curl -I 或服务器监控检查是否存在 301/302 循环、403、404 或 500。
  3. 点击购买按钮,同时查看 Payments 回调服务器的访问日志和错误日志。
  4. 核对 Facebook 应用后台的支付回调地址、应用域名和 Canvas URL。
  5. 确认测试账号已设置为该应用的 payments tester,并且可以访问 sandbox 应用。
  6. 清除 Open Graph 缓存,然后重新抓取商品页面。
  7. 记录 Unity 回调中完整的 response.Text,不要只看弹窗里的通用错误信息。
  8. 如果使用的是较旧版本的 Facebook Unity SDK,检查它支持的 Graph API 和 Payments 接口。旧 SDK 可能无法正确调用当前接口。

注意事项

  • 不要只在客户端发放 coins。订单完成后,服务端应先验证支付状态和订单标识,再将虚拟货币写入玩家账户。
  • 客户端弹窗关闭或返回成功,不代表支付已经完成最终结算。
  • 同一订单或回调可能会被重复投递,因此发货逻辑需要具备幂等性。
  • 如果回调日志中完全没有 Facebook 请求,应重点检查回调 URL 是否保存到了正确的应用、当前使用的 App ID 是否一致,以及 sandbox 环境配置是否正确。
  • 如果商品页面和回调服务都正常,但错误仍然存在,需要结合 Unity SDK 版本、Graph API 版本和 Facebook 后台支付配置继续判断。仅凭 1383008,无法认定 Unity 客户端代码中的某个参数有误。

备注:内容仅供参考。