Skip to content
linzongshu edited this page May 30, 2014 · 15 revisions

Features

  • Page to display generated invitation link
  • HTTP API:
    • Get invitation link
    • Get inviter info
  • Allowed developer to customize link generator

Design

Databases

  • user_inviter

    Description Field Type Length Default value More
    Unique ID id unsigned int 10 NULL Unique, Not null, auto_increment
    User ID uid unsigned int 10 0 Not null
    Inviter ID inviter unsigned int 10 0 Not null
    Mode mode varchar 64 ' ' Not null, which mode do user get the registeration link, email ? direct link ...
    Active active tinyint 1 0 Not null
    Create time time_created unsigned int 10 0 Not null
    Site appkey appkey varchar 32 ' ' Not null, which site the user send the invitation
    • Unique key

      • uid
    • Key

      • uid_appkey_active
      • mode

Link Generator Classes

Folder structure

  • Namespace: Module\User\Inviter
    • AbstractInviter
    • DirectLink
    • Email
  • Namespace: Custom\User\Inviter (Considering latter)
    • Msn
    • Message
    • Qq
    • Twitter
    • ...

Class methods

  • generate()
    • Generate invitation link, include the ikey params, required
  • resolve()
    • Resolve params ikey from registeration link into uid, appkey and mode, required
  • render()
    • Render HTML tags displayed in invitation page for user to copy its link, required
  • send()
    • Send message to invitee if necessary, optional

Controller & Action

  • Front
    • InviteController
      • indexAction
        • Description: show links or forms for inviting users
        • Template: invite-index.phtml
      • sendAction
        • Description: process invitation sending

Configuration

  • enable_invite
    • Whether to display the invitation page or provide invitation link
  • invite_mode
    • Invitation mode allowed
  • invite_end_time
    • When to end invitation activity, the inviter will still saved, but it will be disabled, therefore other site cannot fetch the inviter info

HTTP API

  • /api/user/invite/get-link
    • Desc: get invitation link
    • Params:
      • appkey: appkey of site, required
      • uid: user id, required
      • mode: which mode link needed, optional, default value is direct-link, its value should be:
        • direct-link
        • email
    • HTTP authorization
      • username
      • password
    • Return
      • JSON string
        • status: request status
        • data: link address string

Example:

  // Get content by curl
  function get($uri, $data, $options = array())
  {
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $uri);
      curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0");
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
      curl_setopt($ch, CURLOPT_HEADER, 0);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

      if (isset($options['authorization'])) {
          $auth     = $options['authorization'];
          $username = isset($auth['username']) ? $auth['username'] : '';
          $password = isset($auth['password']) ? $auth['password'] : '';
          curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
          curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password);
      }
      $result = curl_exec($ch);

      return json_decode($result, true);
  }

  $options = array(
      'authorization' => array(
          'httpauth'  => 'basic',
          'username'  => 'yourusername',
          'password'  => 'yourpassword',
      ),
  );
  $data = array(
      'uid'    => 375,
      'appkey' => 2,
  );
  $uri    = 'http://{your user center domain}/api/user/invite/get-link';
  $result = get($uri, $data, $options);
  • /api/user/invite/get
    • Desc: get inviters info
    • Params:
      • uid: invitee user ID, optional
      • appkey: site appkey, optional
      • inviter: inviter user ID, optional
      • mode: invitation mode, optional
      • active: is active, optional
    • HTTP authorization
      • username
      • password
    • Return:
      • JSON
        • status: request status
        • data:
          • inviter: inviter user ID
          • uid: invitee user ID
          • mode: invitation mode
          • appkey: site appkey
          • time_created: registeration time of invitee
          • active: is active

Example:

// Get content by curl
$options = array(
      'authorization' => array(
          'httpauth'  => 'basic',
          'username'  => 'yourusername',
          'password'  => 'yourpassword',
      ),
  );

$query = $data = array();
$where = array(
    'uid'    => array(384, 385),
    'appkey' => 2,
);
array_walk($where, function ($value, $key) use (&$query) {
    $query[] = $key . ':' . implode('&', (array) $value);
});
$data['query']  = implode(',', $query);
$data['limit']  = 3;
$data['offset'] = 0;
$data['order']  = 'uid desc';
$data['field']  = 'appkey';

$uri    = 'http://{your user center domain}/api/user/invite/get';
// The declare of get method is as same as that above
$result = get($uri, $data, $options);
  • /api/user/invite/send
    • Desc: send invitation message if needed
    • Params:
      • mode: which mode is used to send message (e.g. : email, message), required
      • content: message content, optional, template in user module will be used if it not be set
    • Return
      • JSON
        • status: request status or message sending status
    • Example:
Clone this wiki locally