如何在MVC中从PayPal获取访问令牌

问题描述 投票:0回答:3

我正在尝试从 PayPal 获取访问令牌。

我已将其设置为 PayPal 内的应用程序,我可以看到我的客户 ID 和密码

我假设我不想在 javascript 前端暴露我的秘密,所以我尝试从 C# 获取访问代码,将令牌传递到前端,以便我可以进行 AJAX posts/gets。

然而,总是未经授权就返回

这是我的努力

var url = "https://api.paypal.com/v1/oauth2/token";

var clientId = "myClientId";
var pwrd = "mySecret";

var client = new WebClient();
client.Credentials = new NetworkCredential(clientId, pwrd);
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
client.Headers.Add("Accept: application/json");
var result = "";
using (var httpClient = new HttpClient())
{
    var response = await httpClient.PostAsync(url, null);
    result = response.StatusCode.ToString();
}

return View(model: result);
   

我不明白为什么当我从实时应用程序运行它时,它失败了

编辑

我更换了

using (var httpClient = new HttpClient())
{
    var response = await httpClient.PostAsync(url, null);
    result = response.StatusCode.ToString();
}

var clientId = "myClientId";
var seceret = "mySecret";

var client = new HttpClient();

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
    "Basic", Convert.ToBase64String(
        System.Text.ASCIIEncoding.ASCII.GetBytes(
           $"{clientId}:{seceret}")));

 var dict = new Dictionary<string, string>();
 dict.Add("Content-Type", "application/x-www-form-urlencoded");

 var req = new HttpRequestMessage(HttpMethod.Post, url) { Content = new FormUrlEncodedContent(dict) };
 var response = await client.SendAsync(req);

同样的问题仍然存在。我收到了 401

c# paypal
3个回答
2
投票

它永远不会授权,因为 HttpClient 变量对您的凭据一无所知。 您在 WebClient 中初始化了它,但您没有使用它。


1
投票

为了详细说明评论和其他答案,这里创建一个名为

client

的变量
var client = new WebClient();
client.Credentials = new NetworkCredential(clientId, pwrd);
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
client.Headers.Add("Accept: application/json");

在接下来的代码中,您使用该 client 变量“什么也不做”。上面的内容完全被忽略,与此无关:

using (var httpClient = new HttpClient())
{
    var response = await httpClient.PostAsync(url, null);
    result = response.StatusCode.ToString();
}

return View(model: result);

因此,请利用您创建的 
client

对象 - 可能使用

UploadValues
或类似对象。
    


0
投票

var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Post, $"{baseUrl}v1/oauth2/token"); request.Headers.Add("Authorization", $"Basic {accessToken}"); var collection = new List<KeyValuePair<string, string>>(); collection.Add(new("grant_type", "client_credentials")); collection.Add(new("ignoreCache", "true")); collection.Add(new("return_authn_schemes", "true")); collection.Add(new("return_client_metadata", "true")); collection.Add(new("return_unconsented_scopes", "true")); var content = new FormUrlEncodedContent(collection); request.Content = content; var response = await client.SendAsync(request); response.EnsureSuccessStatusCode();

© www.soinside.com 2019 - 2024. All rights reserved.