gpt4 book ai didi

android - 使用 Android Deep Link 的 UPI 支付网关

转载 作者:搜寻专家 更新时间:2023-11-01 08:22:30 25 4
gpt4 key购买 nike

是否有使用 Android Deep Link 集成 UPI 支付网关的工作示例。我仔细阅读了 NPCI 规范并没有成功实现它。交易没有完成。

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
Console.WriteLine("Request Code:" + requestCode);
}

private void RunUPI(string MobileNo)
{
var UPIUri = Android.Net.Uri.Parse("upi://pay?pa=xxx@xxxx&pn=xxxxxx&mc=null&tid=null&tr=test101&tn=This%20is%20test%20payment&am=10&mam=null&cu=INR&url=null");
Intent intent = new Intent();
intent.SetAction(Intent.ActionView);
intent.SetData(UPIUri);
var activities = PackageManager.QueryIntentActivities(intent, PackageInfoFlags.MatchDefaultOnly);
var isIntentSafe = activities.Count > 0;
if (true == isIntentSafe)
{
var chooser = Intent.CreateChooser(intent, "Pay With");
chooser.SetFlags(ActivityFlags.NewTask);
// Verify the intent will resolve to at least one activity
if (chooser.ResolveActivity(PackageManager) != null)
{
txnUPIRequestCode = 0;
StartActivityForResult(chooser, txnUPIRequestCode);
}
}
}

最佳答案

您的问题与 UPI 无关,而是 Android 如何管理 Activity 结果和 Intent

不能使用 Intent.FLAG_ACTIVITY_NEW_TASK如果调用者(在本例中是您的 Activity)请求正在启动的 Activity (在本例中是 UPI PSP)的结果。 [source]

因此,一个简单的解决方案是简单地创建 Uri 并在没有标志的情况下启动 Intent。在 Java 中看起来像:

private void launchUPI(){
// look below for a reference to these parameters
Uri uri = Uri.parse("upi://pay").buildUpon()
.appendQueryParameter("pa", "xxx@xxxxx")
.appendQueryParameter("pn", "XYZXYZ")
.appendQueryParameter("tn", "Pay for in-app purchase")
.appendQueryParameter("am", "20")
.appendQueryParameter("cu", "INR")
.build();

Intent upiPayIntent = new Intent(Intent.ACTION_VIEW);
upiPayIntent.setData(uri);

Intent chooser = Intent.createChooser(upiPayIntent, "Pay with");

if(null != chooser.resolveActivity(getPackageManager())) {
Log.d(TAG, "UPI Payment resolved to activity");
startActivityForResult(chooser, REQ_UPIPAYMENT);
} else {
Log.d(TAG, "No activity found to handle UPI Payment");
}
}

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if(REQ_UPIPAYMENT == requestCode){
if(RESULT_OK == resultCode){
Log.d(TAG, "UPI Payment successfull");
} else {
Log.d(TAG, "UPI Payment failed");
}
}
}

请求参数而言,以下是我从UPI DeepLinking Specificication page 获得的简单引用.

  • pa:收款人(收款人)的 UPI 虚拟地址
  • pn:收款人的名称。可以是商家或商店的名称。
  • tn:交易备注。交易的简单描述,例如应用内商品的付款、账单付款等。
  • am:十进制格式的交易金额。
  • cu:交易中使用的货币。目前仅支持 INR。

使用上述参数,您可以为 PSP 应用程序(PayTM 或银行应用程序等应用程序)创建支付请求静态模式

要在动态模式下创建支付请求,您还需要添加以下内容:

  • tr:交易引用。您对系统中交易的内部引用。

更新 1

正如评论中提到的 OP,要从 PSP 应用程序取回响应,例如交易 ID 等,我们可以使用传入的 Intent onActivityResult()RESULT_OK == resultCode 时。

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if(REQ_UPIPAYMENT == requestCode){
if(RESULT_OK == resultCode){
Log.d(TAG, "UPI Payment successfull");
String transId = data.getStringExtra("response");
} else {
Log.d(TAG, "UPI Payment failed");
}
}
}

关于android - 使用 Android Deep Link 的 UPI 支付网关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49041760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com