You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用跳转Square完成支付后获取交易金额的实现方案

嘿,我来帮你梳理下怎么实现这个需求!

Android跳转Square应用获取支付金额的实现方案

1. 启动Square支付界面(允许用户输入金额)

首先你需要调整调用Square的方式,不要预先设置固定金额,这样Square的界面就会自动让用户自行输入支付金额。你可以用Square SDK提供的ChargeRequest来构建Intent,具体代码如下:

// 自定义请求码,用于识别Square支付的返回结果
private static final int REQUEST_CODE_SQUARE_PAY = 1001;

// 构建Square支付请求
ChargeRequest chargeRequest = new ChargeRequest.Builder()
        .setClientId("你的Square客户端ID") // 替换成你自己的客户端ID
        .setCurrencyCode("USD") // 设置对应币种,比如人民币填"CNY"
        // 不要调用setAmount()方法,留空让用户输入金额
        .build();

// 创建启动Square支付的Intent
Intent squarePayIntent = chargeRequest.toIntent(this);

// 启动Activity并等待返回结果
startActivityForResult(squarePayIntent, REQUEST_CODE_SQUARE_PAY);

2. 在onActivityResult中获取支付金额

当用户在Square完成支付操作后,结果会返回给你的应用,你可以在onActivityResult方法里解析返回的Intent,提取出用户实际支付的金额:

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

    if (requestCode == REQUEST_CODE_SQUARE_PAY) {
        if (resultCode == RESULT_OK && data != null) {
            // 解析Square返回的支付结果
            ChargeResult chargeResult = ChargeResult.fromIntent(data);
            
            if (chargeResult.isSuccess()) {
                // 获取支付金额(注意:单位是分,比如100代表1美元/1元人民币)
                long amountInCents = chargeResult.getAmountMoney().getAmount();
                // 转换为你需要的格式,比如转为元:amountInCents / 100.0
                double actualAmount = amountInCents / 100.0;
                
                // 这里把金额留存到你的应用里,比如存到SharedPreferences或数据库
                savePaymentAmount(actualAmount);
                Toast.makeText(this, "支付成功,金额:" + actualAmount, Toast.LENGTH_SHORT).show();
            } else {
                // 处理支付失败的情况
                String errorMsg = chargeResult.getError().getMessage();
                Toast.makeText(this, "支付失败:" + errorMsg, Toast.LENGTH_SHORT).show();
            }
        } else if (resultCode == RESULT_CANCELED) {
            // 用户取消了支付操作
            Toast.makeText(this, "用户取消支付", Toast.LENGTH_SHORT).show();
        }
    }
}

// 示例:将金额保存到SharedPreferences的方法
private void savePaymentAmount(double amount) {
    SharedPreferences prefs = getSharedPreferences("AppPaymentData", MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putFloat("last_payment_amount", (float) amount);
    editor.apply();
}

3. 关键注意事项

  • 确保你已经正确集成Square Android SDK,并且在AndroidManifest.xml中配置了必要的权限和Activity声明。
  • 金额返回的单位是分,一定要做好单位转换,避免显示错误。
  • 测试阶段建议使用Square的沙箱环境,避免产生真实交易。
  • 要处理各种异常情况,比如用户中途退出Square、支付网络失败等,保证应用稳定性。

内容的提问来源于stack exchange,提问作者Ben Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:12:11