Creates a payment object, which provides a single reference to all the transactions that make up a payment.
        This is the first step for all financial transactions.

        Args:
            amount: Amount must be greater than 0. The amount is formatted in Minor Units format.
            currency: The three character currency code in ISO-4217 format.
            order: Details of the order.
            customer_id: Identifier of the customer associated with this payment.
            billing_address: Billing address details. This will only be sent to providers who support
            billing addresses, in requests that support them. Note: The billing address details will be sent "as is",
            without any corrections or substitutions from the billing address in the token resource.
            shipping_address: Shipping address details. This will only be sent to providers who support
            shipping addresses, in requests that support them. Note: The shipping address details will be sent "as is",
            without any corrections or substitutions from the shipping address in the customer resource.
            additional_details: Optional additional data stored in key/value pairs.
            statement_soft_descriptor: The transaction description that will appear in the
            customer's credit card statement, which identifies the merchant and payment.
            Check the relevant provider sites to see if this field is supported.
            If so, see the required content and format. Note: This transaction description is generated by you.
            Providing a clear description helps your customers recognize their transactions, and reduces chargebacks.

        Returns:

def create_payment(self, *, amount, currency, order=None, customer_id=None, billing_address=None,
                       shipping_address=None, additional_details=None, statement_soft_descriptor=None):
        """
        Creates a payment object, which provides a single reference to all the transactions that make up a payment.
        This is the first step for all financial transactions.

        Args:
            amount: Amount must be greater than 0. The amount is formatted in Minor Units format.
            currency: The three character currency code in ISO-4217 format.
            order: Details of the order.
            customer_id: Identifier of the customer associated with this payment.
            billing_address: Billing address details. This will only be sent to providers who support
            billing addresses, in requests that support them. Note: The billing address details will be sent "as is",
            without any corrections or substitutions from the billing address in the token resource.
            shipping_address: Shipping address details. This will only be sent to providers who support
            shipping addresses, in requests that support them. Note: The shipping address details will be sent "as is",
            without any corrections or substitutions from the shipping address in the customer resource.
            additional_details: Optional additional data stored in key/value pairs.
            statement_soft_descriptor: The transaction description that will appear in the
            customer's credit card statement, which identifies the merchant and payment.
            Check the relevant provider sites to see if this field is supported.
            If so, see the required content and format. Note: This transaction description is generated by you.
            Providing a clear description helps your customers recognize their transactions, and reduces chargebacks.

        Returns:

        """
        headers = self.client._get_private_headers()
        payload = {
            "amount": amount,
            "currency": currency,
            "order": order,
            "customer_id": customer_id,
            "billing_address": billing_address,
            "shipping_address": shipping_address,
            "additional_details": additional_details,
            "statement_soft_descriptor": statement_soft_descriptor,
        }
        endpoint = '/payments'
        return self.client._post(self.client.URL_BASE + endpoint, json=payload, headers=headers)