【问题标题】:How to create Google Pay link to send or request money?如何创建 Google Pay 链接以汇款或收款?
【发布时间】:2020-09-08 03:12:29
【问题描述】:

在网上(谷歌搜索)一段时间后,我找不到任何可以为 Google Pay 请求创建链接的内容。

在我的 Flutter 应用中,我想使用我的电话号码创建一个收款链接,点击该链接将启动 Google Pay 应用,并为我的电话号码设置付款。但是,金额将由用户从 Google 支付应用程序中输入。

类似这样的:

String googlePayUrl = "https://pay.google.com?phone=XXXXXXXXXX";

这适用于 印度的 Google 付费版本

【问题讨论】:

  • 仅供参考,目前有两个版本的 Google Pay。这适用于 Google Pay 印度还是其他市场?
  • 适用于 Google Pay India。我已经更新了 OP。谢谢

标签: flutter dart google-api deep-linking google-pay


【解决方案1】:

免责声明:我不住在印度,也无法访问 UPI 来验证自己。

考虑使用UPI linking specification (upi://) 创建 UPI 链接以用于与 UPI 兼容的应用程序。您也可以参考 Google Pay 文档了解如何integrate with in-app payments

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", "your-merchant-vpa@xxx")
        .appendQueryParameter("pn", "your-merchant-name")
        .appendQueryParameter("mc", "your-merchant-code")
        .appendQueryParameter("tr", "your-transaction-ref-id")
        .appendQueryParameter("tn", "your-transaction-note")
        .appendQueryParameter("am", "your-order-amount")
        .appendQueryParameter("cu", "INR")
        .appendQueryParameter("url", "your-transaction-url")
        .build();
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
intent.setPackage(GOOGLE_PAY_PACKAGE_NAME);
activity.startActivityForResult(intent, GOOGLE_PAY_REQUEST_CODE);

我相信你之后的参数名称是pa

【讨论】:

  • PDF 帮助很大。创建了这样的链接,瞧。 String upi_url = 'upi://pay?pa=address@okhdfcbank&pn=收款人姓名&tn=付款信息&cu=INR';注意:所有参数都是必需的!
  • 非常感谢您的回答,尤其是因为您不在印度。后续小问题,支付成功/失败后返回什么样的代码来表示状态?比如应用应该如何决定是否向用户显示付款成功/失败?
  • 基于 Google Pay documentation,这是由 verifying the signature 在响应中完成的。
  • 尝试使用 ``` 通过 UPI 支付给 t6@hdfcbank 3 ``` 知道当前 URL 是什么样的吗?当我选择带有上述 URL 的 paytm 时,它说需要输入金额参数。
【解决方案2】:

上面的答案都很好,下面是一个例子

  void sendPayment() async {
   String upiurl = 'upi://pay?pa=user@hdfgbank&pn=SenderName&tn=TestingGpay&am=100&cu=INR';    
   await launchurl(upiurl);
  }

pa=user@hdfgbank //在每个人的gpay用户个人资料页面上都有,这里你需要给 接收者的 ID 不是发送者的 ID:

am=100 // 你要发送的金额

cu=INR // 货币印度卢比

【讨论】:

  • 感谢您的回答。顺便说一句,我们可以概括它吗?我的意思是我们可以直接使用帐号或关联的手机号码吗?
【解决方案3】:

感谢@Soc 的回答。这篇文章只是上面@Soc Post 的解释答案。 pdf document 是一个巨大的帮助。我的要求是在 Flutter 中创建了一个链接并使用url_launcher 打开链接。打开该链接将显示您手机中的 UPI 兼容应用列表。

链接示例:

String upi_url = 'upi://pay?pa=address@okhdfcbank&pn=Payee Name&tn=Payment Message&cu=INR';

// pa : Payee address, usually found in GooglePay app profile page
// pn : Payee name
// tn : Txn note, basically your message for the payee
// cu : Currency

注意:为了成功付款,所有提到的字段都是必需的。

【讨论】:

  • 你好,pdf链接被删除了,无论如何我有一个疑问,是否可以作为个人获得付款,没有商户ID/代码?
  • 就是这样。
  • 请描述您的经历
  • @MijanurRahaman 例如。如果您想将一些金额转入我的帐户,您需要我的pa 即。收款人地址,我只能提供给你。在上面的链接中设置它并使用 url-launcher 调用 url。它将向您显示相关的启用 UPI 的应用程序以选择付款。
  • 感谢您的检查和良好的答案。后续小问题,支付成功/失败后返回什么样的代码来表示状态?比如应用应该如何决定是否向用户显示付款成功/失败?
【解决方案4】:

如果您正在使用颤振,这就是它可以完成的方式。 您需要在 pubspec 中添加一个名为 url_launcher 的包来完成这项工作。

查看此处的文档以查看 URL 中使用的参数的详细信息。 https://developers.google.com/pay/india/api/web/create-payment-method#create-payment-method 所有参数都是必需的。

pa: UPI id of the requesting person
pn: Name of the requesting person
am: Amount
cu: Currency. I read somewhere that only INR is supported now.

这种方法的一个主要问题是,它不会返回任何回调来检查支付是成功还是失败。

import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Google Pay',
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  initiateTransaction() async {
    String upi_url =
'upi://pay?pa=aneesshameed@oksbi&pn=Anees Hameed&am=1.27&cu=INR;
    await launch(upi_url).then((value) {
      print(value);
    }).catchError((err) => print(err));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Google Pay'),
      ),
      body: Center(
        child: Column(
          children: [
            RaisedButton(
              child: Text(
                'Pay',
                style: TextStyle(
                  color: Colors.black,
                  fontWeight: FontWeight.bold,
                ),
              ),
              onPressed: () {
                initiateTransaction();
              },
            ),
          ],
        ),
      ),
    );
  }
}

如果您使用的是企业 UPI id,则 upi_url 中需要更多参数。例如:我有一个 rpy.payto000006621197825@icici UPI 用于接受商业付款。然后需要添加几个参数

pa: UPI id of the requesting business account
pn: Name of the requesting business account
am: Amount
cu: Currency. I read somewhere that only INR is supported now.
mc: Merchant category code. 

您可以从您创建 UPI 业务 ID 的位置获取此商家类别代码。例如:我通过 razorpay 创建了 upi id 'rpy.payto000006621197825@icici',我从他们的窗口某处收到了这个代码。但是这个代码对于所有的支付服务都是相似的,比如 paypal、stripe、Citibank 等:下面是几个链接: https://docs.checkout.com/resources/codes/merchant-category-codes https://www.citibank.com/tts/solutions/commercial-cards/assets/docs/govt/Merchant-Category-Codes.pdf tr:交易ID。 我找不到任何用处,此交易 ID 既未显示在 Google 支付交易详细信息中,也未显示在 Razorpay 交易窗口中。但是当不使用时,谷歌支付不起作用。 URL:显示交易详情的 URL。当您前往 Google Pay 并打开交易详情时,您会在底部的同一页面上看到一个“更多详情”按钮。 URL 参数的值定义了更多详细信息按钮的目标。您可以使用此 URL,以便客户可以找到有关已进行交易的更多信息。

UPI 字符串示例:

String upi_url =
        'upi://pay?pa=rpy.payto000006621197825@icici&pn=Elifent&mc=4900&tr=1234ABCD&url=https://elifent.tech/tr/1234&am=1.27&cu=INR';

如果您进行测试付款,则付款将记入我的 Google Pay 帐户。前进!!! :D

【讨论】:

    猜你喜欢
    • 2018-08-29
    • 2018-12-20
    • 1970-01-01
    • 2014-07-06
    • 2013-05-10
    • 2014-07-24
    • 2015-02-15
    • 2021-04-25
    • 2019-10-28
    相关资源
    最近更新 更多