public function adyenValueArray(
        $orderCurrencyCode,
        $shopperEmail,
        $customerId,
        $merchantAccount,
        $merchantReference,
        $amount,
        $shipBeforeDate,
        $skinCode,
        $shopperLocale,
        $countryCode,
        $recurringType,
        $dataString,
        $browserInfo,
        $shopperIP,
        $billingAddressType,
        $deliveryAddressType,
        $shopperType,
        $issuerId,
        $returnUrl,
        $brandCode,
        $shopperInfo,
        $billingAddress,
        $deliveryAddress,
        $openInvoiceData,
        $dfValue = null
    ) {
        $adyFields = array(
            'merchantAccount' => $merchantAccount,
            'merchantReference' => $merchantReference,
            'paymentAmount' => (int)$amount,
            'currencyCode' => $orderCurrencyCode,
            'shipBeforeDate' => $shipBeforeDate->format('Y-m-d'),
            'skinCode' => $skinCode,
            'shopperLocale' => $shopperLocale,
            'countryCode' => $countryCode,
            'sessionValidity' => $shipBeforeDate->format("c"),
            'shopperEmail' => $shopperEmail,
            'recurringContract' => $recurringType,
            'shopperReference' => $customerId,
            'shopperIP' => $shopperIP,
            'browserInfo' => $browserInfo,
            'resURL' => $returnUrl,
            'merchantReturnData' => substr(urlencode($dataString), 0, 128),
            // @todo remove this and add allowed methods via a config xml node
            'blockedMethods' => "",
            // Will only work if billingAddress, deliveryAddress and shopperInfo is in request
            'billingAddressType' => $billingAddressType,
            'deliveryAddressType' => $deliveryAddressType,
            'shopperType' => $shopperType
        );

        if (!empty($issuerId)) {
            $adyFields["issuerId"] = $issuerId;
        }

        // explode details for request
        $adyFields = $this->explodeArrayToRequestFields($adyFields, 'shopper', $shopperInfo);
        $adyFields = $this->explodeArrayToRequestFields($adyFields, 'billingAddress', $billingAddress);
        $adyFields = $this->explodeArrayToRequestFields($adyFields, 'deliveryAddress', $deliveryAddress);

        // merge openInvoiceData
        $adyFields = $adyFields + $openInvoiceData;

        // Add brandCode if payment selection is done
        if ($brandCode) {
            $adyFields['brandCode'] = $brandCode;
        }

        if ($dfValue) {
            $adyFields['dfValue'] = $dfValue;
        }

        return $adyFields;
    }