protected function execute ($method_name, $resource, $fields = [], $date = null, $nonce = null) {
    $url_encoded_fields = http_build_query($fields, null, "&");

    $headers = $this->generateTelesignHeaders(
      $this->customer_id,
      $this->api_key,
      $method_name,
      $resource,
      $url_encoded_fields,
      $date,
      $nonce,
      $this->user_agent
    );

    $option = in_array($method_name, [ "POST", "PUT" ]) ? "body" : "query";

    return new Response($this->client->request($method_name, $resource, [
      "headers" => $headers,
      $option => $url_encoded_fields,
      "http_errors" => false
    ]));
  }