queryPayerMaxOrderStatus method
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;
}
}