调用REST删除RevenueCat客户时返回400状态码,可能原因是什么?
RevenueCat删除沙盒订阅者返回400状态码的排查方向
我在用户删除账号时,调用RevenueCat API删除对应客户,Swift代码如下:
private func deleteRevenueCatAccount(forUserID: String) { let headers = ["accept": "application/json", "Authorization": "Bearer \(secretApiKey)"] let baseURL = "https://api.revenuecat.com/v1" let deleteEndpoint = "/subscribers/\(forUserID)" let urlString = baseURL + deleteEndpoint guard let url = URL(string: urlString) else { // Handle invalid URL error return } // Create the request let request = NSMutableURLRequest( url: url, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0 ) request.httpMethod = "DELETE" request.allHTTPHeaderFields = headers // Create the session let session = URLSession.shared // Send the request let task = session.dataTask(with: request as URLRequest) { (data, response, error) in if let error = error { // Handle error print("Error: \(error.localizedDescription)") return } // Check the response if let httpResponse = response as? HTTPURLResponse { if httpResponse.statusCode == 204 { // Customer deleted successfully print("Customer deleted successfully") } else { // Handle non-successful status code print("Error: \(httpResponse.statusCode)") } } //: HTTP RESPONSE } //: DATA TASK task.resume() } //: FUNC
但请求返回400状态码,已确认沙盒用户支持删除,请问可能的原因是什么?
可能的排查方向
- UserID格式或内容非法:检查传入的
forUserID是否包含空格、斜杠、中文等特殊字符,导致URL拼接后不符合规范。建议对UserID做URL编码后再拼接:guard let encodedUserID = forUserID.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) else { // 处理编码失败逻辑 return } let deleteEndpoint = "/subscribers/\(encodedUserID)" - API密钥错误或权限不足:确认
secretApiKey是RevenueCat的服务器端密钥(不是客户端API密钥),且该密钥拥有删除订阅者的权限。同时要确保密钥对应的项目已开启沙盒数据访问权限。 - 请求头缺失关键字段:默认API操作的是生产环境,删除沙盒用户必须在请求头中添加
X-RevenueCat-Environment: sandbox,明确指定环境;另外可以补充Content-Type: application/json头,部分场景下API会要求该字段。 - Authorization头格式错误:检查
Bearer后面是否有空格,格式必须严格是Bearer 你的密钥,漏写空格会导致身份验证失败。 - 目标UserID不存在:确认传入的UserID确实在RevenueCat沙盒环境中有对应记录——如果用户从未触发过内购操作,RevenueCat不会生成该用户的订阅者记录,删除不存在的用户会返回400。
- 请求超时或网络异常:虽然代码设置了10秒超时,但沙盒环境网络波动可能导致请求不完整,建议延长超时时间至15-20秒,或在失败后增加一次重试逻辑。
内容的提问来源于stack exchange,提问作者Iraklis Eleftheriadis
相关产品推荐
相关产品推荐

