开发者社区 问答 正文

支付宝 android SDK 如何获取支付订单号?

支付宝 android SDK 如何获取支付订单? 支付宝android支付接口:new PayTask(act).pay(or);返回result为空,支付状态成功,但是reuslt数据为空。 请问如获取支付订单号?

展开
收起
halohoop 2019-09-04 11:22:33 690 分享 版权
阿里云 AI 助理回答

在支付宝Android SDK中,获取支付订单号通常不是直接从支付结果的回调中获取的,而是在调用支付接口之前就需要你知道的。支付订单号(也称为交易号或者订单ID)是在你服务器端生成支付订单时,由你的系统生成并返回给客户端的。具体步骤如下:

  1. 服务器端:你需要先在你的服务器上通过调用支付宝的API(如统一下单API)来创建一个支付订单,这个过程会包含商品信息、金额、商户ID等必要参数。请求成功后,支付宝会返回一个包含订单信息的响应,其中就包括了out_trade_no(外部交易号,即你自定义的订单号)和trade_no(支付宝交易号)。你应该将这些信息记录在你的数据库中,并选择其中一个订单号(通常是out_trade_no)传递给客户端。

  2. 客户端(Android应用):在你的Android应用中,调用支付接口前,你应该已经从服务器获取到了上述的订单号。然后,使用这个订单号和其他必要的支付参数(比如总金额、商品描述等)构造支付请求对象,再调用new PayTask(act).pay(or)进行支付。

如果你在支付完成后需要查询支付状态或详情,可以再次通过订单号到你的服务器上查询,服务器再根据订单号向支付宝发起查询请求,获取支付结果。

至于你提到的result为空但支付状态成功的情况,这可能是因为数据处理逻辑上的问题。确保在调用支付方法后,正确地处理了支付宝SDK返回的支付结果。支付结果通常是一个JSON字符串,包含了支付状态、订单号等信息。你需要在PayTask的监听器中实现onPayResult方法来捕获这个结果,并解析它。

例如:

PayTask payTask = new PayTask(this);
Map<String, String> result = payTask.pay(orderInfo, true);

String resultStatus = result.get("resultStatus");
if (TextUtils.equals(resultStatus, "9000")) { // 支付成功的状态码为9000
    String tradeNo = result.get("tradeNo"); // 这里就是支付宝交易号
    // 根据tradeNo做后续操作,比如显示支付成功界面,更新订单状态等
} else {
    // 处理其他支付状态,如失败、取消等
}

请检查你的代码中是否正确实现了对支付结果的处理逻辑,以及是否遗漏了对返回数据的解析。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答