Stripe Android SDK PaymentResult无法获取交易详情求助
Android集成Stripe后获取交易详情的解决方案
方案1:客户端直接获取PaymentIntent详情
在支付完成的回调中,PaymentResult.Completed 实例包含完整的PaymentIntent对象,可从中提取交易ID、收据链接等信息。修改你的onPaymentResult方法如下:
private void onPaymentResult(PaymentResult paymentResult) { String message = ""; if (paymentResult instanceof PaymentResult.Completed) { PaymentIntent paymentIntent = ((PaymentResult.Completed) paymentResult).getIntent(); // 获取交易ID(对应你要的Stripe_trx_id) String stripeTrxId = paymentIntent.getId(); // 获取收据链接 String receiptUrl = paymentIntent.getReceiptUrl(); // 还可获取支付金额、状态等其他字段 long amount = paymentIntent.getAmount(); String status = paymentIntent.getStatus(); message = String.format("支付完成!\n交易ID: %s\n收据链接: %s\n金额: %d\n状态: %s", stripeTrxId, receiptUrl != null ? receiptUrl : "暂未生成", amount, status); } else if (paymentResult instanceof PaymentResult.Canceled) { message = "支付已取消!"; } else if (paymentResult instanceof PaymentResult.Failed) { message = "支付失败: " + ((PaymentResult.Failed) paymentResult).getThrowable().getMessage(); } displayAlert("支付结果", message, true); }
注意:收据链接receipt_url仅在支付成功且Stripe生成收据后存在,测试环境使用测试卡支付成功后通常会生成该链接。
方案2:服务端查询PaymentIntent详情(推荐)
出于安全性和数据完整性考虑,建议通过自有服务端查询交易详情后返回给客户端:
- 客户端在支付完成后,将
PaymentIntent的ID(从paymentIntent.getId()获取)发送到你的服务端接口 - 服务端使用Stripe的Secret Key查询完整的PaymentIntent信息,提取所需字段返回给客户端
服务端(PHP)示例代码:
// 设置Stripe Secret Key \Stripe\Stripe::setApiKey('sk_test_26PHem9AhJZvU623DfE1x4sd'); // 接收客户端传递的PaymentIntent ID $paymentIntentId = $_POST['payment_intent_id']; // 查询PaymentIntent详情 try { $paymentIntent = \Stripe\PaymentIntent::retrieve($paymentIntentId); // 返回需要的字段 echo json_encode([ 'stripe_trx_id' => $paymentIntent->id, 'receipt_url' => $paymentIntent->receipt_url, 'amount' => $paymentIntent->amount, 'status' => $paymentIntent->status, 'created' => $paymentIntent->created ]); } catch (\Stripe\Exception\ApiErrorException $e) { echo json_encode(['error' => $e->getMessage()]); }
客户端在onPaymentResult的Completed分支中,调用上述服务端接口即可获取完整交易详情。
内容的提问来源于stack exchange,提问作者Adnan Quraishi
相关产品推荐
相关产品推荐

