コード例 #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);
        }
コード例 #2
0
        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);
        }
コード例 #3
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);
        }
コード例 #4
0
 public PayPalPaymentData TestExecutePayment(PayPalOAuthTokenData token, string payPalPaymentId, string payer_id, bool useSandbox)
 {
     return(ExecutePayment(token, payPalPaymentId, payer_id, useSandbox));
 }
コード例 #5
0
        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);
        }