public async Task <string> GetRedirectURLToPayPal(double total, string currency) { try { return(Task.Run(async() => { HttpClient httpClient = GetPayPalHttpClient(); PayPalAccessToken accessToken = await GetPayPalAccessTokenAsync(httpClient); PayPalPaymentCreatedResponse createdResponse = await CreatePayPalPaymentAsync(httpClient, accessToken, total, currency); return createdResponse.links.First(x => x.rel == "approval_url").href; }).Result); } catch (Exception ex) { Debug.WriteLine(ex, "Failed to login to PayPal"); return(null); } }
public async Task <PayPalPaymentCreatedResponse> CreatePayPalPaymentAsync(HttpClient httpClient, PayPalAccessToken accessToken, double total, string currency) { HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "/v1/payments/payment"); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken.access_token); var payment = JObject.FromObject(new { intent = "sale", redirect_urls = new { return_url = configuration["PayPal:returnUrl"], cancel_url = configuration["PayPal:cancelUrl"] }, payer = new { payment_method = "PayPal" }, transactions = JArray.FromObject(new[] { new { amount = new { total = total, currency = currency } } }) }); request.Content = new StringContent(JsonConvert.SerializeObject(payment), Encoding.UTF8, "application/json"); HttpResponseMessage response = await httpClient.SendAsync(request); string content = await response.Content.ReadAsStringAsync(); PayPalPaymentCreatedResponse payPalPaymentCreated = JsonConvert.DeserializeObject <PayPalPaymentCreatedResponse>(content); return(payPalPaymentCreated); }