public Task<PaymentResult> Buy (PayPalItem item, Deveel.Math.BigDecimal tax)
		{
			if (buyTcs != null) {
				buyTcs.TrySetCanceled ();
				buyTcs.TrySetResult (null);
			}
			buyTcs = new TaskCompletionSource<PaymentResult> ();
			Manager.BuyItem (item, tax, SendOnPayPalPaymentDidCancel, SendOnPayPalPaymentCompleted, SendOnPayPalPaymentError);
			return buyTcs.Task;
		}
		public Task<PaymentResult> Buy (PayPalItem[] items, Decimal shipping, Decimal tax, ShippingAddress address = null)
		{
			if (buyTcs != null) {
				buyTcs.TrySetCanceled ();
				buyTcs.TrySetResult (null);
			}
			buyTcs = new TaskCompletionSource<PaymentResult> ();
			Manager.BuyItems (items, shipping, tax, SendOnPayPalPaymentDidCancel, SendOnPayPalPaymentCompleted, SendOnPayPalPaymentError, address);
			return buyTcs.Task;
		}
        public void BuyItem(PayPalForms.PayPalItem item, Decimal xftax, PayPalForms.PaymentIntent xfintent, Action onCancelled, Action <string> onSuccess, Action <string> onError, PayPalForms.ShippingAddress address)
        {
            _onCancelled = onCancelled;
            _onSuccess   = onSuccess;
            _onError     = onError;

            BigDecimal amount = new BigDecimal(RoundNumber((double)item.Price)).Add(new BigDecimal(RoundNumber((double)xftax)));
            string     paymentIntent;

            switch (xfintent)
            {
            case PayPalForms.PaymentIntent.Authorize:
                paymentIntent = PayPalPayment.PaymentIntentAuthorize;
                break;

            case PayPalForms.PaymentIntent.Order:
                paymentIntent = PayPalPayment.PaymentIntentOrder;
                break;

            default:
            case PayPalForms.PaymentIntent.Sale:
                paymentIntent = PayPalPayment.PaymentIntentSale;
                break;
            }
            PayPalPayment payment = new PayPalPayment(amount, item.Currency, item.Name, paymentIntent);

            if (address != null)
            {
                ShippingAddress shippingAddress = new ShippingAddress()
                                                  .RecipientName(address.RecipientName)
                                                  .Line1(address.Line1)
                                                  .Line2(address.Line2)
                                                  .City(address.City)
                                                  .State(address.State)
                                                  .PostalCode(address.PostalCode)
                                                  .CountryCode(address.CountryCode);
                payment = payment.InvokeProvidedShippingAddress(shippingAddress);
            }
            switch (_formsConfig.ShippingAddressOption)
            {
            case Abstractions.ShippingAddressOption.Both:
            case Abstractions.ShippingAddressOption.PayPal:
                payment = payment.EnablePayPalShippingAddressesRetrieval(true);
                break;

            default:
                payment = payment.EnablePayPalShippingAddressesRetrieval(false);
                break;
            }
            Intent intent = new Intent(Context, typeof(PaymentActivity));

            intent.PutExtra(PayPalService.ExtraPaypalConfiguration, _nativeConfig);
            intent.PutExtra(PaymentActivity.ExtraPayment, payment);
            (Context as Activity).StartActivityForResult(intent, REQUEST_CODE_PAYMENT);
        }