您可以试试这个,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;
}
}
GetToken 方法需要对凭据进行编码并基于this answer
你可以很容易地做到这一点
new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(Encoding.ASCII.GetBytes($"{_payPalConfig.ClientId}:{_payPalConfig.ClientSecret}")));
要测试所有内容,您只需创建一个简单的测试类,例如:
//[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));
}
}
如果您想通过 Postman 获取令牌,我还认为 this 可能会有所帮助,这是您可以在 the main PayPal documentation 中找到的内容的提示