makePayment method

dynamic makePayment({
  1. required dynamic context,
  2. required String xApiKey,
  3. required String transactionAmount,
  4. required String transactionCallBackUrl,
  5. required String providerShortTag,
  6. required String? phoneNumber,
  7. required Function actionAfterProccess,
  8. required String userName,
  9. required dynamic merchandUserName,
  10. required dynamic transactionId,
  11. required dynamic merchandPassword,
  12. required dynamic mode,
  13. required dynamic currency,
  14. required dynamic paymentType,
})

Implementation

makePayment({
  required context,
  required String xApiKey,
  required String transactionAmount,
  required String transactionCallBackUrl,
  required String providerShortTag,
  required String? phoneNumber,
  required Function actionAfterProccess,
  required String userName,
  required merchandUserName,
  required transactionId,
  required merchandPassword,
  required mode,
  required currency,
  required paymentType,
}) async {
  var response;
  var data = currency != null
      ? jsonEncode({
          'gateway': providerShortTag,
          'amount': int.parse(transactionAmount),
          'transaction_id': transactionId,
          'return_url': transactionCallBackUrl,
          'phone_number': phoneNumber,
          "name": userName,
          "currency": currency,
          "paymentType": paymentType
        })
      : jsonEncode({
          'gateway': providerShortTag,
          'amount': int.parse(transactionAmount),
          'transaction_id': transactionId,
          'return_url': transactionCallBackUrl,
          'phone_number': phoneNumber,
          "name": userName,
          "paymentType": paymentType
        });
  try {
    progressHub("Please wait", context);
    print("##A");

    var jsonResponse;
    var url = Uri.parse("${constant.baseUrl}/gateway/makepayment");
    response = await http.post(url,
        body: data, headers: getGlobalHeader(xApiKey, "$merchandUserName:$merchandPassword", mode));
    print("## ${response.body}");

    if (response.statusCode == 200 || response.statusCode == 201) {
      constant.makeToast(json.decode(response.body)['message'], context, Colors.green);
      jsonResponse = json.decode(response.body)["data"];
      if (jsonResponse["access_token"] != null) {
        print("Response #1 : $jsonResponse");
        String orderId = jsonResponse["order_id"];
        Map obj = {
          "order_id": orderId,
          "amount": jsonResponse["amount"],
          "currency": jsonResponse["currency"],
          "client_id": jsonResponse["client_id"],
          "accessToken": jsonResponse["access_token"],
        };
        Navigator.pop(context);
        return obj;
      } else {
        print("Response #2 : $jsonResponse");
        var obj = {
          "order_id": jsonResponse["order_id"],
          "amount": jsonResponse["amount"],
          "currency": jsonResponse["currency"],
          "client_id": jsonResponse["client_id"],
        };
        getPaymentStatus(
          transactionId: transactionId,
          merchandUserName: merchandUserName,
          merchandPassword: merchandPassword,
          providerShortTag: providerShortTag,
          actionAfterProccess: actionAfterProccess,
          context: context,
          mode: mode,
          xApiKey: xApiKey,
        );
        return obj;
      }
    } else {
      var responseData = json.decode(response.body);
      Navigator.of(context).pop();
      actionAfterProccess(transactionId, "FAILED");
      if (responseData != null) {
        payUnitStream.paymentSink.addError("Error");
        Navigator.of(context).pop();
        constant.makeToast(responseData['message'], context, Colors.red);
      }
    }
  } catch (e) {
    Navigator.of(context).pop();
    Navigator.of(context).pop();
    actionAfterProccess(transactionId, "FAILED");
  }
}