getPaymentStatus method

  1. @override
Future<TransactionStatus> getPaymentStatus(
  1. String clientId,
  2. String clientSecret,
  3. String transactionReference
)
override

Implementation

@override
Future<TransactionStatus> getPaymentStatus(
    String clientId,
    String clientSecret,
    String transactionReference)async {
  final AccessTokenResult accessTokenResult = await this.getAccessToken(clientId, clientSecret);

  if(accessTokenResult == null){
    final message =  'The requested service needs credentials, but the ones provided were invalid.';
    throw  new AdjeminPayAuthException(message,401);
  }

  final String url = "$API_URL/transactions/$transactionReference";
  final http.Response response = await http.get(
      Uri.parse(url),
      headers: {
        'Authorization' : 'Bearer ${accessTokenResult.accessToken}',
        'Accept':'application/json',
        'Content-Type': 'application/x-www-form-urlencoded'
      }
  );

  if(response.statusCode == 200){
    final Map<String, dynamic> json = jsonDecode(response.body);
    final TransactionStatus result = TransactionStatus.fromJson(json);
    return result;
  }else{
    var message = StatusCode.messages[StatusCode.OPERATION_ERROR];
    var code = StatusCode.codes[StatusCode.OPERATION_ERROR];
    var status = StatusCode.OPERATION_ERROR;
    if(response.headers['content-type'] == 'application/json'){
      final Map json = jsonDecode(response.body);

      if(json.containsKey('message')){
        message = json['message'] as String;

      }

      if(json.containsKey('code')){
        code = json['code'] as int;
      }

      if(json.containsKey('status')){
        status = json['status'] as String;
      }

    }else{
      message  = "Payment has failed";
    }

    throw new AdjeminPayException(message, response.statusCode, code,status);
  }
}