问题描述
我的应用需要一点帮助,我正在 Xamarin Forms 中编码并尝试集成支付网关
我遵循了 XamBoy 创建的本指南
https://www.xamboy.com/2020/01/28/braintree-integration-in-xamarin-forms-part-1/
但是我收到了与 Braintree 片段相关的错误
raintreeFragment ,(错误为:错误 CS0246:找不到类型或命名空间名称“BraintreeFragment”(您是否缺少 using 指令或程序集引用?))并且没有任何用于 GooglePayment 的方法
using System;
using System.Threading.Tasks;
using Android.Runtime;
using BraintreeXFSample.Services;
using Com.Braintreepayments.Api;
using Com.Braintreepayments.Api.Exceptions;
using Com.Braintreepayments.Api.Interfaces;
using Com.Braintreepayments.Api.Models;
using Plugin.CurrentActivity;
using Xamarin.Forms;
[assembly: Dependency(typeof(BraintreeXFSample.Droid.Services.AndroidPayService))]
namespace BraintreeXFSample.Droid.Services
{
public class AndroidPayService : java.lang.Object,IPayService,IBraintreeResponseListener,IBraintreeErrorListener,IPaymentMethodNonceCreatedListener,IBraintreeCancelListener
{
taskcompletionsource<bool> initializeTcs;
taskcompletionsource<string> payTcs;
BraintreeFragment mBraintreeFragment;
bool isReady = false;
public bool CanPay { get { return isReady; } }
public event EventHandler<string> OnTokenizationSuccessful;
public event EventHandler<string> OnTokenizationError;
public void OnCancel(int requestCode)
{
// Use this to handle a canceled activity,if the given requestCode is important.
// You may want to use this callback to hide loading indicators,and prepare your UI for input
payTcs.SetCanceled();
mBraintreeFragment.RemoveListener(this);
}
public void OnResponse(java.lang.Object parameter)
{
if (parameter is java.lang.Boolean)
{
var res = parameter.JavaCast<java.lang.Boolean>();
isReady = res.BooleanValue();
initializeTcs?.TrySetResult(res.BooleanValue());
}
}
public async Task<string> TokenizeCard(string panNumber = "4111111111111111",string expirationMonth = "12",string expirationYear = "2018",string cvv = null)
{
if (isReady)
{
payTcs = new taskcompletionsource<string>();
CardBuilder cardBuilder = new CardBuilder()
.CardNumber(panNumber).JavaCast<CardBuilder>()
.ExpirationMonth(expirationMonth).JavaCast<CardBuilder>()
.ExpirationYear(expirationYear).JavaCast<CardBuilder>()
.Cvv(cvv).JavaCast<CardBuilder>();
mBraintreeFragment.AddListener(this);
Card.Tokenize(mBraintreeFragment,cardBuilder);
}
else
{
OnTokenizationError?.Invoke(this,"Platform is not ready to accept payments");
payTcs.TrySetException(new System.Exception("Platform is not ready to accept payments"));
}
return await payTcs.Task;
}
public void OnPaymentMethodNonceCreated(PaymentMethodNonce paymentMethodNonce)
{
// Send this nonce to your server
string nonce = paymentMethodNonce.Nonce;
mBraintreeFragment.RemoveListener(this);
OnTokenizationSuccessful?.Invoke(this,nonce);
payTcs?.TrySetResult(nonce);
}
public void OnError(java.lang.Exception error)
{
if (error is ErrorWithResponse)
{
ErrorWithResponse errorWithResponse = (ErrorWithResponse)error;
BraintreeError cardErrors = errorWithResponse.ErrorFor("creditCard");
if (cardErrors != null)
{
// There is an issue with the credit card.
BraintreeError expirationMonthError = cardErrors.ErrorFor("expirationMonth");
if (expirationMonthError != null)
{
// There is an issue with the expiration month.
//SetErrorMessage(expirationMonthError.GetMessage());
OnTokenizationError?.Invoke(this,expirationMonthError.Message);
payTcs?.TrySetException(new System.Exception(expirationMonthError.Message));
}
else
{
OnTokenizationError?.Invoke(this,cardErrors.Message);
payTcs?.TrySetException(new System.Exception(cardErrors.Message));
}
}
}
mBraintreeFragment.RemoveListener(this);
}
public async Task<bool> InitializeAsync(string clientToken)
{
try
{
initializeTcs = new taskcompletionsource<bool>();
mBraintreeFragment = BraintreeFragment.NewInstance(CrossCurrentActivity.Current.Activity,clientToken);
GooglePayment.IsReadyToPay(mBraintreeFragment,this);
}
catch (invalidargumentexception e)
{
initializeTcs.TrySetException(e);
}
return await initializeTcs.Task;
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)