public function purchase($money, $creditcard, $options = array())
    {

        Options::required('order_id, ip', $options);

        $this->post = array();

        $options = new Options($options);

        $this->addInvoice($options->order_id, $money);

        if (is_string($creditcard)) {
            Options::required('cvv', $options);
            $this->post['card_token'] = $creditcard;
        } else {
            $this->addCreditcard($creditcard);
        }

        $this->addCustomerData($options);

        return $this->commit('purchases');
    }