书史足自悦,安用勤与劬。这篇文章主要讲述使用Android Deep Link的UPI支付网关相关的知识,希望能为你提供帮助。
是否有任何工作样本使用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
s。如果调用者(在本例中为
Intent.FLAG_ACTIVITY_NEW_TASK
)正在请求启动的活动(在本例中为UPI PSP),则不能使用Activity
。 [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。
要在动态模式下创建付款请求,您还需要添加以下内容:
tr
:交易参考。您对系统中事务的内部引用。
【使用Android Deep Link的UPI支付网关】正如评论中提到的OP,要从PSP应用程序中获取响应,例如,事务ID等,我们可以使用
Intent
时传递的onActivityResult()
。RESULT_OK == resultCode
推荐阅读
- 如何限制用户输入EditText(Xamarin.Android)中小数点分隔符后的最大2位或3位数()
- “android.runtime.JavaProxyThrowable”是什么意思(我该如何解决?)
- 如何在C中打印Pascal三角形
- 如何在C中获得数字的阶乘
- 在Symfony 1.4中实现全局非静态辅助函数
- 如何解决FOSUserBundle异常(服务” fos_user.mailer”具有对不存在的服务”模板”的依赖)
- 如何在Silex项目中使用CLI清除缓存
- 如何解决C++错误C4996’getch’(不建议使用此项目的POSIX名称。而是使用符合ISO C和C ++的名称:_getch)
- 如何在自己的插件之前在Shopware中注册第三方插件的自定义模型