Пример #1
0
        /// <summary>
        /// Callback which is invoked from the Android plugin in response to a call to
        /// </summary>
        /// <see cref="CanCheckout(PaymentSettings, CanCheckoutWithNativePayCallback)"/>.
        /// <param name="serializedMessage">
        /// A <code>bool</code> represented as string indicating whether native checkout
        /// is supported on this device or not.
        /// </param>
        public void OnCanCheckoutWithAndroidPayResult(string serializedMessage)
        {
            var message = NativeMessage.CreateFromJSON(serializedMessage);

            PendingCanCheckoutWithNativePayCallback(bool.Parse(message.Content));
            PendingCanCheckoutWithNativePayCallback = null;
        }
Пример #2
0
        /// <summary>
        /// Callback which is invoked when the user confirms the checkout after
        /// reviewing the confirmation screen.
        /// </summary>
        /// <param name="serializedMessage">
        /// A <see cref="ShippingMethod"> object represented as a JSON string
        /// containing the selected shipping method.
        /// </param>
        public void OnConfirmCheckout(string serializedMessage)
        {
            var checkout = CartState.CurrentCheckout;
            var message  = NativeMessage.CreateFromJSON(serializedMessage);
            var amount   = checkout.totalPrice();
            var payment  = new NativePayment(message.Content);
            var tokenizedPaymentInput = new TokenizedPaymentInput(
                amount: amount,
                billingAddress: payment.BillingAddress,
                idempotencyKey: payment.TransactionIdentifier,
                paymentData: payment.PaymentData,
                identifier: payment.Identifier,
                type: "android_pay"
                );

            CartState.SetEmailAddress(payment.Email, (ShopifyError error) => {
                if (error == null)
                {
                    PerformCheckout(tokenizedPaymentInput, message);
                }
                else
                {
                    RespondError(message, error);
                    OnFailure(error);
                }
            });
        }
Пример #3
0
        public void FetchApplePayCheckoutStatusForToken(string serializedMessage)
        {
            var checkout = CartState.CurrentCheckout;
            var message  = NativeMessage.CreateFromJSON(serializedMessage);
            var amount   = checkout.totalPrice();
            var payment  = new NativePayment(message.Content);
            var tokenizedPaymentInput = new TokenizedPaymentInput(amount: amount, billingAddress: payment.BillingAddress, idempotencyKey: payment.TransactionIdentifier, paymentData: payment.PaymentData, type: "apple_pay");

            Action performCheckout = () => {
                CheckoutWithTokenizedPayment(tokenizedPaymentInput, checkout, (ApplePayEventResponse errorResponse) => {
                    if (errorResponse == null)
                    {
                        message.Respond((new ApplePayEventResponse(ApplePayAuthorizationStatus.Success)).ToJsonString());
                    }
                    else
                    {
                        message.Respond(errorResponse.ToJsonString());
                    }
                });
            };

            SetFinalCheckoutFieldsForPayment(payment, checkout, (ApplePayEventResponse errorResponse) => {
                if (errorResponse == null)
                {
                    performCheckout();
                }
                else
                {
                    message.Respond(errorResponse.ToJsonString());
                }
            });
        }
Пример #4
0
        /// <summary>
        /// Callback which is invoked when a shipping method is selected for the current
        /// checkout.
        /// </summary>
        /// <param name="serializedMessage">
        /// A <see cref="ShippingMethod"> object represented as a JSON string
        /// containing the selected shipping method.
        /// </param>
        public void OnUpdateShippingLine(string serializedMessage)
        {
            var message           = NativeMessage.CreateFromJSON(serializedMessage);
            var contentDictionary = (Dictionary <string, object>)Json.Deserialize(message.Content);
            var shippingMethod    = ShippingMethod.CreateFromJson(contentDictionary);

            UpdateShippingLine(shippingMethod, message);
        }
Пример #5
0
        /// <summary>
        /// Callback which is invoked when an error occurs on the Android plugin side.
        /// </summary>
        /// <param name="serializedMessage">
        /// A <see cref="NativeMessage"> object that contains an error message
        /// as its content.
        /// </param>
        public void OnError(string serializedMessage)
        {
            var message = NativeMessage.CreateFromJSON(serializedMessage);

            OnFailure(new ShopifyError(
                          ShopifyError.ErrorType.NativePaymentProcessingError,
                          message.Content
                          ));
        }
Пример #6
0
        public void UpdateSummaryItemsForShippingIdentifier(string serializedMessage)
        {
            var message = NativeMessage.CreateFromJSON(serializedMessage);

            CartState.SetShippingLine(message.Content, (ShopifyError error) => {
                if (error == null)
                {
                    var summaryItems = GetSummaryItemsFromCheckout(CartState.CurrentCheckout);
                    message.Respond(new ApplePayEventResponse(ApplePayAuthorizationStatus.Success, summaryItems).ToJsonString());
                }
                else
                {
                    message.Respond(new ApplePayEventResponse(ApplePayAuthorizationStatus.Failure).ToJsonString());
                }
            });
        }
Пример #7
0
        public void UpdateSummaryItemsForShippingContact(string serializedMessage)
        {
            var message             = NativeMessage.CreateFromJSON(serializedMessage);
            var contentDictionary   = (Dictionary <string, object>)Json.Deserialize(message.Content);
            var mailingAddressInput = new MailingAddressInput(contentDictionary);

            CartState.SetShippingAddress(mailingAddressInput, (ShopifyError error) => {
                if (error == null)
                {
                    RespondToUpdateAddressSuccessForMessage(message);
                }
                else
                {
                    RespondToUpdateAddressErrorForMessage(message, error);
                }
            });
        }
Пример #8
0
        /// <summary>
        /// Callback which is invoked from the Android plugin when the shipping address
        /// becomes available on the Android Pay side. This method also gets called when the
        /// user explicitly changes their shipping address to a different one.
        /// </summary>
        /// <param name="serializedMessage">
        /// A <see cref="MailinAddressInput"> object represented as a JSON string
        /// containing the shipping address.
        /// </param>
        public void OnUpdateShippingAddress(string serializedMessage)
        {
            var message             = NativeMessage.CreateFromJSON(serializedMessage);
            var contentDictionary   = (Dictionary <string, object>)Json.Deserialize(message.Content);
            var mailingAddressInput = new MailingAddressInput(contentDictionary);

            CartState.SetShippingAddress(mailingAddressInput, (ShopifyError error) => {
                if (error == null)
                {
                    UpdateShippingLineWithDefault(message);
                }
                else
                {
                    RespondError(message, error);
                    OnFailure(error);
                }
            });
        }
Пример #9
0
        public void DidFinishCheckoutSession(string serializedMessage)
        {
            var message       = NativeMessage.CreateFromJSON(serializedMessage);
            var paymentStatus = (NativePaymentStatus)Enum.Parse(typeof(NativePaymentStatus), (string)message.Content);

            switch (paymentStatus)
            {
            case NativePaymentStatus.Success:
                OnSuccess();
                return;

            case NativePaymentStatus.Cancelled:
                OnCancelled();
                return;

            case NativePaymentStatus.Failed:
                var error = new ShopifyError(ShopifyError.ErrorType.NativePaymentProcessingError, "Unable to retrieve a payment from the user's payment provider. Fallback to web checkout.");
                OnFailure(error);
                return;
            }
        }