java - 如何动态引用 daraja API mpesa xpress 请求中的结账 RequestId

标签 java android mpesa

我正在开发一个带有 Mpesa 支付模块的 Android 应用程序。我已经能够在媒介上生成本教程指导的 STKPush:https://medium.com/@lentimo/m-pesa-integration-on-android-part-2-75430ccda2fe 。我的目标是能够确定客户在收到 STKPush 后是否处理交易完成。因此,我打算使用 Lipa Na M-Pesa 查询请求 API。要在此处发出请求,您需要 checkoutRequestId 作为参数之一。因此我的问题是,如何从代码中动态引用 checkoutRequestId ?有谁知道有关 android java 环境中 Lipa Na M-Pesa 查询请求 API 的开源代码吗?最后,有没有更简单的方法来实现上述目标?

以下是我想引用的内容: HTTP/1.1 200 好 缓存控制: 无商店 联系: 活着 内容长度: 314 内容类型: 应用程序/json;字符集=UTF-8 日期: 2020 年 3 月 10 日星期二 18:25:08 GMT { "MerchantRequestID": "7041-3944257-1", **“CheckoutRequestID”:“ws_CO_100320202125091065”,** “响应代码”:“0”, "ResponseDescription": "成功。请求已接受处理", "CustomerMessage": "成功。请求已接受处理" }

我在沙盒环境中操作。

提前致谢。

最佳答案

当您发出成功的请求时,在 onResponse block 中,解析 json 响应并提取 CheckoutRequestID。保留引用,然后在进行状态查询时可以根据需要使用它。

mApiClient.mpesaService().sendPush(stkPush).enqueue(new Callback<STKPush>() {
            @Override
            public void onResponse(@NonNull Call<STKPush> call, @NonNull Response<STKPush> response) {
                try {
                    if (response.isSuccessful()) {
                        //Parse JSON response here to extract CheckoutRequestID
                    } else {

                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(@NonNull Call<STKPush> call, @NonNull Throwable t) {
                //handle error
            }
        });

来自 mpesa api docs接受的请求响应的示例如下所示

  {
    "Body":{
      "stkCallback":{
        "MerchantRequestID":"19465-780693-1",
        "CheckoutRequestID":"ws_CO_27072017154747416",
        "ResultCode":0,
        "ResultDesc":"The service request is processed successfully.",
        "CallbackMetadata":{
          "Item":[
            {
              "Name":"Amount",
              "Value":1
            },
            {
              "Name":"MpesaReceiptNumber",
              "Value":"LGR7OWQX0R"
            },
            {
              "Name":"Balance"
            },
            {
              "Name":"TransactionDate",
              "Value":20170727154800
            },
            {
              "Name":"PhoneNumber",
              "Value":254721566839
            }
          ]
        }
      }
    }
  }

关于java - 如何动态引用 daraja API mpesa xpress 请求中的结账 RequestId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60623493/

相关文章:

laravel - mpesa 集成中 ngrok 中的 POST/api/mpesa/callbackurl 502 错误网关

java - 使用 Shiro 和 Spring WebMVC(Java8、Spring 4.x)从 WebApp 注销所有仍登录的用户

java - 这种递归方法有什么问题呢? (java)

java - 仅删除文本区域中的选定文本

Android 退出时清除外部图像缓存

Android startActivityForResult、setResult、onActivityResult 未调用

android - 将库构建迁移到 Gradle 4.5.1 后,应用程序构建失败

python - Django MPESA 与 C2B 收款机号码支付和 STK 推送的集成

java - 使用Springboot部署REST服务: whitelabel error