queryPayerMaxOrderStatus method

Future<bool> queryPayerMaxOrderStatus()

Standalone Order Status Verification (Without App Backend)

Implementation

Future<bool> queryPayerMaxOrderStatus() async {
  try {
    isQueryingStatus.value = true;
    final queryUrl = testMode
        ? PayerMaxConfig.sandboxQueryUrl
        : PayerMaxConfig.productionQueryUrl;

    final requestBody = {
      "version": "1.4",
      "keyVersion": "1",
      "requestTime": _formatRfc3339(DateTime.now().toUtc()),
      "appId": targetAppId,
      "merchantNo": targetMerchantNo,
      "data": {
        "outTradeNo": outTradeNo.value,
      }
    };

    final jsonStr = jsonEncode(requestBody);
    final privateKey = _parsePkcs8PrivateKey(base64Decode(targetPrivateKey));
    final sign = _signSha256WithRsa(utf8.encode(jsonStr), privateKey);

    final res = await http.post(
      Uri.parse(queryUrl),
      headers: {
        "Content-Type": "application/json;charset=utf-8",
        "Accept": "application/json",
        "sign": sign,
      },
      body: jsonStr,
    );

    final jsonRes = jsonDecode(res.body) as Map<String, dynamic>;
    final status = jsonRes["data"]?["status"] ?? "";
    isQueryingStatus.value = false;

    final isSuccess = status == "SUCCESS" || status == "APPLY_SUCCESS";
    if (isSuccess) {
      statusRx.value = PayerMaxStatusModel.success();
    }
    return isSuccess;
  } catch (e) {
    isQueryingStatus.value = false;
    debugPrint("queryPayerMaxOrderStatus Error: $e");
    return false;
  }
}