code: function invokeBaidu(options, cbk) {
      // check required parameters
      if (!options || !options.uri || !options.params) {
          throw new Error('Lack required parameters');
      }
      //
      var uri = util.format("http://api.tuisong.baidu.com/rest/3.0/%s", options.uri);
      // build post params
      var params = options.params;
      params.timestamp = Math.round(Date.now() / 1000);
      params.apikey = options.apiKey;
      var httpInfo = {
          href: uri,
          method: defaultMethod
      };
      params.sign = signKey(httpInfo, params, options.secretKey);
      // build post options
      var requestOptions = {
          uri: uri,
          headers: defaultHeaders,
          method: defaultMethod,
          form: params
      };
      // do request (if provide callback function use the traditinal way, if not use promise way)
      if (typeof cbk === 'function') {
          request(requestOptions, function (err, response, body) {
              var result = dealResult(err, body);
              result.error ? cbk(result.error) : cbk(null, result.data);
          });
      } else {
          return new Promise(function(resolve, reject) {
              request(requestOptions, function(err, response, body) {
                  var result = dealResult(err, body);
                  result.error ? reject(result.error) : resolve(result.data);
              });
          });
      }
  }
docs: /*
  basic request helper method
  
  @param {Object} options 百度推送服务配置
  @return {promise} 若提供了回调函数, 返回结果以回调的形式返回, 如果没有提供回调函数, 返回promise对象