Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }