Add field in hook_node_info();
You need to attach the fields separately, they can't be added through hook_node_info(). You would usually do this in a hook_install() function in your module's .install file. 

A nice simple example from Drupal core is in the blog module's install file:

function blog_install() {
  // Ensure the blog node type is available.
  node_types_rebuild();
  $types = node_type_get_types();
  node_add_body_field($types['blog']);
}


The function simply rebuilds the node types (so the newly added type is available), then adds a body field to it using the node_add_body_field() function. This function in itself gives an excellent example of how to create a field, an instance of that field, and then attach it to a content type using the field_create_field() and field_create_instance() functions.

The code isn't that so long so I'll include it here as an example:

function node_add_body_field($type, $label = 'Body') {
  // Add or remove the body field, as needed.
  $field = field_info_field('body');
  $instance = field_info_instance('node', 'body', $type-&gt;type);
  if (empty($field)) {
    $field = array(
      'field_name' =&gt; 'body', 
      'type' =&gt; 'text_with_summary', 
      'entity_types' =&gt; array('node'),
    );
    $field = field_create_field($field);
  }
  if (empty($instance)) {
    $instance = array(
      'field_name' =&gt; 'body', 
      'entity_type' =&gt; 'node', 
      'bundle' =&gt; $type-&gt;type, 
      'label' =&gt; $label, 
      'widget' =&gt; array('type' =&gt; 'text_textarea_with_summary'), 
      'settings' =&gt; array('display_summary' =&gt; TRUE), 
      'display' =&gt; array(
        'default' =&gt; array(
          'label' =&gt; 'hidden', 
          'type' =&gt; 'text_default',
        ), 
        'teaser' =&gt; array(
          'label' =&gt; 'hidden', 
          'type' =&gt; 'text_summary_or_trimmed',
        ),
      ),
    );
    $instance = field_create_instance($instance);
  }
  return $instance;
}