예제 #1
0
    def test_is_successful(self):
        self.assertTrue(
            GatewayResponse(200, b'', CaseInsensitiveDict()).is_successful())
        self.assertTrue(
            GatewayResponse(201, b'', CaseInsensitiveDict()).is_successful())
        self.assertTrue(
            GatewayResponse(302, b'', CaseInsensitiveDict()).is_successful())
        self.assertTrue(
            GatewayResponse(402, b'', CaseInsensitiveDict()).is_successful())

        self.assertFalse(
            GatewayResponse(404, b'', CaseInsensitiveDict()).is_successful())
        self.assertFalse(
            GatewayResponse(401, b'', CaseInsensitiveDict()).is_successful())
        self.assertFalse(
            GatewayResponse(403, b'', CaseInsensitiveDict()).is_successful())
        self.assertFalse(
            GatewayResponse(500, b'', CaseInsensitiveDict()).is_successful())
예제 #2
0
    def make_request(self, request_data=None) -> GatewayResponse:
        """
        Make HTTP request via Transact Pro HttpTransport

        Args:
            request_data (dict): Transact Pro request structure

        Response tuple (HTTP Content, HTTP Status code, HTTP Headers)

        Returns:
            GatewayResponse
        """
        if self.__client_operations['current'] == '/report':
            req_url = gateway.API_BASE_URL.rstrip(
                '/') + self.__client_operations['current']
        elif str(self.__client_operations['current']).startswith('http'):
            req_url = self.__client_operations['current']
        else:
            req_url = gateway.API_BASE_URL + gateway.API_VERSION + self.__client_operations[
                'current']

        if req_url is None:
            raise RuntimeError('Transact PRO API URL Empty!')

        if self.__client_operations['method'] != HTTP_GET:
            if request_data is None or len(request_data) < 1:
                raise RuntimeError("Request data invalid, is empty")

            if type(request_data) is not dict:
                raise RuntimeError('Request data invalid, must be dict')

        guid = AuthorizationBuilder.get_object_guid(
            self.__dict_of_auth_data_set)
        secret = self.__dict_of_auth_data_set[
            RequestParameters.AUTH_DATA_SECRET_KEY]
        digest = RequestDigest(username=guid, secret=secret, full_url=req_url)
        digest.set_body(json.dumps(request_data))

        # Setup config for HTTP transport
        # And make request via HTTP implemented Client
        [content, status_code, headers] = new_http_client(
            cli_name=gateway.HTTP_TRANSPORT_IMPLEMENTATION,
            verify_ssl=gateway.HTTP_VERIFY_SSL_CERTS,
            proxy=gateway.HTTP_PROXY,
            timeout=gateway.HTTP_TIME_OUT).request(
                http_method=self.__client_operations['method'],
                http_url=req_url,
                authorization_header=digest.create_header(),
                request_data=request_data)

        gw_response = GatewayResponse(status_code, content, headers)
        if gw_response.is_successful():
            response_digest = ResponseDigest(
                gw_response.headers.get('authorization'))
            gw_response.digest = response_digest

            response_digest.set_original_uri(digest.get_uri())
            response_digest.set_original_cnonce(digest.get_cnonce())
            response_digest.set_body(gw_response.payload)
            response_digest.verify(guid, secret)

        return gw_response
예제 #3
0
 def parse(response: GatewayResponse) -> PaymentResponse:
     return response.parse_json(PaymentResponse)
예제 #4
0
 def parse(response: GatewayResponse) -> CsvResponse:
     return response.parse_csv()
예제 #5
0
 def parse(response: GatewayResponse) -> LimitsResponse:
     return response.parse_json(LimitsResponse)
예제 #6
0
 def parse(response: GatewayResponse) -> StatusResponse:
     return response.parse_json(StatusResponse)
예제 #7
0
 def parse(response: GatewayResponse) -> ResultResponse:
     return response.parse_json(ResultResponse)
예제 #8
0
 def parse(response: GatewayResponse) -> HistoryResponse:
     return response.parse_json(HistoryResponse)
예제 #9
0
 def parse(response: GatewayResponse) -> RecurringTransactionsResponse:
     return response.parse_json(RecurringTransactionsResponse)
예제 #10
0
 def parse(response: GatewayResponse) -> EnrollmentResponse:
     return response.parse_json(EnrollmentResponse)