1.应用场景:
企业微信中开发一个公共入口,用来外部各个子系统中的公用功能的整合;
2.业务分析:
集团公司为了适应市场变化,拆分为四个子公司;现有集团资产管理系统,上层的决策是把系统代码直接复制为四套,分别部署在四个服务器中独立域名,独立数据库(已实施);
为我们后面维护造成了很大的问题;五月份通知全体公司要进行资产年度盘点,指定必须用移动端进行盘点;
3.架构方案:
由于公司已有自己的企业微信平台,所以采用在企业微信工作台,新建一个盘点应用入口;开发一个H5站点作为UI(可以使用扫一扫进行扫码录入),在四套系统里开发相同的盘点接口供H5调用;
4.开发:
主要分为 1.前端H5 界面开发; 2 .调用企业微信API; 3.调用四个系统的接口;这里主要讲下企业微信API的调用
首先需要管理员身份进入公司的企业微信后台 https://work.weixin.qq.com/,创建好应用,并配置我们应用的 回调站点,必须是有效域名,这里需要注意的是需要把获取的 密匙txt文件WW_verify_wApslD6X0ysCCA8G.txt 放入服务器根目录下进行验证服务器

这里只说一下后台获取企业微信的配置 后台使用的是MVC Controller

1 #region Get Post Http
2 /// <summary>
3 /// 创建GET方式的HTTP请求
4 /// </summary>
5 /// <param name="url">请求的URL</param>
6 /// <param name="timeout">请求的超时时间</param>
7 /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>
8 /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>
9 /// <returns></returns>
10 public static HttpWebResponse CreateGetHttpResponse(string url, int? timeout, string userAgent, CookieCollection cookies, string headerValue = "")
11 {
12 if (string.IsNullOrEmpty(url))
13 {
14 throw new ArgumentNullException("url");
15 }
16 HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
17 request.Method = "GET";
18 //request.UserAgent = DefaultUserAgent;
19 request.KeepAlive = false;
20 if (!string.IsNullOrEmpty(headerValue))
21 {
22 request.Headers.Add("Authorization", headerValue);
23 }
24 if (!string.IsNullOrEmpty(userAgent))
25 {
26 request.UserAgent = userAgent;
27 }
28 if (timeout.HasValue)
29 {
30 request.Timeout = timeout.Value;
31 }
32 if (cookies != null)
33 {
34 request.CookieContainer = new CookieContainer();
35 request.CookieContainer.Add(cookies);
36 }
37 return request.GetResponse() as HttpWebResponse;
38 }
39
40
41 /// <summary>
42 /// 创建POST方式的HTTP请求
43 /// </summary>
44 public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, int timeout, string userAgent, CookieCollection cookies, string headerValue = "")
45 {
46 HttpWebRequest request = null;
47 //如果是发送HTTPS请求
48 if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
49 {
50 //ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
51 request = WebRequest.Create(url) as HttpWebRequest;
52 //request.ProtocolVersion = HttpVersion.Version10;
53 }
54 else
55 {
56 request = WebRequest.Create(url) as HttpWebRequest;
57 }
58 request.Method = "POST";
59 request.ContentType = "application/x-www-form-urlencoded";
60 if (!string.IsNullOrEmpty(headerValue))
61 {
62 request.Headers.Add("Authorization", headerValue);
63 }
64 //设置代理UserAgent和超时
65 //request.UserAgent = userAgent;
66 request.Timeout = timeout;
67 request.KeepAlive = false;
68 if (cookies != null)
69 {
70 request.CookieContainer = new CookieContainer();
71 request.CookieContainer.Add(cookies);
72 }
73 //发送POST数据
74 if (!(parameters == null || parameters.Count == 0))
75 {
76 StringBuilder buffer = new StringBuilder();
77 int i = 0;
78 foreach (string key in parameters.Keys)
79 {
80 if (i > 0)
81 {
82 buffer.AppendFormat("&{0}={1}", key, parameters[key]);
83 }
84 else
85 {
86 buffer.AppendFormat("{0}={1}", key, parameters[key]);
87 i++;
88 }
89 }
90 byte[] data = Encoding.ASCII.GetBytes(buffer.ToString());
91 using (Stream stream = request.GetRequestStream())
92 {
93 stream.Write(data, 0, data.Length);
94 }
95 }
96 string[] values = request.Headers.GetValues("Content-Type");
97 return request.GetResponse() as HttpWebResponse;
98 }
99
100 /// <summary>
101 /// 获取请求的数据
102 /// </summary>
103 public static string GetResponseString(HttpWebResponse webresponse)
104 {
105 using (Stream s = webresponse.GetResponseStream())
106 {
107 StreamReader reader = new StreamReader(s, Encoding.UTF8);
108 return reader.ReadToEnd();
109
110 }
111 }
112
113
114 #endregion
首先需要获取access_token
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRECT
https://work.weixin.qq.com/api/doc#10013/第一步:创建企业应用并获取secret

1 //缓存网关token
2 private string GetCacheGatewayToken()
3 {
4 if (HttpRuntime.Cache["GatewayToken"] == null)
5 {
6 var token = CommonTools.GetGrantToken(Constants.GrantServiceUrl);
7 HttpRuntime.Cache.Insert("GatewayToken", token, null, System.DateTime.Now.AddHours(1), TimeSpan.Zero);
8 }
9 return HttpRuntime.Cache["GatewayToken"].ToString();
10 }
11
12
13 //public static string GetGrantToken(string url)
14 //{
15 // var result = string.Empty;
16 // IDictionary<string, string> postData = new Dictionary<string, string>();
17 // postData.Add("client_id", Constants.WX_ClientID);
18 // postData.Add("client_secret", Constants.WX_ClientSecret);
19 // postData.Add("grant_type", Constants.WX_GrantType);
20 // postData.Add("scope", Constants.WX_GrantScope);
21 // //var param = string.Format("{{\"client_id\":{0},\"client_secret\":\"{1}\",\"grant_type\":\"{2}\",\"scope\":\"{3}\"}}", Constants.WX_ClientID, Constants.WX_ClientSecret, Constants.WX_GrantType, Constants.WX_GrantScope);
22 // var strResponseInfo = RequestTool.CreatePostHttpResponse(url, postData, 60000, null, null);
23 // if (strResponseInfo != null)
24 // result = RequestTool.GetResponseString(strResponseInfo);
25 // return result;
26 //}

private static string CreateRandCode(int codeLen)
{
string codeSerial = "2,3,4,5,6,7,a,c,d,e,f,h,i,j,k,m,n,p,r,s,t,A,C,D,E,F,G,H,J,K,M,N,P,Q,R,S,U,V,W,X,Y,Z";
if (codeLen == 0)
{
codeLen = 16;
}
string[] arr = codeSerial.Split(',');
string code = "";
int randValue = -1;
Random rand = new Random(unchecked((int)DateTime.Now.Ticks));
for (int i = 0; i < codeLen; i++)
{
randValue = rand.Next(0, arr.Length - 1);
code += arr[randValue];
}
return code;
}

System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 long timeStamp = (long)(DateTime.Now - startTime).TotalSeconds; // 相差秒数 System.Console.WriteLine(timeStamp);
前端 获取到wx.config后就可以引入 js了
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
这时页面就可以调用企业微信api了;
后续应用中还设计到了一个网页授权;
https://work.weixin.qq.com/api/doc#10028
这里我们使用了 自己构建一个空的 form表单 获取到跳转的url后 提交,跳转的第二页,再从url中获取code ,通过code和 appid 获取登录企业微信的用户ID
来源:https://www.cnblogs.com/yanghucheng/p/9055888.html
