public function createSession(
        $amount,
        $currency,
        HpsBuyerData $buyer = null,
        HpsPaymentData $payment = null,
        HpsShippingInfo $shippingAddress = null,
        $lineItems = null,
        HpsOrderData $orderData = null
    ) {
        $payload = array(
            'TransactionType' => 'WT',
            'OverridePaymentMethod' => 'MPPWLT',
            'Amount' => $this->formatAmount($amount),
            'CurrencyCode' => $this->currencyStringToNumeric($currency),
            'OverrideCheckoutType' => $this->getCheckoutType($orderData),
            'ConnectTimeout' => '10000',
            'TransactionMode' => 'S',
            'OrderNumber' => $orderData->orderNumber,
            'IPAddress' => $orderData->ipAddress,
            'BrowserHeader' => $orderData->browserHeader,
            'UserAgent' => $orderData->userAgent,
            'OriginUrl' => $orderData->originUrl,
            'TermUrl' => $orderData->termUrl,
        );
        if ($orderData->orderId !== null) {
            $payload['OrderId'] = $orderData->orderId;
        }
        if ($buyer !== null) {
            $payload = array_merge($payload, $this->hydrateBuyerData($buyer));
        }
        if ($payment !== null) {
            $payload = array_merge($payload, $this->hydratePaymentData($payment));
        }
        if ($shippingAddress !== null) {
            $payload = array_merge(
                $payload,
                $this->hydrateShippingInfo($shippingAddress)
            );
        }
        if ($lineItems !== null) {
            $payload = array_merge($payload, $this->hydrateLineItems($lineItems));
        }
        return $this->submitTransaction($payload, 'cmpi_lookup');
    }