谷歌支付 UPI 集成在安卓设备上无法运行

5
GPay集成在两天前还完全正常,但现在在gpay应用程序中显示相同的错误。调用gpay支付的意图不起作用。 我已经在几天前成功完成了交易,但现在它不起作用了。任何帮助将不胜感激!先行致谢。
我的代码:
 uriapp = new Uri.Builder()
            .scheme("upi")
            .authority("pay")
            .appendQueryParameter("pa", getString(R.string.vpa))
            .appendQueryParameter("pn", getString(R.string.payee))
            .appendQueryParameter("tr", orderId)
            .appendQueryParameter("tn", description)
            .appendQueryParameter("am", String.valueOf(amount))
            .appendQueryParameter("cu", "INR")
            .build();

 Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(uriapp);
        intent.setPackage(model.getPackageName());
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivityForResult(intent, GOOGLE_REQUEST_CODE);
        } else {
            Toast.makeText(this, "This payment mode is not available on your device.", Toast.LENGTH_LONG).show();
        }

我正在使用正确的VPA业务ID。

GPay错误:

this transaction may be risky. for your safety it cant be completed at this time

1
你有找到解决方法吗?我在使用intent时也遇到了同样的问题。 - Mohd Qasim
1
@MohdQasim 我没有找到任何解决方案。 - Bhoomika Brahmbhatt
你解决了这个问题吗? - Bala Saikrupa Puram
@BhoomikaBrahmbhatt,你解决了这个问题吗? - Skand kumar
有人能帮我解决这个问题吗?https://stackoverflow.com/q/76988284/20999526 - George
显示剩余3条评论
2个回答

0

目前这段代码片段在测试应用中运行正常。如果在您的应用中无法正常工作,请告诉我。

    private static final int TEZ_REQUEST_CODE = 123;

    private static final String GOOGLE_TEZ_PACKAGE_NAME = 
    "com.google.android.apps.nbu.paisa.user";

Uri uri =
    new Uri.Builder()
        .scheme("upi")
        .authority("pay")
        .appendQueryParameter("pa", "test@okbizaxis")
        .appendQueryParameter("pn", "Test")
        .appendQueryParameter("mc", "1234")
        .appendQueryParameter("tr", "1234")
        .appendQueryParameter("tn", "test")
        .appendQueryParameter("am", "10")
        .appendQueryParameter("cu", "INR")
        .appendQueryParameter("url", "")
        .build();
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
intent.setPackage(GOOGLE_TEZ_PACKAGE_NAME);
startActivityForResult(intent, TEZ_REQUEST_CODE);

无法使用,显示“您目前无法进行此付款”。 - Suraj Giri

0

https://web.archive.org/web/20200921110005/https://www.npci.org.in/sites/default/files/UPI%20Linking%20Specs_ver%201.6.pdf

请阅读此文档并相应地执行意图。
它清楚地表明,集成需要一个签名属性,但在谷歌支付 UPI 集成文档中明显缺少该属性。
为什么 Gpay UPI 文档上的代码不起作用?
首先,一些重要的 Upi 意图深链接参数缺失,例如模式、标记、orgID。
对于模式,请参考链接。
签名是类似于 checksum 值的签名值,在使用诸如 Paytm 等 SDK 时我们会创建一个这样的值。基本上,它是通过 SHA256 和 RSA512 加密的其余字符串。这个加密过程使用 PSP 提供商和商家银行提供的私钥和公钥完成。加密后,我们进行 base64 编码。这就是标记值。详见文档以了解更多信息。
基于意图的交易的 orgid 是 000000。
因为这些值不存在,我认为该交易失败了。
好吧,这是一种以意图为基础的交易的技巧方法 (仅适用于通过 Google Pay 应用程序的交易)。
对于 PhonePe 和 Paytm QR,使用 Google Lens 获取这些 QR 的原始字符串即可。
将参数添加到字符串中,例如'am'和'tn',分别表示金额和交易备注。应用Uri.parse(STRING VALUE)并将其作为意图发送到Google Pay。
您会看到交易正在进行,并且我们的应用程序会收到结果,成功或失败。

1
虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅有链接的答案可能会失效。-【来自审查】 - Abhishek Dutt
1
@AbhishekDutt 已按要求完成。 - zimmy9537

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接