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

C# ASP.NET Core中安卓订阅确认报404错误,求服务器端token确认方案

安卓订阅Token确认404问题排查及服务器端实现

404错误的核心原因

  • 域名拼写错误:你的请求URL使用了www.googleapis.com,而安卓订阅确认的正确域名是androidpublisher.googleapis.com,这是引发404的直接原因。
  • 参数不匹配:确认packageName、subscriptionId、purchaseToken与Google Play后台的配置完全一致,包括大小写、拼写,避免多余字符。
  • 请求体缺失:订阅确认的POST请求必须携带请求体{"acknowledgementState": 1},缺少会导致请求无效。
  • 权限不足:用于认证的Access Token必须拥有https://www.googleapis.com/auth/androidpublisher权限,且对应的服务账号需在Google Play后台被授予开发者/所有者权限。

服务器端确认Token的C# ASP.NET Core实现步骤

1. 准备依赖与认证配置

  • 安装NuGet包:Google.Apis.Auth、System.Net.Http.Json
  • 在Google Cloud控制台创建服务账号,下载密钥JSON文件,同时在Google Play开发者后台将该服务账号添加为管理员。

2. 实现确认逻辑

using Google.Apis.Auth.OAuth2;
using System.Net.Http.Json;
using System.Net.Http.Headers;

public class AndroidSubscriptionService
{
    private readonly HttpClient _httpClient;

    public AndroidSubscriptionService(HttpClient httpClient)
    {
        _httpClient = httpClient;
    }

    public async Task<bool> AcknowledgeSubscription(string packageName, string subscriptionId, string purchaseToken)
    {
        // 加载服务账号密钥文件(替换为你的密钥路径)
        var serviceAccountKeyPath = "wwwroot/service-account-key.json";
        var credential = GoogleCredential.FromFile(serviceAccountKeyPath)
            .CreateScoped("https://www.googleapis.com/auth/androidpublisher");

        // 获取认证令牌
        var accessToken = await credential.UnderlyingCredential.GetAccessTokenForRequestAsync();

        // 构造正确的确认端点URL
        var requestUrl = $"https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{purchaseToken}:acknowledge";

        // 设置认证请求头
        _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

        // 构造确认请求体
        var requestBody = new { acknowledgementState = 1 };

        // 发送POST请求
        var response = await _httpClient.PostAsJsonAsync(requestUrl, requestBody);

        if (response.IsSuccessStatusCode)
        {
            return true;
        }
        else
        {
            // 读取错误详情用于排查(可添加日志记录)
            var errorDetails = await response.Content.ReadAsStringAsync();
            return false;
        }
    }
}

3. 关键注意事项

  • 域名修正:必须使用androidpublisher.googleapis.com作为端点域名,替换你之前的www.googleapis.com。
  • 服务账号权限:确保服务账号在Google Play后台拥有足够权限,否则会返回403权限错误,需提前配置。
  • 测试环境验证:测试订阅需使用许可测试账号,且订阅产品需已发布(或处于测试状态)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:12:41