[原创] 微信企业号接口实现

微信 企业号 接口

2015-07-30 2315

调用微信企业号的开发接口,实现用户相关的功能,如授权获取用户信息,获取部门信息,新增用户等。

具体代码如下:


#企业号授权部分
  #企业的CorpID
  $qy_corp_id = 'wxe5839e0e55fe760d'
  $qy_secret = 'Obt9d4c4joC7j4VGZhYy0figm_6sVdxndJUO2b8R7k23tREHZiDK3KDxIV1Gguhd'
  def qy_oauth2
    #授权后重定向的回调链接地址,请使用urlencode对链接进行处理
    redirect_url = 'http://test.lixuanqi.com/common/qy_oauth_back'
    #应用授权作用域,此时固定为:snsapi_base
    scope = 'snsapi_base'
    state ='yuluo'
    str_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{$qy_corp_id}&redirect_uri=#{redirect_url}&response_type=code&scope=#{scope}&state=#{state}#wechat_redirect"
    redirect_to str_url
  end
  #企业授权页面回调
  def qy_oauth_back
    token_data = get_qy_token
    Rails.logger.info(token_data)
    if token_data["errcode"].blank?
      Rails.logger.info "access_token值为:"+token_data["access_token"]
      #获取用户code
      str_user_code_url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=#{token_data["access_token"]}&code=#{params[:code]}"
      user_code_data = JSON.parse(RestClient.get(str_user_code_url))
      # 把返回结果写入日志
      Rails.logger.info user_code_data.to_json

      #获取企业用户信息
      str_user_info_url = "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=#{token_data["access_token"]}&userid=#{user_code_data["UserId"]}"
      # 把返回结果写入日志
      Rails.logger.info str_user_info_url
      user_info_data = JSON.parse(RestClient.get(str_user_info_url))

      # 用户信息返回数据说明
      # errcode	返回码
      # errmsg	对返回码的文本描述内容
      # userid	成员UserID。对应管理端的帐号
      # name	成员名称
      # department	成员所属部门id列表
      # position	职位信息
      # mobile	手机号码
      # gender	性别。0表示未定义,1表示男性,2表示女性
      # email	邮箱
      # weixinid	微信号
      # avatar	头像url。注:如果要获取小图将url最后的"/0"改成"/64"即可
      # status	关注状态: 1=已关注,2=已冻结,4=未关注
      # extattr

      Rails.logger.info user_info_data.to_json
      render json: user_info_data
    else
      Rails.logger.info "获取token失败"
      render json: token_data
    end
  end

  #创建成员
  def create_qy_user
    token_data = get_qy_token
    str_create_url = "https://qyapi.weixin.qq.com/cgi-bin/user/create?access_token=#{token_data["access_token"]}"

    # 创建用户的参数说明
    # 参数	必须	说明
    # access_token	是	调用接口凭证
    # userid	是	成员UserID。对应管理端的帐号,企业内必须唯一。长度为1~64个字节
    # name	是	成员名称。长度为1~64个字节
    # department	否	成员所属部门id列表。注意,每个部门的直属成员上限为1000个
    # position	否	职位信息。长度为0~64个字节
    # mobile	否	手机号码。企业内必须唯一,mobile/weixinid/email三者不能同时为空
    # gender	否	性别。1表示男性,2表示女性
    # email	否	邮箱。长度为0~64个字节。企业内必须唯一
    # weixinid	否	微信号。企业内必须唯一。(注意:是微信号,不是微信的名字)
    # avatar_mediaid	否	成员头像的mediaid,通过多媒体接口上传图片获得的mediaid
    # extattr	否	扩展属性。扩展属性需要在WEB管理端创建后才生效,否则忽略未知属性的赋值

    result = RestClient.post(str_create_url,{
        "userid"=> "lisi",
        "name"=> "李四",
        "department"=> [1],
        "position"=> "产品经理",
        "mobile"=> "15913215422",
        "gender"=> "1",
        "email"=> "lisi@gzdev.com",
        "extattr"=> {"attrs"=>[{"name"=>"爱好","value"=>"旅游"},{"name"=>"卡号","value"=>"1234567234"}]}}.to_json, :content_type => :json)
    render json: result.as_json
  end

  #获取部门列表
  def get_qy_department
    token_data = get_qy_token
    str_department_url = "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=#{token_data["access_token"]}"
    if params[:id]
      # 部门id。获取指定部门及其下的子部门
      str_department_url = "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=#{token_data["access_token"]}&id=#{params[:id]}"
    end
    str_department_data = RestClient.get(str_department_url)
    # 把返回结果写入日志
    Rails.logger str_department_data
    department_data = JSON.parse(str_department_data)
    # 企业部门数据,返回数据说明
    # errcode	返回码
    # errmsg	对返回码的文本描述内容
    # department	部门列表数据。以部门的order字段从小到大排列
    # id	部门id
    # name	部门名称
    # parentid	父亲部门id。根部门为1
    # order	在父部门中的次序值。order值小的排序靠前。
    render json:department_data
  end

  #获取企业接口中需要使用的token值
  def get_qy_token
    # 参数说明
    # corpid	是	企业Id
    # corpsecret	是	管理组的凭证密钥
    str_token_url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=#{$qy_corp_id}&corpsecret=#{$qy_secret}"
    token_data = JSON.parse((RestClient.get(str_token_url)))
    return token_data
  end