微信企业号开发(1)——建立连接(上)
连接微信企业号有三种方式
1、主动调用:主动调用是指企业应用调用企业号提供的接口,管理或查询企业号后台的资源、或给成员发送消息等
主动调用是最基本的连接模式,当调用企业号时,需要使用Https协议、Json数据格式、UTF8编码、访问域名为http://qyapi.weixin.qq.com,数据包不需要加密。
例如:
//获取企业号的部门
string url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token={0}&id={1}", accessToken, 1);
WebClient wc = new WebClient();
byte[] responseBytes = wc.DownloadData(url);
string responseStr = Encoding.UTF8.GetString(responseBytes);
//返回结果
/*
{"errcode":0,"errmsg":"ok","department":
[{"id":1,"name":"技术部","parentid":0,"order":200},
{"id":2,"name":"Android组","parentid":1,"order":200},
{"id":3,"name":"iOS组","parentid":1,"order":400},
{"id":4,"name":".net组","parentid":1,"order":600}]
}
*/
上面的例子,是获取企业号的部门,可以看到请求过程和返回结果,都是安装上面所说的格式。其中,我们需要注意一下access_token这个参数,这个参数是企业号的全局唯一票据,调用所有的接口都需要传入这个参数(如何获取我们会在后面看到)
2、回调模式:回调模式是指把用户发送的消息或用户触发的事件推送给企业应用,由企业应用处理
在回调模式下,企业应用不仅可以主动调用企业号接口,还可以处理用户发送的消息或事件。接收的消息使用XML数据格式、UTF8编码,并以AES方式加密。企业号的每个应用都有自己的回调模式开关,设置好相关参数后,此应用的回调模式才会生效。
例如:
public void ProcessRequest(HttpContext context)
{
int ret = 0;
WXBizMsgCrypt wxcpt=new WXBizMsgCrypt(token,encodingAESKey,corpId);
if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST")
{
string msg="";
string postStr = string.Empty;
using (System.IO.Stream stream = HttpContext.Current.Request.InputStream)
{
byte[] postBytes = new Byte[stream.Length];
stream.Read(postBytes, 0, (Int32)stream.Length);
postStr = System.Text.Encoding.UTF8.GetString(postBytes);//将返回的数据用UTF8解码
//接收数据不为空
if (!string.IsNullOrEmpty(postStr))
{
//将接收的数据用AES解密,微信提供的方法
ret = wxcpt.DecryptMsg(signature, timestamp, nonce, postStr, ref msg);
if (ret != 0)
{
HttpContext.Current.Response.Write("ERR:VeriyURL fail,ret:" + ret);
return;
}
//由于接收信息是xml格式的,将其读取到xml文档中
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.LoadXml(msg);
System.Xml.XmlNode root = doc.FirstChild;
string UserOID = root["FromUserName"].InnerText;
string msgType = root["MsgType"].InnerText;
//判断接收数据是一个Text类型的
if (msgType.ToLower() == "text")
{
string content = root["Content"].InnerText;
//将消息内容回发给用户
SendMessage(content);
}
}
};
}
}
上面的例子是将接收到用户发的文字消息再回发给用户,其中传输的数据格式正如上面所说的那样。SendMessage是一个自定义方法,会在以后讲到
3、JSAPI模式:JSAPI模式是指在使用Html5开发的时候,可以直接调用微信提供的原生接口,使用微信开放的终端能力。
在JSAPI模式里,微信提供了微信JS-SDK,通过使用它,web开发者可以借助微信高效的使用拍照、选图、语音、位置等手机系统能力,同时可以直接使用微信分享、扫一扫等微信特有能力。