Paypal REST api call works from cURL but not from C# code

前端 未结 4 1502
旧时难觅i
旧时难觅i 2021-02-09 01:12

I\'m trying to call Paypal api from my code. I set up the sandbox account and it works when I use curl but my code isn\'t working the same way, returning 401 Unauthorized instea

4条回答
  •  走了就别回头了
    2021-02-09 02:06

    Hoping the following code help to anyone who is still looking for a good piece of cake to get connected to PayPal.

    As many people, I've been investing a lot of time trying to get my PayPal token access without success, until I found the following:

    public class PayPalClient
    {
        public async Task RequestPayPalToken() 
        {
            // Discussion about SSL secure channel
            // http://stackoverflow.com/questions/32994464/could-not-create-ssl-tls-secure-channel-despite-setting-servercertificatevalida
            ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
    
            try
            {
                // ClientId of your Paypal app API
                string APIClientId = "**_[your_API_Client_Id]_**";
    
                // secret key of you Paypal app API
                string APISecret = "**_[your_API_secret]_**";
    
                using (var client = new System.Net.Http.HttpClient())
                {
                    var byteArray = Encoding.UTF8.GetBytes(APIClientId + ":" + APISecret);
                    client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
    
                    var url = new Uri("https://api.sandbox.paypal.com/v1/oauth2/token", UriKind.Absolute);
    
                    client.DefaultRequestHeaders.IfModifiedSince = DateTime.UtcNow;
    
                    var requestParams = new List>
                                {
                                    new KeyValuePair("grant_type", "client_credentials")
                                };
    
                    var content = new FormUrlEncodedContent(requestParams);
                    var webresponse = await client.PostAsync(url, content);
                    var jsonString = await webresponse.Content.ReadAsStringAsync();
    
                    // response will deserialized using Jsonconver
                    var payPalTokenModel = JsonConvert.DeserializeObject(jsonString);
                }
            }
            catch (System.Exception ex)
            {
                //TODO: Log connection error
            }
        }
    }
    
    public class PayPalTokenModel 
    {
        public string scope { get; set; }
        public string nonce { get; set; }
        public string access_token { get; set; }
        public string token_type { get; set; }
        public string app_id { get; set; }
        public int expires_in { get; set; }
    }
    

    This code works pretty well for me, hoping for you too. The credits belong to Patel Harshal who posted his solution here.

提交回复
热议问题