Xamarin Form集成Google Pay API遇支付风险错误及配置疑问
问题
在Xamarin.Forms中调用Google Pay支付时,始终抛出错误:
Payment Failed. this transaction may be risky. for your safety it can't be completed at this time.
代码可正常唤起Google Pay应用,但无法完成支付。同时疑问:是否需要在Google Pay API控制台进行相关配置?
以下是Android端的实现代码:
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity { int gpay_requestCode = 123; protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState); global::Xamarin.Forms.Forms.Init(this, savedInstanceState); LoadApplication(new App()); MessagingCenter.Subscribe<string>(this, "PayViaGooglePay", (value) => { PayViaGooglePay(); }); } private void PayViaGooglePay() { if (IsGooglePayInstalled()) { string GOOGLE_PAY_PACKAGE_NAME = "com.google.android.apps.nbu.paisa.user"; int GOOGLE_PAY_REQUEST_CODE = 123; Uri uri = new Uri.Builder() .Scheme("upi") .Authority("pay") .AppendQueryParameter("pa", "9725258448@okbizaxis") .AppendQueryParameter("pn", "Gurukrupa") .AppendQueryParameter("mc", "5812") .AppendQueryParameter("tr", "123456789") .AppendQueryParameter("tn", "test") .AppendQueryParameter("am", "1") .AppendQueryParameter("cu", "INR") .Build(); Intent intent = new Intent(Intent.ActionView); intent.SetData(uri); intent.SetPackage(GOOGLE_PAY_PACKAGE_NAME); StartActivityForResult(intent, GOOGLE_PAY_REQUEST_CODE); } } protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) { if (requestCode == gpay_requestCode) { if (data != null) { string response = data.GetStringExtra("response"); string[] resArray = response.Split("&"); string txnId = resArray[0].Split("=")[1].ToString(); string responseCode = resArray[1].Split("=")[1].ToString(); string status = resArray[2].Split("=")[1].ToString(); string txnRef = resArray[3].Split("=")[1].ToString(); if (status == "SUCCESS") { Toast.MakeText(this, "Payment Success", ToastLength.Long).Show(); } else { Toast.MakeText(this, "Payment Failed", ToastLength.Long).Show(); } } else { Toast.MakeText(this, "Payment Failed", ToastLength.Long).Show(); } } } private bool IsGooglePayInstalled() { PackageManager pm = this.PackageManager; bool installed = false; try { pm.GetPackageInfo("com.google.android.apps.nbu.paisa.user", PackageInfoFlags.Activities); installed = true; } catch (PackageManager.NameNotFoundException e) { Toast.MakeText(this, "Google Pay Is Not Installed", ToastLength.Long).Show(); } return installed; } }
解决方案与建议
1. Google Pay API控制台配置要求
是的,必须完成相关配置才能正式使用支付能力:
- 在Google Pay Console注册应用,绑定应用包名和签名证书指纹,确保Google识别应用为合法支付发起主体。
- 测试阶段可使用Google提供的测试商户ID与参数,但正式上线前必须完成商户资质认证与配置。
2. 支付参数合规性修正
当前参数存在触发风险检测的问题,需调整:
- 交易参考号(
tr参数):当前使用固定值123456789,Google Pay会判定重复交易为风险操作,必须每次支付生成唯一不重复的交易ID。 - 商户类别码(
mc参数):确认5812与实际商户资质匹配,不匹配会触发拦截。 - 收款人账号(
pa参数):确认9725258448@okbizaxis是已完成Google Pay商户认证的合法账号,未认证的个人/测试账号在正式环境会被限制。
3. 测试与正式环境区分
- 开发测试阶段启用Google Pay测试模式,使用官方提供的测试UPI地址与参数,避免触发真实风险检测。
- 正式环境需确保所有参数符合UPI和Google Pay规范,包括商户认证、交易参数合法性等。
4. 错误处理优化
当前仅显示通用失败提示,建议解析返回的responseCode获取详细错误信息,不同错误码对应不同问题(风险拦截、参数错误、商户未认证等),可快速定位问题。
内容的提问来源于stack exchange,提问作者Kirti Zare
相关产品推荐
相关产品推荐

