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
相关产品推荐
相关产品推荐

