Example #1
0
        private async Task <PaymentResponse> CreatePayment(string amount = "100.00")
        {
            PaymentRequest paymentRequest = new PayPalPaymentRequest();

            paymentRequest.Amount      = new Amount(Currency.EUR, amount);
            paymentRequest.Description = "Description";
            paymentRequest.RedirectUrl = this.DefaultRedirectUrl;

            return(await this._paymentClient.CreatePaymentAsync(paymentRequest));
        }
        /// <inheritdoc />
        /// <summary>
        /// Reads the json.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <param name="objectType">Type of the object.</param>
        /// <param name="existingValue">The existing value.</param>
        /// <param name="serializer">The serializer.</param>
        /// <returns></returns>
        /// <exception cref="T:System.ArgumentException"></exception>
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            PaymentRequest target;
            var            token = JToken.Load(reader);

            switch (Enum.Parse(typeof(PaymentMethod), token["payment_method"].Value <string>()))
            {
            case PaymentMethod.iDEAL:
                target = new IdealPaymentRequest();
                break;

            case PaymentMethod.PayPal:
                target = new PayPalPaymentRequest();
                break;

            case PaymentMethod.AfterPay:
                target = new AfterPayPaymentRequest();
                break;

            case PaymentMethod.Creditcard:
                target = new CreditcardPaymentRequest();
                break;

            case PaymentMethod.Bancontact:
                target = new BancontactPaymentRequest();
                break;

            case PaymentMethod.WireTransfer:
                target = new WireTransferPaymentRequest();
                break;

            case PaymentMethod.SOFORT:
                target = new SofortPaymentRequest();
                break;

            case PaymentMethod.DirectDebit:
                target = new DirectDebitPaymentRequest();
                break;

            default:
                throw new ArgumentException();
            }

            serializer.Populate(token.CreateReader(), target);
            return(target);
        }
Example #3
0
        public void PayPalPaymentRequest()
        {
            var obj = new PayPalPaymentRequest
            {
                Amount   = 82,
                Currency = "Lorum_66",
                Details  = new PayPalDetailsRequest
                {
                    CallbackUrl  = "Lorum_117",
                    CancelledUrl = "Lorum_293",
                    Description  = "Lorum_605",
                    ExpiredUrl   = "Lorum_942",
                    FailedUrl    = "Lorum_274",
                    PurchaseId   = "Lorum_130",
                    SuccessUrl   = "Lorum_233"
                },
                DueDate = DateTime.Now
            };
            var deserialized = ConversionTest(obj);

            Assert.IsNotNull(deserialized);
            Assert.AreEqual(obj.Amount, deserialized.Amount);
            Assert.AreEqual(obj.Currency, deserialized.Currency);
            Assert.AreEqual(obj.Details.CallbackUrl, deserialized.Details.CallbackUrl);
            Assert.AreEqual(obj.Details.CancelledUrl, deserialized.Details.CancelledUrl);
            Assert.AreEqual(obj.Details.Description, deserialized.Details.Description);
            Assert.AreEqual(obj.Details.ExpiredUrl, deserialized.Details.ExpiredUrl);
            Assert.AreEqual(obj.Details.FailedUrl, deserialized.Details.FailedUrl);
            Assert.AreEqual(obj.Details.PurchaseId, deserialized.Details.PurchaseId);
            Assert.AreEqual(obj.Details.SuccessUrl, deserialized.Details.SuccessUrl);
            // Check only date and time up to seconds.. Json.NET does not save milliseconds.
            Assert.AreEqual(obj.DueDate.HasValue, deserialized.DueDate.HasValue);
            if (obj.DueDate.HasValue && deserialized.DueDate.HasValue)
            {
                Assert.AreEqual(
                    new DateTime(obj.DueDate.Value.Year, obj.DueDate.Value.Month, obj.DueDate.Value.Day, obj.DueDate.Value.Hour, obj.DueDate.Value.Minute, obj.DueDate.Value.Second),
                    new DateTime(deserialized.DueDate.Value.Year, deserialized.DueDate.Value.Month, deserialized.DueDate.Value.Day, deserialized.DueDate.Value.Hour, deserialized.DueDate.Value.Minute, deserialized.DueDate.Value.Second));
            }
        }
Example #4
0
        /// <summary>
        /// Tests whether it is possible or not to have multiple payments when there are digital goods.
        /// </summary>
        /// <remarks>
        /// This test will test all possibilities of
        /// setting new payments/items collections,
        /// setting/adding a specific payments/items collection items,
        /// and setting values,
        /// in any order of execution.
        /// </remarks>
        private static void DigitalGoodsTest()
        {
            string msg = "{0} - {1}";

            Action <int[], int, int> test = (int[] arrange5in5, int paymentChooser, int itemChooser) =>
            {
                // Creating objects.
                PayPalSetExpressCheckoutOperation ecop = new PayPalSetExpressCheckoutOperation
                {
                    PaymentRequests = new PayPalList <PayPalPaymentRequest>
                    {
                        new PayPalPaymentRequest {
                            Items = new PayPalList <PayPalPaymentRequestItem> {
                                new PayPalPaymentRequestItem(), new PayPalPaymentRequestItem()
                            }
                        },
                        new PayPalPaymentRequest {
                            Items = new PayPalList <PayPalPaymentRequestItem> {
                                new PayPalPaymentRequestItem(), new PayPalPaymentRequestItem()
                            }
                        },
                    }
                };

                PayPalList <PayPalPaymentRequest> listPayments = new PayPalList <PayPalPaymentRequest> {
                    new PayPalPaymentRequest {
                        Items = new PayPalList <PayPalPaymentRequestItem> {
                            new PayPalPaymentRequestItem(), new PayPalPaymentRequestItem()
                        }
                    },
                    new PayPalPaymentRequest {
                        Items = new PayPalList <PayPalPaymentRequestItem> {
                            new PayPalPaymentRequestItem(), new PayPalPaymentRequestItem()
                        }
                    }
                };

                PayPalPaymentRequest payment = new PayPalPaymentRequest {
                    Items = new PayPalList <PayPalPaymentRequestItem> {
                        new PayPalPaymentRequestItem(), new PayPalPaymentRequestItem()
                    }
                };

                PayPalList <PayPalPaymentRequestItem> listItems = new PayPalList <PayPalPaymentRequestItem> {
                    new PayPalPaymentRequestItem(), new PayPalPaymentRequestItem()
                };

                PayPalPaymentRequestItem item = new PayPalPaymentRequestItem();

                // Creating delegates.
                Action listPaymentsSet = () => ecop.PaymentRequests = listPayments;

                Action paymentSet = () => listPayments[0] = payment;
                Action paymentAdd = () => listPayments.Add(payment);

                Action listItemsSet = () => payment.Items = listItems;

                Action itemAdd = () => listItems.Add(item);
                Action itemSet = () => listItems[0] = item;

                Action digitalSet = () => item.Category = ItemCategory.Digital;

                // Selecting delegates.
                Action paymentAction = (new[] { paymentSet, paymentAdd })[paymentChooser];
                Action itemAction    = (new[] { itemSet, itemAdd })[itemChooser];

                Action[] all = (new[] { listPaymentsSet, paymentAction, listItemsSet, itemAction, digitalSet });

                Action[] sequence = (new[] { all[arrange5in5[0]], all[arrange5in5[1]], all[arrange5in5[2]], all[arrange5in5[3]], all[arrange5in5[4]] });

                // Executing test.
                bool      ok = true;
                Exception ex = null;
                try
                {
                    foreach (var action in sequence)
                    {
                        action();
                    }

                    ok = false;
                }
                catch (Exception ex1)
                {
                    ex = ex1;
                }
                finally
                {
                    Console.WriteLine(msg, ok ? "SUCCESS" : "FAILED", ex != null ? ex.Message : null);
                }
            };

            // arrangements of 5 elements in 5 slots.
            int index        = 0;
            var arranges5in5 = new int[5 * 4 * 3 * 2 * 1][];

            for (int itA = 0; itA < 5; itA++)
            {
                for (int itB = 0; itB < 4; itB++)
                {
                    for (int itC = 0; itC < 3; itC++)
                    {
                        for (int itD = 0; itD < 2; itD++)
                        {
                            for (int itE = 0; itE < 1; itE++)
                            {
                                List <int> list = new List <int>(new[] { 0, 1, 2, 3, 4 });
                                arranges5in5[index++] = new[] {
                                    list.Slice(itA),
                                    list.Slice(itB),
                                    list.Slice(itC),
                                    list.Slice(itD),
                                    list.Slice(itE),
                                };
                            }
                        }
                    }
                }
            }

            // Trying every variation: (5*4*3*2) * 2 * 2 = 480 alternatives.
            foreach (var arrg in arranges5in5)
            {
                for (int it1 = 0; it1 < 2; it1++)
                {
                    for (int it2 = 0; it2 < 2; it2++)
                    {
                        test(arrg, it1, it2);
                    }
                }
            }
        }