public PayPalPaymentData TestCreateOneItemPayment(PayPalOAuthTokenData token, decimal total, string description, string return_url, string cancel_url, bool useSandbox) { if (string.IsNullOrEmpty(token.access_token)) { throw new ArgumentNullException("token.access_token"); } if (string.IsNullOrEmpty(return_url)) { throw new ArgumentNullException("return_url"); } if (string.IsNullOrEmpty(cancel_url)) { throw new ArgumentNullException("cancel_url"); } if (total < 0.01M) { throw new ArgumentOutOfRangeException("total", "total must be 1 cent or more; value invalid: " + total.ToString()); } PayPalPaymentData requestData = new PayPalPaymentData(); requestData.intent = "sale"; requestData.redirect_urls.return_url = return_url; requestData.redirect_urls.cancel_url = cancel_url; requestData.payer.payment_method = "paypal"; List <PayPalItemData> transactionItems = new List <PayPalItemData>(); transactionItems.Add(new PayPalItemData("1", description, total.ToString("N2"), "X12345")); List <PayPalTransactionData> transactions = new List <PayPalTransactionData>(); transactions.Add(new PayPalTransactionData(total, description, transactionItems.ToArray())); requestData.transactions = transactions.ToArray(); string requestJson = JsonConvert.SerializeObject(requestData, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore }); StringContent postContent = new StringContent(requestJson, Encoding.UTF8, "application/json"); HttpClient httpClient = new HttpClient(); httpClient.Timeout = new TimeSpan(0, 0, 30); Uri requestUri = null; if (useSandbox) { httpClient.BaseAddress = new Uri("https://api.sandbox.paypal.com/"); } else { httpClient.BaseAddress = new Uri("https://api.paypal.com/"); } requestUri = new Uri("v1/payments/payment", UriKind.Relative); httpClient.DefaultRequestHeaders.Clear(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml")); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.access_token); HttpResponseMessage response = httpClient.PostAsync(requestUri, postContent).Result; PayPalPaymentData paymentResponseData; if (response.IsSuccessStatusCode) { //get token data string json = response.Content.ReadAsStringAsync().Result; paymentResponseData = JsonConvert.DeserializeObject <PayPalPaymentData>(json); paymentResponseData.Json = json; } else { throw new ApplicationException("PayPal Create One Item Payment API call failed! \nError code: " + response.StatusCode + " " + response.ReasonPhrase + "\n" + response.ToString()); } return(paymentResponseData); }
protected PayPalPaymentData CreatePayPalPayment(PayPalOAuthTokenData token, decimal total, string description, PayPalItemData[] items, string return_url, string cancel_url, bool useSandbox) { if (string.IsNullOrEmpty(token.access_token)) { throw new ArgumentNullException("token.access_token"); } if (string.IsNullOrEmpty(return_url)) { throw new ArgumentNullException("return_url"); } if (string.IsNullOrEmpty(cancel_url)) { throw new ArgumentNullException("cancel_url"); } if (total < 0.01M) { throw new ArgumentOutOfRangeException("total", "total must be 1 cent or more; value invalid: " + total.ToString()); } PayPalPaymentData requestData = new PayPalPaymentData(); requestData.intent = "sale"; requestData.redirect_urls.return_url = return_url; requestData.redirect_urls.cancel_url = cancel_url; requestData.payer.payment_method = "paypal"; List <PayPalTransactionData> transactions = new List <PayPalTransactionData>(); transactions.Add(new PayPalTransactionData(total, description, items)); requestData.transactions = transactions.ToArray(); string requestJson = JsonConvert.SerializeObject(requestData, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore }); StringContent postContent = new StringContent(requestJson, Encoding.UTF8, "application/json"); HttpClient httpClient = new HttpClient(); httpClient.Timeout = new TimeSpan(0, 0, 30); Uri requestUri = null; if (useSandbox) { httpClient.BaseAddress = new Uri("https://api.sandbox.paypal.com/"); } else { httpClient.BaseAddress = new Uri("https://api.paypal.com/"); } requestUri = new Uri("v1/payments/payment", UriKind.Relative); HttpResponseMessage response; httpClient.DefaultRequestHeaders.Clear(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml")); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.access_token); try { response = httpClient.PostAsync(requestUri, postContent).Result; } catch (Exception ex) { string message = "HTTP Client returned an error during PayPal Create Payment API post: " + ex.Message + ". See inner exception for details."; throw new Exceptions.PayPalExceptionCreatePaymentFailed(useSandbox, message, null, ex); } PayPalPaymentData paymentResponseData; if (response.IsSuccessStatusCode) { //get PayPal data string json = response.Content.ReadAsStringAsync().Result; try { paymentResponseData = JsonConvert.DeserializeObject <PayPalPaymentData>(json); } catch (Exception ex) { string message = "Error reading PayPal Create Payment API result! \nError code: " + response.StatusCode + " " + response.ReasonPhrase + "\n" + response.ToString() + " see inner exception for details.\nJSON Response Data: " + json; throw new Exceptions.PayPalExceptionCreatePaymentFailed(useSandbox, message, response, ex); } paymentResponseData.Json = json; } else { string message = "PayPal Create Payment API call failed! \nError code: " + response.StatusCode + " " + response.ReasonPhrase + "\n" + response.ToString(); throw new Exceptions.PayPalExceptionCreatePaymentFailed(useSandbox, message, response, null); } return(paymentResponseData); }