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 ExecutePayment(PayPalOAuthTokenData token, string payPalPaymentId, string payer_id, bool useSandbox) { if (string.IsNullOrEmpty(token.access_token)) { throw new ArgumentNullException("token.access_token"); } if (string.IsNullOrEmpty(payPalPaymentId)) { throw new ArgumentNullException("payPalPaymentId"); } if (string.IsNullOrEmpty(payer_id)) { throw new ArgumentNullException("payer_id"); } PayPalPaymentExecuteData executeData = new PayPalPaymentExecuteData(payer_id); string executeJson = JsonConvert.SerializeObject(executeData); StringContent postContent = new StringContent(executeJson, 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/" + payPalPaymentId + "/execute", UriKind.Relative); HttpResponseMessage response = new HttpResponseMessage(); 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 Execute Payment API post: " + ex.Message + ". See inner exception for details."; throw new Exceptions.PayPalExceptionExecutePaymentFailed(useSandbox, message, null, ex); } PayPalPaymentData executePaymentResponse; if (response.IsSuccessStatusCode) { //get PayPal data string json = response.Content.ReadAsStringAsync().Result; try { executePaymentResponse = JsonConvert.DeserializeObject <PayPalPaymentData>(json); } catch (Exception ex) { string message = "Error reading PayPal Execute Payment API result! \nError code: " + response.StatusCode + " " + response.ReasonPhrase + "\n" + response.ToString() + " see inner exception for details.\nJSON Response Data: " + json; throw new Exceptions.PayPalExceptionExecutePaymentFailed(useSandbox, message, response, ex); } executePaymentResponse.Json = json; } else { string message = "PayPal Execute Payment API call failed! \nError code: " + response.StatusCode + " " + response.ReasonPhrase + "\n" + response.ToString(); throw new Exceptions.PayPalExceptionExecutePaymentFailed(useSandbox, message, response, null); } return(executePaymentResponse); }
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); }
public PayPalPaymentData TestExecutePayment(PayPalOAuthTokenData token, string payPalPaymentId, string payer_id, bool useSandbox) { return(ExecutePayment(token, payPalPaymentId, payer_id, useSandbox)); }
protected PayPalOAuthTokenData GetOAuthToken(string client_Id, string client_Secret, bool useSandbox) { string authUserName = client_Id; string authPassword = client_Secret; if (string.IsNullOrWhiteSpace(client_Id)) { throw new ArgumentNullException("client_Id"); } if (string.IsNullOrWhiteSpace(client_Secret)) { throw new ArgumentNullException("client_secret"); } 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/oauth2/token", UriKind.Relative); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( "Basic", Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", authUserName, authPassword)))); httpClient.DefaultRequestHeaders.Accept.Clear(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml")); List <KeyValuePair <string, string> > postValues = new List <KeyValuePair <string, string> >(); postValues.Add(new KeyValuePair <string, string>("grant_type", "client_credentials")); HttpContent postContent = new FormUrlEncodedContent(postValues); HttpResponseMessage response; try { response = httpClient.PostAsync(requestUri, postContent).Result; } catch (Exception ex) { string message = "HTTP Client returned an error during PayPal OAuth API post: " + ex.Message + ". See inner exception for details."; throw new Exceptions.PayPalExceptionOAuthFailed(useSandbox, message, null, ex); } PayPalOAuthTokenData oauthToken = new PayPalOAuthTokenData(); if (response.IsSuccessStatusCode) { //get token data string json = response.Content.ReadAsStringAsync().Result; oauthToken = JsonConvert.DeserializeObject <PayPalOAuthTokenData>(json); oauthToken.Json = json; } else { string message = "PayPal OAuth Token API call failed! \nError code: " + response.StatusCode + " " + response.ReasonPhrase + "\n" + response.ToString(); throw new Exceptions.PayPalExceptionOAuthFailed(useSandbox, message, response, null); } return(oauthToken); }