Exemplo n.º 1
0
        /// <summary>
        /// Creates a new order
        /// </summary>
        /// <param name="merchantOrderId">The unique id of the order at the merchant systems</param>
        /// <param name="email">The email used for contact in the order</param>
        /// <param name="customer">The customer information</param>
        /// <param name="paymentDetails">The payment details</param>
        /// <param name="billingAddress">Billing address</param>
        /// <param name="shippingAddress">Shipping address</param>
        /// <param name="lineItems">An array of all products in the order</param>
        /// <param name="shippingLines">An array of all shipping details for the order</param>
        /// <param name="gateway">The payment gateway that was used</param>
        /// <param name="customerBrowserIp">The customer browser ip that was used for the order</param>
        /// <param name="currency">A three letter code (ISO 4217) for the currency used for the payment</param>
        /// <param name="totalPrice">The sum of all the prices of all the items in the order, taxes and discounts included</param>
        /// <param name="createdAt">The date and time when the order was created</param>
        /// <param name="updatedAt">The date and time when the order was last modified</param>
        /// <param name="discountCodes">An array of objects, each one containing information about an item in the order (optional)</param>
        /// <param name="totalDiscounts">The total amount of the discounts on the Order (optional)</param>
        /// <param name="cartToken">Unique identifier for a particular cart or session that is attached to a particular order. The same ID should be passed in the Beacon JS (optional)</param>
        /// <param name="totalPriceUsd">The price in USD (optional)</param>
        /// <param name="closedAt">The date and time when the order was closed. If the order was closed (optional)</param>
        /// <param name="financialStatus">The financial status of the order (could be paid/voided/refunded/partly_paid/etc.)</param>
        /// <param name="fulfillmentStatus">The fulfillment status of the order</param>
        /// <param name="source">The source of the order</param>
        /// <param name="noChargeDetails">No charge sums - including all payments made for this order in giftcards, cash, checks or other non chargebackable payment methods</param>
        /// <param name="ClientDetails">Technical information regarding the customer's browsing session</param>
        /// <param name="chargeFreePaymentDetails">Payment sums made using non-chargebackable methods and should be omitted from the Chargeback gurantee sum and Riskified fee</param>
        public Order(string merchantOrderId,
                     string email, 
                     Customer customer,
                     AddressInformation billingAddress, 
                     AddressInformation shippingAddress, 
                     LineItem[] lineItems,
                     ShippingLine[] shippingLines,
                     string gateway, 
                     string customerBrowserIp, 
                     string currency, 
                     double totalPrice, 
                     DateTimeOffset createdAt,
                     DateTimeOffset updatedAt,
                     IPaymentDetails paymentDetails = null, 
                     DiscountCode[] discountCodes = null, 
                     double? totalDiscounts = null, 
                     string cartToken = null, 
                     double? totalPriceUsd = null, 
                     DateTime? closedAt = null,
                     string financialStatus = null,
                     string fulfillmentStatus = null,
                     string source = null, 
                     NoChargeDetails noChargeDetails = null,
                     string[] additionalEmails = null,
                     string vendorId = null,
                     string vendorName = null,
                     DecisionDetails decisionDetails = null,
                     ClientDetails clientDetails = null,
                     ChargeFreePaymentDetails chargeFreePaymentDetails = null,
                     string groupFounderOrderID = null) : base(merchantOrderId)
        {
            LineItems = lineItems;
            ShippingLines = shippingLines;
            BillingAddress = billingAddress;
            ShippingAddress = shippingAddress;
            Customer = customer;
            Email = email;
            CustomerBrowserIp = customerBrowserIp;
            Currency = currency;
            TotalPrice = totalPrice;
            Gateway = gateway;
            CreatedAt = createdAt;
            UpdatedAt = updatedAt;
            
            // optional fields
            PaymentDetails = paymentDetails;
            DiscountCodes = discountCodes;
            TotalPriceUsd = totalPriceUsd;
            TotalDiscounts = totalDiscounts;
            CartToken = cartToken;
            ClosedAt = closedAt;
            FinancialStatus = financialStatus;
            FulfillmentStatus = fulfillmentStatus;
            Source = source;
            NoChargeAmount = noChargeDetails;
            AdditionalEmails = additionalEmails;
            VendorId = vendorId;
            VendorName = vendorName;
            Decision = decisionDetails;
            ClientDetails = clientDetails;
            ChargeFreePaymentDetails = chargeFreePaymentDetails;

            // This field is added for gift card group purchase
            GroupFounderOrderID = groupFounderOrderID;
        }
        /// <summary>
        /// Generates a new order object
        /// Mind that some of the fields of the order (and it's sub-objects) are optional
        /// </summary>
        /// <param name="orderNum">The order number to put in the order object</param>
        /// <returns></returns>
        private static Order GenerateOrder(int orderNum)
        {
            var customerAddress = new BasicAddress(
                address1: "27 5th avenue",
                city: "Manhattan",
                country: "United States",
                countryCode: "US",
                phone: "5554321234",
                address2: "Appartment 5",
                zipCode: "54545"
                );

            // putting sample customer details
            var customer = new Customer(
                firstName: "John",
                lastName: "Doe",
                id: "405050606",
                ordersCount: 4,
                email: "*****@*****.**",
                verifiedEmail: true,
                createdAt: new DateTime(2013, 12, 8, 14, 12, 12, DateTimeKind.Local), // make sure to initialize DateTime with the correct timezone
                notes: "No additional info",
                address: customerAddress);

            // putting sample billing details
            var billing = new AddressInformation(
                firstName: "Ben",
                lastName: "Rolling",
                address1: "27 5th avenue",
                city: "Manhattan", 
                country: "United States",
                countryCode: "US",
                phone: "5554321234", 
                address2: "Appartment 5",
                zipCode: "54545",
                province: "New York",
                provinceCode: "NY",
                company: "IBM",
                fullName: "Ben Philip Rolling");

            var shipping = new AddressInformation(
                firstName: "Luke",
                lastName: "Rolling",
                address1: "4 Bermingham street", 
                city: "Cherry Hill",
                country: "United States",
                countryCode: "US", 
                phone: "55546665", 
                provinceCode: "NJ", 
                province: "New Jersey");

            var payments = new CreditCardPaymentDetails(
                avsResultCode: "Y",
                cvvResultCode: "n",
                creditCardBin: "124580", 
                creditCardCompany: "Visa",
                creditCardNumber: "XXXX-XXXX-XXXX-4242");

            var noChargeAmount = new NoChargeDetails(
                refundId: "123444",
                amount: 20.5,
                currency: "GBP",
                reason: "giftcard"
                );

            var lines = new[]
            {
                new ShippingLine(price: 22.22,title: "Mail"),
                new ShippingLine(price: 2,title: "Ship",code: "A22F")
            };

            var recipientSocial = new SocialDetails(
                                                    network: "Facebook",
                                                    publicUsername: "******",
                                                    accountUrl: "http://www.facebook.com/john.smith");

            var recipient = new Recipient(
                email: "*****@*****.**",
                phone: "96522444221",
                social: recipientSocial);


            var items = new[]
            {
                new LineItem(title: "Bag",price: 55.44,quantityPurchased: 1,productId: 48484,sku: "1272727",deliveredTo: DeliveredToType.StorePickup, delivered_at:new DateTime(2016, 12, 8, 14, 12, 12, DateTimeKind.Local)),
                new LineItem(title: "Monster", price: 22.3, quantityPurchased: 3, seller: new Seller(customer: customer,correspondence: 1, priceNegotiated: true, startingPrice: 120)),
                // Events Tickets Industry 
                new LineItem(title: "Concert", 
                             price: 123, 
                             quantityPurchased: 1, 
                             category: "Singers", 
                             subCategory: "Rock", 
                             eventName: "Bon Jovy", 
                             eventSectionName: "Section", 
                             eventCountry: "USA", 
                             eventCountryCode: "US",
                             latitude: 0,
                             longitude: 0),
                // Digital Goods (giftcard) industry
                new LineItem(title: "Concert", 
                            price: 123, 
                            quantityPurchased: 1, 
                            sender_name: "John", 
                            display_name: "JohnJohn", 
                            photo_uploaded: true, 
                            photo_url: "http://my_pic_url", 
                            greeting_photo_url: "http://my_greeting_pic_url", 
                            message: "Happy Birthday",
                            greeting_message: "Happy Birthday from John",
                            card_type: "regular",
                            card_sub_type: "birthday",
                            sender_email: "*****@*****.**",
                            recipient: recipient),
            };

            var discountCodes = new[] { new DiscountCode(moneyDiscountSum: 7, code: "1") };

            DecisionDetails decisionDetails = new DecisionDetails(ExternalStatusType.Approved, DateTime.Now); // make sure to initialize DateTime with the correct timezone

            // This is an example for an order with charge free sums (e.g. gift card payment)
            var chargeFreePayments = new ChargeFreePaymentDetails(
                gateway: "giftcard",
                amount: 45);

            // This is an example for client details section
            var clientDetails = new ClientDetails(
                accept_language: "en-CA",   
                user_agent: "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)");

            var order = new Order(
                merchantOrderId: orderNum.ToString(), 
                email: "*****@*****.**", 
                customer: customer, 
                paymentDetails: payments,
                billingAddress: billing,
                shippingAddress: shipping,
                lineItems: items,
                shippingLines: lines,
                gateway: "authorize_net",
                customerBrowserIp: "165.12.1.1",
                currency: "USD", 
                totalPrice: 100.60,
                createdAt: DateTime.Now, // make sure to initialize DateTime with the correct timezone
                updatedAt: DateTime.Now, // make sure to initialize DateTime with the correct timezone
                discountCodes: discountCodes,
                source: "web",
                noChargeDetails: noChargeAmount,
                decisionDetails: decisionDetails,
                vendorId: "2",
                vendorName: "domestic",
                additionalEmails: new [] {"*****@*****.**","*****@*****.**"},
                chargeFreePaymentDetails: chargeFreePayments,
                clientDetails: clientDetails,
                groupFounderOrderID: "2222"
                );

            return order;
        }