public unsafe virtual NSUrlSessionTask GenerateTokenForApplePay(global::PassKit.PKPayment payment, [BlockProxy(typeof(ObjCRuntime.Trampolines.NIDActionArity2V1))] global::System.Action <NSString, NSError> completion)
        {
            if (payment == null)
            {
                throw new ArgumentNullException("payment");
            }
            if (completion == null)
            {
                throw new ArgumentNullException("completion");
            }
            BlockLiteral *block_ptr_completion;
            BlockLiteral  block_completion;

            block_completion     = new BlockLiteral();
            block_ptr_completion = &block_completion;
            block_completion.SetupBlockUnsafe(Trampolines.SDActionArity2V1.Handler, completion);

            NSUrlSessionTask ret;

            if (IsDirectBinding)
            {
                ret = Runtime.GetNSObject <NSUrlSessionTask> (global::ApiDefinition.Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr(this.Handle, Selector.GetHandle("generateTokenForApplePay:completion:"), payment.Handle, (IntPtr)block_ptr_completion));
            }
            else
            {
                ret = Runtime.GetNSObject <NSUrlSessionTask> (global::ApiDefinition.Messaging.IntPtr_objc_msgSendSuper_IntPtr_IntPtr(this.SuperHandle, Selector.GetHandle("generateTokenForApplePay:completion:"), payment.Handle, (IntPtr)block_ptr_completion));
            }
            block_ptr_completion->CleanupBlock();

            return(ret);
        }
        public WDApplePayPayment(global::PassKit.PKPayment payment, global::PassKit.PKPaymentSummaryItem[] summaryItems, string currency, WDTransactionType transactionType)
            : base(NSObjectFlag.Empty)
        {
            if (payment == null)
            {
                throw new ArgumentNullException("payment");
            }
            if (summaryItems == null)
            {
                throw new ArgumentNullException("summaryItems");
            }
            if (currency == null)
            {
                throw new ArgumentNullException("currency");
            }
            var nsa_summaryItems = NSArray.FromNSObjects(summaryItems);
            var nscurrency       = NSString.CreateNative(currency);

            IsDirectBinding = GetType().Assembly == global::ApiDefinition.Messaging.this_assembly;
            if (IsDirectBinding)
            {
                if (IntPtr.Size == 8)
                {
                    InitializeHandle(global::ApiDefinition.Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr_IntPtr_Int64(this.Handle, Selector.GetHandle("initWithPayment:summaryItems:currencyString:transactionType:"), payment.Handle, nsa_summaryItems.Handle, nscurrency, (Int64)transactionType), "initWithPayment:summaryItems:currencyString:transactionType:");
                }
                else
                {
                    InitializeHandle(global::ApiDefinition.Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr_IntPtr_int(this.Handle, Selector.GetHandle("initWithPayment:summaryItems:currencyString:transactionType:"), payment.Handle, nsa_summaryItems.Handle, nscurrency, (int)transactionType), "initWithPayment:summaryItems:currencyString:transactionType:");
                }
            }
            else
            {
                if (IntPtr.Size == 8)
                {
                    InitializeHandle(global::ApiDefinition.Messaging.IntPtr_objc_msgSendSuper_IntPtr_IntPtr_IntPtr_Int64(this.SuperHandle, Selector.GetHandle("initWithPayment:summaryItems:currencyString:transactionType:"), payment.Handle, nsa_summaryItems.Handle, nscurrency, (Int64)transactionType), "initWithPayment:summaryItems:currencyString:transactionType:");
                }
                else
                {
                    InitializeHandle(global::ApiDefinition.Messaging.IntPtr_objc_msgSendSuper_IntPtr_IntPtr_IntPtr_int(this.SuperHandle, Selector.GetHandle("initWithPayment:summaryItems:currencyString:transactionType:"), payment.Handle, nsa_summaryItems.Handle, nscurrency, (int)transactionType), "initWithPayment:summaryItems:currencyString:transactionType:");
                }
            }
            nsa_summaryItems.Dispose();
            NSString.ReleaseNative(nscurrency);
        }