1. http接口非restful调用接口:
  2. 宁卫通信
  3. 新闻动态
  4. 宁卫新闻
  5. http接口非restful调用接口

http接口非restful调用接口

//ts格式 time.Now().Format("20060102150405")
//username为用户名
//password不在实际通信中传输,而是经过和时间一起做了md5后打进sign中传输
func Check_sign(sign, ts, username, password string) bool {
  //所有的通过http接口调用都需要这样认证,不论次数,不论哪个接口
  //需要password,ts,username
  nway_ori_str := "password=" + password + "&ts=" + ts + "username=" + username
  h := md5.New()
  h.Write([]byte(nway_ori_str))
  tmp_sign := hex.EncodeToString(h.Sum(nil))
  if sign == tmp_sign {
    return true
  }
  return false
}
//签权规则
func Nway_comm_chk_sign(P *ParseRequest) (bool, string) {
  sign := P.String("sign", "")
  ts := P.String("ts", "")
  username := P.String("username", "")
    //以上三样是由请求方发过来的
  if *username != nway_global.Http_service_username {
    logger.Error(*username + " not a valid username")
    return false, "not a valid username"
  }
  //时间必须是当时上海时间五分钟内
  if Check_time(*ts) == false {
    //时间不在五分钟内
    logger.Error(*username + "time more than 5 minutes")
    return false, "time more than 5 minutes"
  }
    //按ts,username等,进行生成sign
  if Check_sign(*sign, *ts, *username, nway_global.Http_service_password) == false {
    logger.Error(*username + "sign not a valid sign")
    return false, "sign not a valid sign"
  }
  return true, ""
}
//
func StartHttpService(ipport string) {
  /*
    调用返回结果,肯定都会返回的有以下:
    "info" :用于返回一些信息
    "code" :用于返回调用结果,有以下一些码:"200ok":成功,"404":找不到资源,"500":服务器错误,"401":认证没通过,"403":sign部分认证不通过
    "execute_result"  :用于返回执行结果
    同时会在接口中返回各自的一些必要参数

  */

  ///agent
  /*
    说明:上线
      输入:
      extension  分机
      group 组
      返回:
      extension  分机
      group 组
  */
  http.HandleFunc("/agent_up", Http_Agent_up)
  /*
    说明:下线
      输入:
      extension  分机

      返回:
      extension  分机
  */
  http.HandleFunc("/agent_down", Http_Agent_down)
  /*
    说明:置闲
      输入:
      extension  分机

      返回:
      extension  分机
  */
  http.HandleFunc("/agent_ready", Http_Agent_ready)
  /*
    说明:置忙
      输入:
      extension  分机

      返回:
      extension  分机
  */
  http.HandleFunc("/agent_busy", Http_Agent_busy)
  ///vip
  /*
    说明:添加一个vip
      输入:
      group  组
      phone  电话号码
      返回:
      group  组
      phone  电话号码
  */
  http.HandleFunc("/vip_queue_add", Http_Vip_queue_add)
  /*
    说明:删除一个vip
      输入:
      group  组
      phone  电话号码
      返回:
      group  组
      phone  电话号码
  */
  http.HandleFunc("/vip_queue_remove", Http_Vip_queue_remove)

  //系统信息获取
  /*
    说明:获取一个uuid
      输入:

      返回:
      uuid
  */
  http.HandleFunc("/get_uuid", Http_Get_uuid)
  /*
    说明:心跳检测
      输入:

      返回:
          uuid
  */
  http.HandleFunc("/heartbeat", Http_HeartBeat)
  //获取某个通话中电话的uuid
  /*
    说明:获取通话中的电话的uuid
      输入:
        phone 电话号码
      返回:
          uuid
  */
  http.HandleFunc("/get_phone_uuid", Http_get_phone_uuid)
  //挂断
  /*
    说明:挂断某个号码的通话
      输入:
        phone 电话号码
      返回:

  */
  http.HandleFunc("/hangup", Http_hangup)
  //hold和park,park后需要转到其它电话中去
  /*
    说明:hold某个号码正在通话的通道
      输入:
        phone 电话号码
      返回:

  */
  http.HandleFunc("/hold", Http_hold)
  /*
    说明:unhold某个号码正在通话的通道
      输入:
        phone 电话号码
      返回:

  */
  http.HandleFunc("/unhold", Http_unhold)
  /*
    说明:park某个号码正在通话的通道
      输入:
        phone 电话号码
      返回:

  */
  http.HandleFunc("/park", Http_park)
  /*
    说明:应答某个号码正在通话的通道
      输入:
        phone 电话号码
      返回:

  */
  http.HandleFunc("/phone_answer", Http_phone_answer)
  //黑名单
  /*
    说明:对某个组添加黑名单
      输入:
        Call_number 电话号码
        Group_number 组名
      返回:

  */
  http.HandleFunc("/add_black_list", Http_add_black_list)
  /*
    说明:移除某个组里的某个黑名单
      输入:
        Call_number 电话号码
        Group_number 组名
      返回:

  */
  http.HandleFunc("/delete_black_list", Http_delete_black_list)
  //呼叫
  /*
    说明:由平台发起呼叫
      输入:
        Job_uuid       指定的uuid
        Callername     主叫名称
        Callernum      主叫号码
        Calleenum      被叫号三
        A_gatewayname  如果主叫是外线,则需要指定网关名
        B_gatewayname  如果被叫是外线,则需要指定网关名
        A_effective_caller_id_num 在主叫处显示的号码
        B_effective_caller_id_num 在被叫处显示的号码
        A_external 主叫是外线
        B_external 被叫是外线
      返回:

  */
  http.HandleFunc("/originate", Http_originate)
  //更多originate需要通过restful接口调用
  //代接
  /*
    说明:由平台发起代接
      输入:
          phone    用于代接最后来电的号码,如办公室最后只有一个人了,这个人调用这个接口,就会呼到这个号码用于和主叫来通话
      返回:
  */
  http.HandleFunc("/intercept", Http_intercept)
  //监听
  /*
    说明:由平台发起代接
      输入:
        EvdedPhone  被监听的号码
        EvdPhone    要呼出的号码,即班组长分机
        EvdGateway  如果监听者电话是外线,需要指定网关,比如老板在外边,让班组长指定监听某个客服的讲话
      返回:
  */
  http.HandleFunc("/eavesdrop", Http_eavesdrop)
  //三方通话
  /*
    说明:三方通话
      输入:
        EvdedPhone 被监听的号码
        EvdPhone   要呼出的号码,即班组长分机
        EvdGateway 如果监听者电话是外线,需要指定网关,比如老板在外边,让班组长指定监听某个客服的讲话
        DisplayNumber 监听者显示的号码,一般用于内线
      返回:
  */
  http.HandleFunc("/threeway", Http_threeway)
  /*
    说明:耳语
      输入:
        EvdedPhone  被监听的号码
        EvdPhone    要呼出的号码,即班组长分机
        EvdGateway  如果监听者电话是外线,需要指定网关,比如老板在外边,让班组长指定和某个客服的讲话,并不被客户听到
      返回:
  */
  http.HandleFunc("/whisper", Http_whisper)
  /*
    说明:转接
      输入:
        EvdedPhone  要转出的号码
        EvdPhone    要被转的号码
        EvdGateway  如果被转的是外线,需要指定网关
      返回:
  */
  http.HandleFunc("/transfer", Http_transfer)

  /*
    说明:放音
      输入:
        PhoneNumber  号码
        FilePath     路径
        Loopplay     是否循环播放
        Channel      两个通道是对哪个通道放音:both,都放;caller,主叫放音; callee,被叫放音
      返回:
  */
  http.HandleFunc("/playback", Http_playback)

  /*
    说明:查询分机信息
      输入:
        phone  号码

      返回:
         code 200OK, 同时由 ext_info 返回用户信息
  */
  http.HandleFunc("/extension_info", Http_extension_info)
  /*
    说明:让ip话机接听
      输入:
        uuid  这一通电话的uuid通道

      返回:

  */
  http.HandleFunc("/uuid_phone_answer", Http_uuid_phone_answer)
  logger.Error(http.ListenAndServe(ipport, nil))
}