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

调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:33:32