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
相关产品推荐
相关产品推荐

