2

I keep getting 500 errors when trying to refresh my Spotify token.

error: {"error":"server_error"}

request:

POST https://accounts.spotify.com/api/token HTTP/1.1 Authorization: Basic ZWM.....WI= Host: accounts.spotify.com Content-Length: 170 Expect: 100-continue Connection: Keep-Alive

grant_type=refresh_token&refresh_token=AQA9.....p5qc

code:

string request = "https://accounts.spotify.com/api/token";
        StringBuilder sbOutput = new StringBuilder();
        StringBuilder sbBody = new StringBuilder();
        sbBody.Append("grant_type=refresh_token");
        sbBody.Append("&refresh_token=" + spotifyToken.RefreshToken);
        //sbBody.Append("&client_id=" + "ec41.....19");
        //sbBody.Append("&client_secret=" + "9b...5b");

        string clientIdAndSecret = "ec....19:9ba.....e5b";

        var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(clientIdAndSecret);
        string clientIdAndSecretBase64 = System.Convert.ToBase64String(plainTextBytes);

        Dictionary<string, string> headers = new Dictionary<string, string>();
        headers["Authorization"] = "Basic " + clientIdAndSecretBase64;

        response = SendRequest("POST", request, sbBody.ToString(), headers, ref sbOutput);

SendRequest method:

if (!string.IsNullOrEmpty(url))
        {
            using (var client = new HttpClient())
            {
                //Create request URI
                Uri requestURI = new Uri(url);

                //Create Stream from the content
                Stream bodyStream = new MemoryStream(Encoding.UTF8.GetBytes(body ?? ""));
                HttpContent requestContent = new StreamContent(bodyStream);

                //Headers
                foreach (KeyValuePair<string, string> pair in headers)
                {
                    client.DefaultRequestHeaders.Add(pair.Key, pair.Value);
                }

                Task<HttpResponseMessage> responseTask;

                switch (httpWebRequestMethod.ToUpper())
                {
                    case "POST":
                        responseTask = client.PostAsync(requestURI, requestContent);
                        break;
                    case "GET":
                        responseTask = client.GetAsync(requestURI);
                        break;
                    case "DELETE":
                        responseTask = client.DeleteAsync(requestURI);
                        break;
                    case "PUT":
                        responseTask = client.PutAsync(requestURI, requestContent);
                        break;
                    default:
                        return HttpStatusCode.Unused;
                }

                //Lets wait
                responseTask.Wait();

                if (responseTask.IsCompleted)
                {
                    HttpResponseMessage response = responseTask.Result;

                    string resultBody = response.Content.ReadAsStringAsync().Result;

                    sbOutput.Append(resultBody);

                    return response.StatusCode;
                }
            }
        }

        return HttpStatusCode.Unused;
    }

any help would be much appreciated as I am ready to bash my head into a wall!

Thanks :)

0 Answers0