如何使用http请求获取paypal访问令牌?
我需要将我的移动应用程序与paypal集成。为此,我选择了RESTAPI。但我无法获得访问令牌!我使用Mozilla Firefox只是为了测试网络操作。这是我的请求如何使用http请求获取paypal访问令牌?,http,paypal,Http,Paypal,我需要将我的移动应用程序与paypal集成。为此,我选择了RESTAPI。但我无法获得访问令牌!我使用Mozilla Firefox只是为了测试网络操作。这是我的请求 https://api.sandbox.paypal.com/v1/oauth2/token 这里是标题 ost: api.sandbox.paypal.com User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:42.0) Gecko/20100101 Fi
https://api.sandbox.paypal.com/v1/oauth2/token
这里是标题
ost: api.sandbox.paypal.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:42.0) Gecko/20100101 Firefox/42.0
Accept: application/json
Accept-Language: en-US
Accept-Encoding: gzip, deflate
Cache-Control: max-age=0, no-cache
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Pragma: no-cache
Referer: https://www.mozilla.org/ru/firefox/42.0/whatsnew/?oldversion=41.0.2
Content-Length: 172
Origin: https://www.mozilla.org
Connection: keep-alive
这是一具带着params的尸体
username=AWFcJ...FsdE:EFCK..Dfr43d
grant_type=client_credentials
在用户名中,我从仪表板中输入了我的客户Id和密码
回应是
400 Bad request.
error:invalid_client
eror_description:Client credentials are missing
我做错了什么?请帮帮我你好,你的方法是对的 试试这个
public string clientId=<your client id>;
public string secret=<your secret>;
public string accessToken='';
public void accessToken()
{
string input=clientId+':'+secret;
Blob myBlob = Blob.valueof(input);
string paramvalue = EncodingUtil.base64Encode(myBlob);
Http http=new Http();
HttpRequest req=new HttpRequest();
req.setMethod('POST');
string endpoint='https://api.sandbox.paypal.com/v1/oauth2/token?grant_type=client_credentials';
req.setEndpoint(endpoint);
req.setHeader('Authorization','Basic '+paramvalue);
req.setHeader('Accept','application/json');
req.setHeader('content-type','application/x-www-form-urlencoded');
req.setHeader('Accept-Language','en_US');
req.setHeader('Cache-Control','no-cache');
req.setBody('grant_type=client_credentials');
HttpResponse res = new HttpResponse();
res = http.send(req);
if(res.getStatusCode()==200)
{
Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(res.getBody());
accessToken = (string)results.get('access_token');
system.debug(accessToken);
}
}
公共字符串clientId=;
公共字符串secret=;
公共字符串accessToken='';
public void accessToken()
{
字符串输入=clientId+':'+secret;
Blob myBlob=Blob.valueof(输入);
字符串paramvalue=EncodingUtil.base64Encode(myBlob);
Http=newhttp();
HttpRequest req=新的HttpRequest();
请求设置方法(“POST”);
字符串端点https://api.sandbox.paypal.com/v1/oauth2/token?grant_type=client_credentials';
请求setEndpoint(端点);
请求setHeader('Authorization'、'Basic'+参数值);
req.setHeader('Accept','application/json');
请求setHeader('content-type','application/x-www-form-urlencoded');
请求setHeader('Accept-Language','en_-US');
请求setHeader('Cache-Control','no-Cache');
请求setBody('grant_type=client_credentials');
HttpResponse res=新的HttpResponse();
res=http.send(req);
如果(res.getStatusCode()==200)
{
Map results=(Map)JSON.deserializeUntyped(res.getBody());
accessToken=(字符串)results.get('access_token');
系统调试(accessToken);
}
}
您好,您的方法是正确的
试试这个
public string clientId=<your client id>;
public string secret=<your secret>;
public string accessToken='';
public void accessToken()
{
string input=clientId+':'+secret;
Blob myBlob = Blob.valueof(input);
string paramvalue = EncodingUtil.base64Encode(myBlob);
Http http=new Http();
HttpRequest req=new HttpRequest();
req.setMethod('POST');
string endpoint='https://api.sandbox.paypal.com/v1/oauth2/token?grant_type=client_credentials';
req.setEndpoint(endpoint);
req.setHeader('Authorization','Basic '+paramvalue);
req.setHeader('Accept','application/json');
req.setHeader('content-type','application/x-www-form-urlencoded');
req.setHeader('Accept-Language','en_US');
req.setHeader('Cache-Control','no-cache');
req.setBody('grant_type=client_credentials');
HttpResponse res = new HttpResponse();
res = http.send(req);
if(res.getStatusCode()==200)
{
Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(res.getBody());
accessToken = (string)results.get('access_token');
system.debug(accessToken);
}
}
公共字符串clientId=;
公共字符串secret=;
公共字符串accessToken='';
public void accessToken()
{
字符串输入=clientId+':'+secret;
Blob myBlob=Blob.valueof(输入);
字符串paramvalue=EncodingUtil.base64Encode(myBlob);
Http=newhttp();
HttpRequest req=新的HttpRequest();
请求设置方法(“POST”);
字符串端点https://api.sandbox.paypal.com/v1/oauth2/token?grant_type=client_credentials';
请求setEndpoint(端点);
请求setHeader('Authorization'、'Basic'+参数值);
req.setHeader('Accept','application/json');
请求setHeader('content-type','application/x-www-form-urlencoded');
请求setHeader('Accept-Language','en_-US');
请求setHeader('Cache-Control','no-Cache');
请求setBody('grant_type=client_credentials');
HttpResponse res=新的HttpResponse();
res=http.send(req);
如果(res.getStatusCode()==200)
{
Map results=(Map)JSON.deserializeUntyped(res.getBody());
accessToken=(字符串)results.get('access_token');
系统调试(accessToken);
}
}
您可以试试这个,PayPalConfigDto
包含一些您需要提供的基本内容。请记住,这些值应存储在应用程序的应用程序设置文件中,这只是一个简单的示例:
public class PayPalConfigDto
{
public string BaseUrl { get; set; }
public string TokenUrl => $"{BaseUrl}/v1/oauth2/token";
public string ClientId { get; set; }
public string ClientSecret { get; set; }
}
PayPal API响应对象:
public class TokenDto
{
public string Scope { get; set; }
public string Access_token { get; set; }
public string Token_type { get; set; }
public string App_id { get; set; }
public string Expires_in { get; set; }
public string Nonce { get; set; }
}
PayPalContext类:
public class PayPalContext
{
private HttpClient _httpClient;
private PayPalConfigDto _payPalConfig;
public PayPalContext(HttpClient httpClient, PayPalConfigDto payPalConfig)
{
_httpClient = httpClient;
_payPalConfig = payPalConfig;
}
public virtual async Task<string> GetToken()
{
var url = $"{_payPalConfig.TokenUrl}?grant_type=client_credentials";
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(Encoding.ASCII.GetBytes($"{_payPalConfig.ClientId}:{_payPalConfig.ClientSecret}")));
var responseTask = _httpClient.PostAsync(url, null);
responseTask.Wait();
var response = responseTask.Result;
var result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
{
var errorMessage = response.ToString();
throw new Exception($"An issue occurred during the trial of getting PayPal token. {errorMessage}");
}
var tokenDto = JsonConvert.DeserializeObject<TokenDto>(result);
return tokenDto.Access_token;
}
}
要测试所有内容,您只需创建一个简单的测试类,例如:
//[Ignore]
public class PayPalContextTests
{
readonly PayPalConfigDto PayPalConfig = new PayPalConfigDto()
{
BaseUrl = "https://api.sandbox.paypal.com",
ClientId = "your ClientId",
ClientSecret = "your ClientSecret"
};
[Test]
public async Task Should_return_valid_token()
{
var httpClient = new HttpClient();
var context = new PayPalContext(httpClient, PayPalConfig);
var token = await context.GetToken();
Assert.IsFalse(string.IsNullOrEmpty(token));
}
}
我还认为,如果您想通过邮递员获得代币,这可能会有所帮助,这是一个提示,您可以在中找到。您可以试试这个
PayPalConfigDto
包含一些您需要提供的基本信息。请记住,这些值应存储在应用程序的应用程序设置文件中,这只是一个简单的示例:
public class PayPalConfigDto
{
public string BaseUrl { get; set; }
public string TokenUrl => $"{BaseUrl}/v1/oauth2/token";
public string ClientId { get; set; }
public string ClientSecret { get; set; }
}
PayPal API响应对象:
public class TokenDto
{
public string Scope { get; set; }
public string Access_token { get; set; }
public string Token_type { get; set; }
public string App_id { get; set; }
public string Expires_in { get; set; }
public string Nonce { get; set; }
}
PayPalContext类:
public class PayPalContext
{
private HttpClient _httpClient;
private PayPalConfigDto _payPalConfig;
public PayPalContext(HttpClient httpClient, PayPalConfigDto payPalConfig)
{
_httpClient = httpClient;
_payPalConfig = payPalConfig;
}
public virtual async Task<string> GetToken()
{
var url = $"{_payPalConfig.TokenUrl}?grant_type=client_credentials";
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(Encoding.ASCII.GetBytes($"{_payPalConfig.ClientId}:{_payPalConfig.ClientSecret}")));
var responseTask = _httpClient.PostAsync(url, null);
responseTask.Wait();
var response = responseTask.Result;
var result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
{
var errorMessage = response.ToString();
throw new Exception($"An issue occurred during the trial of getting PayPal token. {errorMessage}");
}
var tokenDto = JsonConvert.DeserializeObject<TokenDto>(result);
return tokenDto.Access_token;
}
}
要测试所有内容,您只需创建一个简单的测试类,例如:
//[Ignore]
public class PayPalContextTests
{
readonly PayPalConfigDto PayPalConfig = new PayPalConfigDto()
{
BaseUrl = "https://api.sandbox.paypal.com",
ClientId = "your ClientId",
ClientSecret = "your ClientSecret"
};
[Test]
public async Task Should_return_valid_token()
{
var httpClient = new HttpClient();
var context = new PayPalContext(httpClient, PayPalConfig);
var token = await context.GetToken();
Assert.IsFalse(string.IsNullOrEmpty(token));
}
}
我认为如果你想通过邮递员获得代币也会很有帮助,这是一个提示,你可以在中找到。我认为如果你稍微解释一下你的代码,那将非常棒。为此,我使用基本身份验证,在基本身份验证中,“输入”是客户id和密码的浓缩,在它们之间是Blob.valueof()base64Encode()将使用该值将其转换为一个值,该值通过键“Authorization”传递一个带有“Basic”关键字的键值,正如您在代码中看到的那样。请告诉我,如果你有任何问题,我认为如果你稍微解释一下你的代码会很棒。为此,我使用基本身份验证,在基本身份验证中,“输入”是客户端id和密码的浓缩,在它们之间,Blob.valueof()将字符串转换为Blob并编码util.base64Encode()将使用该值将其转换为一个值,该值通过键“Authorization”传递一个带有“Basic”关键字的键值,正如您在代码中看到的那样。如果你有任何问题,请告诉我