1.申请微信企业号测试帐号,参考http://www.cnblogs.com/comsokey/p/enterprise.html。php
2.熟悉微信企业号后台功能,参考http://www.cnblogs.com/comsokey/p/enterprise.html。html
着重练习下通信录管理,能够先看本文的最后部分。数据库
3.获取AccessToken,参考http://qydev.weixin.qq.com/wiki/index.php?title=%E4%B8%BB%E5%8A%A8%E8%B0%83%E7%94%A8json
(1)系统管理员可经过管理端的权限管理功能建立管理组,分配管理组对应用、通信录的访问权限。完成后,管理组便可得到惟一的secret。api
(2)系统管理员可经过权限管理查看全部管理组的secret,其余管理员可经过设置中的开发者凭据查看。微信
(3)当企业应用调用企业号接口时,企业号后台为根据这次访问的AccessToken,校验访问的合法性以及所对应的管理组的管理权限以返回相应的结果。app
AccessToken须要用CorpID和Secret来换取,不一样的Secret会返回不一样的AccessToken。正常状况下AccessToken有效期为7200秒,有效期内重复获取返回相同结果;有效期内有接口交互(包括获取AccessToken的接口),会自动续期。函数
点击[建立并管理全部分级管理员帐号]url
如下界面会看到CorpID及Secret,
4.企业获取code(参考http://qydev.weixin.qq.com/wiki/index.php?title=OAuth%E9%AA%8C%E8%AF%81%E6%8E%A5%E5%8F%A3)
企业若是须要员工在跳转到企业网页时带上员工的身份信息,需构造以下的连接:(注意必须在微信中发起,作法能够是新建一个菜单,而后将下面连接绑定到菜单项)
举个例子(appid是上节获得的CorpID)
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx4396b735dd7d0519&redirect_uri=http://www.douyh.com&response_type=code&scope=snsapi_base&state=111&connect_redirect=1#wechat_redirect
接下来讲一下如何将连接绑定到菜单项。仍是在本身的微信企业号后台:
应用中心,以下图:
新建一个应用:
好比考勤,建好后,点击考勤,进到如下界面:
点击模式选择下的普通模式,进入到如下界面:
点击启用
点右上角加号:
点击跳转到网页按钮,将上面 的连接添加到里面,以下图所示:
不要忘记保存和发布。
须要注意的是:此URL的域名,必须彻底匹配企业应用设置项中的'可信域名'(若是你的redirect_uri有端口号,那'可信域名'也必须加上端口号),不然跳转时会提示redirect_uri参数错误。
设置可信域名的地方在下面这里:
点击菜单,会访问如下连接:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx4396b735dd7d0519&redirect_uri=http://www.douyh.com&response_type=code&scope=snsapi_base&state=111&connect_redirect=1#wechat_redirect
会新跳转到一个新连接,在微信里点击复制连接:
页面将跳转至 redirect_uri/?code=CODE&state=STATE
在程序里,咱们能够经过request["code"]拿到CODE
这个CODE参数加上上节的AccessToken有助于咱们拿到登陆者的userid,而经过这个userid(按必定规则定义),咱们能够识别登陆者身份。
(参考http://qydev.weixin.qq.com/wiki/index.php?title=OAuth%E9%AA%8C%E8%AF%81%E6%8E%A5%E5%8F%A3)
Https请求方式:GET
https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
a)企业成员受权时返回示例以下:
{ "UserId":"USERID", "DeviceId":"DEVICEID" }
经过这个userid,咱们能够获得登陆者信息,好比userid当时在后台定义成回汇雅_财务_张三],咱们能够经过userid解析出登陆者的工厂和角色,从而决定出其可以使用系统功能范围。
userid是第一部分中,申请到测试企业号后,本身在用户管理界面中添加的。注意,要先在后台添加好用户(用户的微信号,电话,邮箱),而后相应用户扫描微信号才能够关注成功。
这篇文章的例子不错,能够参考一下:
http://blog.csdn.net/angle_greensky110/article/details/32936289
如下给出一段例子代码:
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Net; using System.Text; using System.Runtime.Serialization.Json; using System.IO; using System.Data.SqlClient; public partial class wxProcess2 : System.Web.UI.Page { public string reurl = ""; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string code = ""; if (Request.QueryString["code"] != null && Request.QueryString["code"] != "") { //获取微信回传的code code = Request.QueryString["code"].ToString(); AccessToken Model = Get_AccessToken(); //获取token OAuthUser OAuthUser_Model = Get_UserInfo(Model.access_token, code); if (OAuthUser_Model.UserId != null && OAuthUser_Model.UserId != "") //已获取得openid及其余信息 { //在页面上输出用户信息 Response.Write("用户UserId:" + OAuthUser_Model.UserId); //或跳转到本身的页面,想怎么处理就怎么处理 //Response.Redirect(reurl); } } } } #region 属性 public string strCorpID = "wx43b735dd7d0519"; //公众微信平台下能够找到 public string appsecret = "nRqMz-tGd-rspiEKJDFp9DqaG-tj7NW3TRBIMlAHYjsKCD6L8MYsTIGCCdvGZC"; //公众微信平台下能够找到 #endregion //https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=id&corpsecret=secrect //根据appid,secret,code获取微信openid、access token信息 protected AccessToken Get_AccessToken() { //获取微信回传的openid、access token string Str = GetJson("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + strCorpID + "&corpsecret=" + appsecret); //微信回传的数据为Json格式,将Json格式转化成对象 AccessToken Oauth_Token_Model = JsonHelper.ParseFromJson<AccessToken>(Str); return Oauth_Token_Model; } // https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE //根据openid,access token得到用户信息 protected OAuthUser Get_UserInfo(string strAccessToken, string strCode) { string Str = GetJson("https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=" + strAccessToken + "&code=" + strCode); OAuthUser OAuthUser_Model = JsonHelper.ParseFromJson<OAuthUser>(Str); return OAuthUser_Model; } //访问微信url并返回微信信息 protected string GetJson(string url) { WebClient wc = new WebClient(); wc.Credentials = CredentialCache.DefaultCredentials; wc.Encoding = Encoding.UTF8; string returnText = wc.DownloadString(url); if (returnText.Contains("errcode")) { //可能发生错误 } return returnText; } /// <summary> /// token类 /// </summary> public class AccessToken { public AccessToken() { // //TODO: 在此处添加构造函数逻辑 // } //access_token 网页受权接口调用凭证,注意:此access_token与基础支持的access_token不一样 //expires_in access_token接口调用凭证超时时间,单位(秒) private string _access_token; private string _expires_in; public string access_token { set { _access_token = value; } get { return _access_token; } } public string expires_in { set { _expires_in = value; } get { return _expires_in; } } } /// <summary> /// 用户信息类 /// </summary> public class OAuthUser { public OAuthUser() { } #region 数据库字段 private string _UserId; private string _DeviceId; #endregion #region 字段属性 /// <summary> /// 用户的惟一标识 /// </summary> public string UserId { set { _UserId = value; } get { return _UserId; } } /// <summary> /// /// </summary> public string DeviceId { set { _DeviceId = value; } get { return _DeviceId; } } #endregion } /// <summary> /// 将Json格式数据转化成对象 /// </summary> public class JsonHelper { /// <summary> /// 生成Json格式 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="obj"></param> /// <returns></returns> public static string GetJson<T>(T obj) { DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType()); using (MemoryStream stream = new MemoryStream()) { json.WriteObject(stream, obj); string szJson = Encoding.UTF8.GetString(stream.ToArray()); return szJson; } } /// <summary> /// 获取Json的Model /// </summary> /// <typeparam name="T"></typeparam> /// <param name="szJson"></param> /// <returns></returns> public static T ParseFromJson<T>(string szJson) { T obj = Activator.CreateInstance<T>(); using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson))) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); return (T)serializer.ReadObject(ms); } } } }