public override Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary <string, object> state)
        {
            var buffer = parameter as byte[];

            if (buffer == null)
            {
                return(Task.CompletedTask);
            }

            using (var from = TLObjectSerializer.CreateReader(buffer.AsBuffer()))
            {
                var tuple = new TLTuple <TLMessage, TLPaymentsPaymentForm, TLPaymentRequestedInfo, TLPaymentsValidatedRequestedInfo, TLShippingOption>(from);

                Message     = tuple.Item1;
                Invoice     = tuple.Item1.Media as TLMessageMediaInvoice;
                PaymentForm = tuple.Item2;

                // TODO: real hint
                PasswordHint = Strings.Android.LoginPassword;

                if (_paymentForm.HasSavedCredentials && _paymentForm.SavedCredentials is TLPaymentSavedCredentialsCard savedCard)
                {
                    CredentialsTitle = savedCard.Title;
                }

                _info          = tuple.Item3;
                _requestedInfo = tuple.Item4;
                _shipping      = tuple.Item5;
            }

            return(Task.CompletedTask);
        }
示例#2
0
        public void ValidateRequestedInfoAsync(int msgId, TLPaymentRequestedInfo info, bool save, Action <TLPaymentsValidatedRequestedInfo> callback, Action <TLRPCError> faultCallback = null)
        {
            var obj = new TLPaymentsValidateRequestedInfo {
                IsSave = save, MsgId = msgId, Info = info
            };

            const string caption = "payments.validateRequestedInfo";

            SendInformativeMessage(caption, obj, callback, faultCallback);
        }
示例#3
0
        public override TLObject FromBytes(byte[] bytes, ref int position)
        {
            bytes.ThrowExceptionIfIncorrect(ref position, Signature);

            Flags = GetObject <TLInt>(bytes, ref position);
            MsgId = GetObject <TLInt>(bytes, ref position);
            Info  = GetObject <TLPaymentRequestedInfo>(bytes, ref position);

            return(this);
        }
示例#4
0
        public override Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary <string, object> state)
        {
            var buffer = parameter as byte[];

            if (buffer == null)
            {
                return(Task.CompletedTask);
            }

            using (var from = TLObjectSerializer.CreateReader(buffer.AsBuffer()))
            {
                var tuple = new TLTuple <TLMessage, TLPaymentsPaymentForm, TLPaymentRequestedInfo, TLPaymentsValidatedRequestedInfo, TLShippingOption>(from);

                Message     = tuple.Item1;
                Invoice     = tuple.Item1.Media as TLMessageMediaInvoice;
                PaymentForm = tuple.Item2;

                _info          = tuple.Item3;
                _requestedInfo = tuple.Item4;
                _shipping      = tuple.Item5;

                if (_paymentForm.HasNativeProvider && _paymentForm.HasNativeParams && _paymentForm.NativeProvider.Equals("stripe"))
                {
                    IsNativeUsed    = true;
                    SelectedCountry = null;

                    var json = JsonObject.Parse(_paymentForm.NativeParams.Data);

                    NeedCountry        = json.GetNamedBoolean("need_country", false);
                    NeedZip            = json.GetNamedBoolean("need_zip", false);
                    NeedCardholderName = json.GetNamedBoolean("need_cardholder_name", false);

                    _publishableKey = json.GetNamedString("publishable_key", string.Empty);
                }
                else
                {
                    IsNativeUsed = false;
                    RaisePropertyChanged("Navigate");
                }

                //var info = PaymentForm.HasSavedInfo ? PaymentForm.SavedInfo : new TLPaymentRequestedInfo();
                //if (info.ShippingAddress == null)
                //{
                //    info.ShippingAddress = new TLPostAddress();
                //}

                //Info = info;
                //SelectedCountry = null;
            }

            return(Task.CompletedTask);
        }
示例#5
0
 public override void DeserializeBody(BinaryReader br)
 {
     Flags = br.ReadInt32();
     HasSavedCredentials = (Flags & 2) != 0;
     if ((Flags & 1) != 0)
     {
         SavedInfo = (TLPaymentRequestedInfo)ObjectUtils.DeserializeObject(br);
     }
     else
     {
         SavedInfo = null;
     }
 }
示例#6
0
 public override void DeserializeBody(BinaryReader br)
 {
     flags = br.ReadInt32();
     has_saved_credentials = (flags & 2) != 0;
     if ((flags & 1) != 0)
     {
         saved_info = (TLPaymentRequestedInfo)ObjectUtils.DeserializeObject(br);
     }
     else
     {
         saved_info = null;
     }
 }
        public void ValidateRequestedInfoAsync(bool save, TLInt msgId, TLPaymentRequestedInfo info, Action <TLValidatedRequestedInfo> callback, Action <TLRPCError> faultCallback = null)
        {
            var obj = new TLValidateRequestedInfo
            {
                Flags = new TLInt(0),
                Save  = save,
                MsgId = msgId,
                Info  = info
            };

            const string caption = "payments.validateRequestedInfo";

            SendInformativeMessage <TLValidatedRequestedInfo>(caption, obj, callback.SafeInvoke, faultCallback);
        }
示例#8
0
        public override Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary <string, object> state)
        {
            var buffer = parameter as byte[];

            if (buffer != null)
            {
                using (var from = new TLBinaryReader(buffer))
                {
                    var tuple = new TLTuple <TLMessage, TLPaymentsPaymentForm, TLPaymentRequestedInfo, TLPaymentsValidatedRequestedInfo>(from);

                    Message       = tuple.Item1;
                    Invoice       = tuple.Item1.Media as TLMessageMediaInvoice;
                    PaymentForm   = tuple.Item2;
                    RequestedInfo = tuple.Item4;

                    _info = tuple.Item3;
                }
            }

            return(Task.CompletedTask);
        }
示例#9
0
 public static void NavigateToPaymentFormStep5(this INavigationService service, MessageViewModel message, PaymentForm paymentForm, TLPaymentRequestedInfo info, TLPaymentsValidatedRequestedInfo validatedInfo, TLShippingOption shipping, string title, string credentials, bool save)
 {
     service.Navigate(typeof(PaymentFormStep5Page), TLTuple.Create(message, paymentForm, info, validatedInfo, shipping, title ?? string.Empty, credentials ?? string.Empty, save));
 }
示例#10
0
 public static void NavigateToPaymentFormStep4(this INavigationService service, MessageViewModel message, PaymentForm paymentForm, TLPaymentRequestedInfo info, TLPaymentsValidatedRequestedInfo validatedInfo, TLShippingOption shipping)
 {
     service.Navigate(typeof(PaymentFormStep4Page), TLTuple.Create(message, paymentForm, info, validatedInfo, shipping));
 }
        public void Validate()
        {
            if (PaymentInfo == null)
            {
                return;
            }
            if (PaymentInfo.Message == null)
            {
                return;
            }
            if (PaymentInfo.Form == null)
            {
                return;
            }

            var info = new TLPaymentRequestedInfo
            {
                Flags = new TLInt(0)
            };

            if (PaymentInfo.Form.Invoice.NameRequested)
            {
                info.Name = new TLString(Name);
            }
            if (PaymentInfo.Form.Invoice.PhoneRequested)
            {
                info.Phone = new TLString(PhoneCode + PhoneNumber);
            }
            if (PaymentInfo.Form.Invoice.EmailRequested)
            {
                info.Email = new TLString(Email);
            }
            if (PaymentInfo.Form.Invoice.ShippingAddressRequested)
            {
                info.ShippingAddress = new TLPostAddress
                {
                    StreetLine1 = new TLString(StreetLine1),
                    StreetLine2 = new TLString(StreetLine2),
                    City        = new TLString(City),
                    State       = new TLString(State),
                    CountryIso2 = new TLString(SelectedCountry != null ? SelectedCountry.Code : string.Empty),
                    PostCode    = new TLString(PostCode)
                };
            }

            IsWorking = true;
            MTProtoService.ValidateRequestedInfoAsync(
                SaveShippingInformation,
                PaymentInfo.Message.Id,
                info,
                result => Execute.BeginOnUIThread(() =>
            {
                IsWorking = false;
                PaymentInfo.ValidatedInfo  = result;
                PaymentInfo.Form.SavedInfo = info;

                if (!SaveShippingInformation &&
                    PaymentInfo != null &&
                    PaymentInfo.Form != null &&
                    PaymentInfo.Form.SavedInfo != null)
                {
                    IsWorking = true;
                    MTProtoService.ClearSavedInfoAsync(false, true,
                                                       result2 => Execute.BeginOnUIThread(() =>
                    {
                        IsWorking = false;
                        NavigateToNextStep();
                    }),
                                                       error2 => Execute.BeginOnUIThread(() =>
                    {
                        IsWorking = false;
                        Telegram.Api.Helpers.Execute.ShowDebugMessage("payments.clearInfo error " + error2);
                    }));
                }
                else
                {
                    NavigateToNextStep();
                }
            }),
                error => Execute.BeginOnUIThread(() =>
            {
                IsWorking = false;
                Error     = error;
                NotifyOfPropertyChange(() => Error);
                Telegram.Api.Helpers.Execute.ShowDebugMessage("payments.validateRequestedInfo error " + error);
            }));
        }
示例#12
0
 public void ValidateRequestedInfoAsync(int msgId, TLPaymentRequestedInfo info, bool save, Action <TLPaymentsValidatedRequestedInfo> callback, Action <TLRPCError> faultCallback = null)
 {
     Logs.Logger.Critical("Invoking legacy method");
 }
示例#13
0
        private async void SendExecute()
        {
            IsLoading = true;

            var save = _isSave ?? false;
            var info = new TLPaymentRequestedInfo();

            if (_paymentForm.Invoice.IsNameRequested)
            {
                info.Name = _info.Name;
            }
            if (_paymentForm.Invoice.IsEmailRequested)
            {
                info.Email = _info.Email;
            }
            if (_paymentForm.Invoice.IsPhoneRequested)
            {
                info.Phone = _info.Phone;
            }
            if (_paymentForm.Invoice.IsShippingAddressRequested)
            {
                info.ShippingAddress             = _info.ShippingAddress;
                info.ShippingAddress.CountryIso2 = _selectedCountry?.Code?.ToUpper();
            }

            var response = await ProtoService.ValidateRequestedInfoAsync(_message.Id, info, save);

            if (response.IsSucceeded)
            {
                IsLoading = false;

                if (_paymentForm.HasSavedInfo && !save)
                {
                    ProtoService.ClearSavedInfoAsync(true, false, null, null);
                }

                if (_paymentForm.Invoice.IsFlexible)
                {
                    NavigationService.NavigateToPaymentFormStep2(_message, _paymentForm, info, response.Result);
                }
                else if (_paymentForm.HasSavedCredentials)
                {
                    if (ApplicationSettings.Current.TmpPassword != null)
                    {
                        if (ApplicationSettings.Current.TmpPassword.ValidUntil < TLUtils.Now + 60)
                        {
                            ApplicationSettings.Current.TmpPassword = null;
                        }
                    }

                    if (ApplicationSettings.Current.TmpPassword != null)
                    {
                        NavigationService.NavigateToPaymentFormStep5(_message, _paymentForm, info, response.Result, null, null, null, true);
                    }
                    else
                    {
                        NavigationService.NavigateToPaymentFormStep4(_message, _paymentForm, info, response.Result, null);
                    }
                }
                else
                {
                    NavigationService.NavigateToPaymentFormStep3(_message, _paymentForm, info, response.Result, null);
                }
            }
            else if (response.Error != null)
            {
                IsLoading = false;

                switch (response.Error.ErrorMessage)
                {
                case "REQ_INFO_NAME_INVALID":
                case "REQ_INFO_PHONE_INVALID":
                case "REQ_INFO_EMAIL_INVALID":
                case "ADDRESS_COUNTRY_INVALID":
                case "ADDRESS_CITY_INVALID":
                case "ADDRESS_POSTCODE_INVALID":
                case "ADDRESS_STATE_INVALID":
                case "ADDRESS_STREET_LINE1_INVALID":
                case "ADDRESS_STREET_LINE2_INVALID":
                    RaisePropertyChanged(response.Error.ErrorMessage);
                    break;

                default:
                    //AlertsCreator.processError(error, PaymentFormActivity.this, req);
                    break;
                }
            }
        }
示例#14
0
        public Task <MTProtoResponse <TLPaymentsValidatedRequestedInfo> > ValidateRequestedInfoAsync(int msgId, TLPaymentRequestedInfo info, bool save)
        {
            var tsc = new TaskCompletionSource <MTProtoResponse <TLPaymentsValidatedRequestedInfo> >();

            ValidateRequestedInfoAsync(msgId, info, save, (callback) =>
            {
                tsc.TrySetResult(new MTProtoResponse <TLPaymentsValidatedRequestedInfo>(callback));
            }, (faultCallback) =>
            {
                tsc.TrySetResult(new MTProtoResponse <TLPaymentsValidatedRequestedInfo>(faultCallback));
            });
            return(tsc.Task);
        }