def example(self): with self.__get_client() as client: hosted_checkout_specific_input = HostedCheckoutSpecificInput() hosted_checkout_specific_input.locale = "en_GB" hosted_checkout_specific_input.variant = "testVariant" amount_of_money = AmountOfMoney() amount_of_money.amount = 2345 amount_of_money.currency_code = "USD" billing_address = Address() billing_address.country_code = "US" customer = Customer() customer.billing_address = billing_address customer.merchant_customer_id = "1234" order = Order() order.amount_of_money = amount_of_money order.customer = customer body = CreateHostedCheckoutRequest() body.hosted_checkout_specific_input = hosted_checkout_specific_input body.order = order response = client.merchant("merchantId").hostedcheckouts().create( body)
def test_idempotence(self): """Test that the client can successfully detect that an idempotent request is sent twice""" amount_of_money = AmountOfMoney() amount_of_money.currency_code = "EUR" amount_of_money.amount = 100L billing_address = Address() billing_address.country_code = "NL" customer = Customer() customer.locale = "en" customer.billing_address = billing_address order = Order() order.amount_of_money = amount_of_money order.customer = customer payment_product_input = RedirectPaymentProduct809SpecificInput() payment_product_input.issuer_id = "INGBNL2A" payment_method_input = RedirectPaymentMethodSpecificInput() payment_method_input.return_url = "http://example.com" payment_method_input.payment_product_id = 809 payment_method_input.payment_product809_specific_input = payment_product_input body = CreatePaymentRequest() body.order = order body.redirect_payment_method_specific_input = payment_method_input idempotence_key = str(uuid.uuid4()) context = CallContext(idempotence_key) with init_utils.create_client() as client: def do_create_payment(): # For this test it doesn't matter if the response is successful or declined, # as long as idempotence is handled correctly try: return client.merchant(MERCHANT_ID).payments().create(body, context) except DeclinedPaymentException as e: return e.create_payment_result result = do_create_payment() payment_id = result.payment.id status = result.payment.status self.assertEqual(idempotence_key, context.idempotence_key) self.assertIsNone(context.idempotence_request_timestamp) result_2 = do_create_payment() payment_id_2 = result_2.payment.id status_2 = result_2.payment.status self.assertEqual(payment_id, payment_id_2) self.assertEqual(status, status_2) self.assertEqual(idempotence_key, context.idempotence_key) self.assertIsNotNone(context.idempotence_request_timestamp)
def from_dictionary(self, dictionary): super(Order, self).from_dictionary(dictionary) if 'additionalInput' in dictionary: if not isinstance(dictionary['additionalInput'], dict): raise TypeError('value \'{}\' is not a dictionary'.format( dictionary['additionalInput'])) value = AdditionalOrderInput() self.additional_input = value.from_dictionary( dictionary['additionalInput']) if 'amountOfMoney' in dictionary: if not isinstance(dictionary['amountOfMoney'], dict): raise TypeError('value \'{}\' is not a dictionary'.format( dictionary['amountOfMoney'])) value = AmountOfMoney() self.amount_of_money = value.from_dictionary( dictionary['amountOfMoney']) if 'customer' in dictionary: if not isinstance(dictionary['customer'], dict): raise TypeError('value \'{}\' is not a dictionary'.format( dictionary['customer'])) value = Customer() self.customer = value.from_dictionary(dictionary['customer']) if 'items' in dictionary: if not isinstance(dictionary['items'], list): raise TypeError('value \'{}\' is not a list'.format( dictionary['items'])) self.items = [] for element in dictionary['items']: value = LineItem() self.items.append(value.from_dictionary(element)) if 'references' in dictionary: if not isinstance(dictionary['references'], dict): raise TypeError('value \'{}\' is not a dictionary'.format( dictionary['references'])) value = OrderReferences() self.references = value.from_dictionary(dictionary['references']) if 'seller' in dictionary: if not isinstance(dictionary['seller'], dict): raise TypeError('value \'{}\' is not a dictionary'.format( dictionary['seller'])) value = Seller() self.seller = value.from_dictionary(dictionary['seller']) if 'shipping' in dictionary: if not isinstance(dictionary['shipping'], dict): raise TypeError('value \'{}\' is not a dictionary'.format( dictionary['shipping'])) value = Shipping() self.shipping = value.from_dictionary(dictionary['shipping']) if 'shoppingCart' in dictionary: if not isinstance(dictionary['shoppingCart'], dict): raise TypeError('value \'{}\' is not a dictionary'.format( dictionary['shoppingCart'])) value = ShoppingCart() self.shopping_cart = value.from_dictionary( dictionary['shoppingCart']) return self
def create_request(): body = CreatePaymentRequest() order = Order() amount_of_money = AmountOfMoney() amount_of_money.amount = 2345L amount_of_money.currency_code = "CAD" customer = Customer() billing_address = Address() billing_address.county_code = "CA" customer.billing_address = billing_address order.customer = customer card_payment_method_specific_input = CardPaymentMethodSpecificInput() card_payment_method_specific_input.payment_product_id = 1 card = Card() card.cvv = "123" card.card_number = "4567350000427977" card.expiry_date = "1220" card_payment_method_specific_input.card = card body.card_payment_method_specific_input = card_payment_method_specific_input return body
def test_idempotence(self): """Test that the client can successfully detect that an idempotent request is sent twice""" amount_of_money = AmountOfMoney() amount_of_money.currency_code = "EUR" amount_of_money.amount = 100L billing_address = Address() billing_address.country_code = "NL" customer = Customer() customer.locale = "en" customer.billing_address = billing_address order = Order() order.amount_of_money = amount_of_money order.customer = customer payment_product_input = RedirectPaymentProduct809SpecificInput() payment_product_input.issuer_id = "INGBNL2A" payment_method_input = RedirectPaymentMethodSpecificInput() payment_method_input.return_url = "http://example.com" payment_method_input.payment_product_id = 809 payment_method_input.payment_product809_specific_input = payment_product_input body = CreatePaymentRequest() body.order = order body.redirect_payment_method_specific_input = payment_method_input idempotence_key = str(uuid.uuid4()) context = CallContext(idempotence_key) with init_utils.create_client() as client: response = client.merchant(MERCHANT_ID).payments().create( body, context) payment_id = response.payment.id self.assertEqual(idempotence_key, context.idempotence_key) self.assertIsNone(context.idempotence_request_timestamp) response_2 = client.merchant(MERCHANT_ID).payments().create( body, context) payment_id_2 = response_2.payment.id self.assertEqual(payment_id, payment_id_2) self.assertEqual(idempotence_key, context.idempotence_key) self.assertIsNotNone(context.idempotence_request_timestamp)
def create_payment_request(): """Creates a commonly used payment for testing""" amount_of_money = AmountOfMoney() amount_of_money.currency_code = "CAD" amount_of_money.amount = 2345 billing_address = Address() billing_address.country_code = "CA" customer = Customer() customer.billing_address = billing_address order = Order() order.amount_of_money = amount_of_money order.customer = customer card = Card() card.cvv = "123" card.card_number = "1234567890123456" card.expiry_date = "1220" payment_specific_input = CardPaymentMethodSpecificInput() payment_specific_input.payment_product_id = 1 payment_specific_input.card = card request = CreatePaymentRequest() request.order = order request.card_payment_method_specific_input = payment_specific_input return request
def example(self): with self.__get_client() as client: card = Card() card.card_number = "4567350000427977" card.cardholder_name = "Wile E. Coyote" card.cvv = "123" card.expiry_date = "1299" authentication_amount = AmountOfMoney() authentication_amount.amount = 2980 authentication_amount.currency_code = "EUR" redirection_data = RedirectionData() redirection_data.return_url = "https://hostname.myownwebsite.url" three_d_secure = ThreeDSecure() three_d_secure.authentication_amount = authentication_amount three_d_secure.authentication_flow = "browser" three_d_secure.challenge_canvas_size = "600x400" three_d_secure.challenge_indicator = "challenge-requested" three_d_secure.exemption_request = "none" three_d_secure.redirection_data = redirection_data three_d_secure.skip_authentication = False card_payment_method_specific_input = CardPaymentMethodSpecificInput( ) card_payment_method_specific_input.card = card card_payment_method_specific_input.is_recurring = False card_payment_method_specific_input.merchant_initiated_reason_indicator = "delayedCharges" card_payment_method_specific_input.payment_product_id = 1 card_payment_method_specific_input.three_d_secure = three_d_secure card_payment_method_specific_input.transaction_channel = "ECOMMERCE" amount_of_money = AmountOfMoney() amount_of_money.amount = 2980 amount_of_money.currency_code = "EUR" billing_address = Address() billing_address.additional_info = "b" billing_address.city = "Monument Valley" billing_address.country_code = "US" billing_address.house_number = "13" billing_address.state = "Utah" billing_address.street = "Desertroad" billing_address.zip = "84536" company_information = CompanyInformation() company_information.name = "Acme Labs" company_information.vat_number = "1234AB5678CD" contact_details = ContactDetails() contact_details.email_address = "*****@*****.**" contact_details.fax_number = "+1234567891" contact_details.phone_number = "+1234567890" browser_data = BrowserData() browser_data.color_depth = 24 browser_data.java_enabled = False browser_data.screen_height = "1200" browser_data.screen_width = "1920" device = CustomerDevice() device.accept_header = "texthtml,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" device.browser_data = browser_data device.ip_address = "123.123.123.123" device.locale = "en-US" device.timezone_offset_utc_minutes = "420" device.user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1 Safari/605.1.15" name = PersonalName() name.first_name = "Wile" name.surname = "Coyote" name.surname_prefix = "E." name.title = "Mr." personal_information = PersonalInformation() personal_information.date_of_birth = "19490917" personal_information.gender = "male" personal_information.name = name customer = Customer() customer.account_type = "none" customer.billing_address = billing_address customer.company_information = company_information customer.contact_details = contact_details customer.device = device customer.locale = "en_US" customer.merchant_customer_id = "1234" customer.personal_information = personal_information invoice_data = OrderInvoiceData() invoice_data.invoice_date = "20140306191500" invoice_data.invoice_number = "000000123" references = OrderReferences() references.descriptor = "Fast and Furry-ous" references.invoice_data = invoice_data references.merchant_order_id = 123456 references.merchant_reference = "AcmeOrder0001" shipping_name = PersonalName() shipping_name.first_name = "Road" shipping_name.surname = "Runner" shipping_name.title = "Miss" address = AddressPersonal() address.additional_info = "Suite II" address.city = "Monument Valley" address.country_code = "US" address.house_number = "1" address.name = shipping_name address.state = "Utah" address.street = "Desertroad" address.zip = "84536" shipping = Shipping() shipping.address = address items = [] item1_amount_of_money = AmountOfMoney() item1_amount_of_money.amount = 2500 item1_amount_of_money.currency_code = "EUR" item1_invoice_data = LineItemInvoiceData() item1_invoice_data.description = "ACME Super Outfit" item1_invoice_data.nr_of_items = "1" item1_invoice_data.price_per_item = 2500 item1 = LineItem() item1.amount_of_money = item1_amount_of_money item1.invoice_data = item1_invoice_data items.append(item1) item2_amount_of_money = AmountOfMoney() item2_amount_of_money.amount = 480 item2_amount_of_money.currency_code = "EUR" item2_invoice_data = LineItemInvoiceData() item2_invoice_data.description = "Aspirin" item2_invoice_data.nr_of_items = "12" item2_invoice_data.price_per_item = 40 item2 = LineItem() item2.amount_of_money = item2_amount_of_money item2.invoice_data = item2_invoice_data items.append(item2) shopping_cart = ShoppingCart() shopping_cart.items = items order = Order() order.amount_of_money = amount_of_money order.customer = customer order.references = references order.shipping = shipping order.shopping_cart = shopping_cart body = CreatePaymentRequest() body.card_payment_method_specific_input = card_payment_method_specific_input body.order = order try: response = client.merchant("merchantId").payments().create( body) except DeclinedPaymentException as e: self.handle_declined_payment(e.create_payment_result) except ApiException as e: self.handle_api_errors(e.errors)