版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
REFDocTitleOracleERP最佳技术实践REFLastDateMarch20,2013IfSection1>1“DateAuthorVersionChangeReference2015/05/29Zhengyan.CaoDraft1aNoPreviousDocumentReviewersNamePositionDistributionCopyNo.NameLocationNoteToHolders:Ifyoureceiveanelectroniccopyofthisdocumentandprintitout,pleasewriteyournameontheequivalentofthecoverpage,fordocumentcontrolpurposes.Ifyoureceiveahardcopyofthisdocument,pleasewriteyournameonthefrontcover,fordocumentcontrolpurposes.ContentsTOC\o"2-3"DocumentControl iiPreface 11. 前情提要 21.1. Http 21.2. Json 42. 企业号注册 72.1. 申请体验号 72.2. 申请企业号 103. 企业号新手指南 143.1. 建立通讯录 143.2. 创建应用 144. 微信企业号接口测试系统 164.1. 通用处理函数 164.2. 启用回调模式 204.3. 获取AccessToken 254.4. 通讯录管理 264.5. 多媒体管理 444.6. 企业号应用管理 464.7. 发送消息 504.8. 自定义菜单 545. 官方接口参考 565.1. 建立连接 565.2. 管理通讯录 585.3. 管理多媒体文件 885.4. 管理管理企业号应用 905.5. 接收消息与事件 955.6. 发送消息 995.7. 自定义菜单 1065.8. 身份验证接口 1115.9. 第三方应用授权 1135.10. 企业号登录授权 1365.11. 企业号微信支付 1415.12. 附录 1425.13. 接口集成 1466. OpenandClosedIssuesforthisDeliverable 148OpenIssues 148ClosedIssues 148PAGE10Preface企业号是微信为企业客户提供的移动应用入口。它帮助企业建立员工、上下游供应链与企业IT系统间的连接。利用企业号,企业或第三方合作伙伴可以帮助企业快速、低成本的实现高质量的移动轻应用,实现生产、管理、协作、运营的移动化。申领一个企业号后,可以登录企业号的管理页面,导入通讯录、配置应用、邀请成员关注该企业号,也可以通过应用向成员发送文本、图文、文件、视频、音频等多媒体消息。通过简单的配置,就可以自动回复成员发送的消息,实现公告通知、知识管理、企业文化建设、手机企业通讯录等基本的企业应用。还可以通过本文档所描述的接口,建立企业号同企业应用间的连接,实现更多丰富且个性化的企业移动应用。前情提要微信的API主要是通过http请求的GET或者POST方式,接收或者发送json字符串,那我们先来了解一下http和json的基本知识。Http什么是HTTP超文本传输协议(HTTP,HyperTextTransferProtocol)是互联网上应用最为广泛的一种网络协议。HTTP的设计目的是保证客户机与服务器之间的通信。HTTP的工作方式是客户机与服务器之间的请求-应答协议。web浏览器可能是客户端,而计算机上的网络应用程序也可能作为服务器端。举例:客户端(浏览器)向服务器提交HTTP请求;服务器向客户端返回响应。响应包含关于请求的状态信息以及可能被请求的内容。HTTP请求方法在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET和POST。GET
-从指定的资源请求数据。POST
-向指定的资源提交要被处理的数据GET方法查询字符串(名称/值对)是在GET请求的URL中发送的:eg:http://test/demo_form.aspx?name1=value1&name2=value2有关GET请求的其他一些注释:GET请求可被缓存GET请求保留在浏览器历史记录中GET请求可被收藏为书签GET请求不应在处理敏感数据时使用GET请求有长度限制GET请求只应当用于取回数据POST方法查询字符串(名称/值对)是在POST请求的HTTP消息主体中发送的:Eg:POST/test/demo_form.aspHTTP/1.1Host:name1=value1&name2=value2有关POST请求的其他一些注释:POST请求不会被缓存POST请求不会保留在浏览器历史记录中POST不能被收藏为书签POST请求对数据长度没有要求GET与POST比较下面的表格比较了两种HTTP方法:GET和POST。
GETPOST后退按钮/刷新无害数据会被重新提交(浏览器应该告知用户数据会被重新提交)。书签可收藏为书签不可收藏为书签缓存能被缓存不能缓存编码类型application/x-www-form-urlencodedapplication/x-www-form-urlencoded或multipart/form-data。为二进制数据使用多重编码。历史参数保留在浏览器历史中。参数不会保存在浏览器历史中。对数据长度的限制是的。当发送数据时,GET方法向URL添加数据;URL的长度是受限制的(URL的最大长度是2048个字符)。无限制。对数据类型的限制只允许ASCII字符。没有限制。也允许二进制数据。安全性与POST相比,GET的安全性较差,因为所发送的数据是URL的一部分。在发送密码或其他敏感信息时绝不要使用GET!POST比GET更安全,因为参数不会被保存在浏览器历史或web服务器日志中。可见性数据在URL中对所有人都是可见的。数据不会显示在URL中。其他HTTP请求方法下面的表格列出了其他一些HTTP请求方法:方法描述HEAD与GET相同,但只返回HTTP报头,不返回文档主体。PUT上传指定的URI表示。DELETE删除指定资源。OPTIONS返回服务器支持的HTTP方法。CONNECT把请求连接转换到透明的TCP/IP通道。Json什么是JsonJSON指的是JavaScript对象表示法(JavaScript
Object
Notation),是存储和交换文本信息的语法。类似XML。但比XML更小、更快,更易解析。JSON是轻量级的文本数据交换格式JSON独立于语言
*JSON具有自我描述性,更易理解*
JSON使用JavaScript语法来描述数据对象,但是JSON仍然独立于语言和平台。JSON解析器和JSON库支持许多不同的编程语言。JSON文本格式在语法上与创建JavaScript对象的代码相同。由于这种相似性,无需解析器,JavaScript程序能够使用内建的
\o"JavaScripteval()函数"eval()函数,用JSON数据来生成原生的JavaScript对象。Json语法规则一、JSON语法是JavaScript对象表示法语法的子集。1.数据在名称/值对中2.数据由逗号分隔3.花括号保存对象4.方括号保存数组二、JSON数据的书写格式是:名称/值对。名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:"firstName":"John"这很容易理解,等价于这条JavaScript语句:firstName="John"三、JSON值JSON值可以是:• 数字(整数或浮点数)• 字符串(在双引号中)• 逻辑值(true或false)• 数组(在方括号中)• 对象(在花括号中)• null四、JSON对象JSON对象在花括号中书写:对象可以包含多个名称/值对:{"firstName":"John","lastName":"Doe"}这一点也容易理解,与这条JavaScript语句等价:firstName="John"lastName="Doe"五、JSON数组JSON数组在方括号中书写:数组可包含多个对象:{"employees":[{"firstName":"John","lastName":"Doe"},{"firstName":"Anna","lastName":"Smith"},{"firstName":"Peter","lastName":"Jones"}]}在上面的例子中,对象"employees"是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。六、JSON使用JavaScript语法因为JSON使用JavaScript语法,所以无需额外的软件就能处理JavaScript中的JSON。通过JavaScript,您可以创建一个对象数组,并像这样进行赋值:例子varemployees=[{"firstName":"Bill","lastName":"Gates"},{"firstName":"George","lastName":"Bush"},{"firstName":"Thomas","lastName":"Carter"}];可以像这样访问JavaScript对象数组中的第一项:employees[0].lastName;返回的内容是:Gates可以像这样修改数据:employees[0].lastName="Jobs";七、JSON文件JSON文件的文件类型是".json"JSON文本的MIME类型是"application/json"企业号注册对于不方面注册企业号的开发者来说,微信提供了企业体验账号的注册。申请体验号微信企业号注册地址:/try微信企业号的体验帐号,主要用于个人开发者学习研究,不推荐作为实际应用。通过体验帐号,你可以详细了解到企业号的产品特点及大部分功能。但其有如下限制:●最多只能有10人关注;●使用期为30天,最长不超过90天,逾期将会被回收●不可修改头像、名称;●无法使用企业号的高级接口。体验号的申请流程:填写基本资料验证邮箱绑定微信登陆在/页面扫描二维码,进行登陆。扫码:输入密码:登入界面,申请企业号第一步:邮箱激活进入微信企业号官网,选择“注册”即可进入至微信企业号注册页面,通过邮箱激活微信企业帐号。第二步:选择企业号类型请选择帐号类型“企业号”,一旦成功建立帐号,类型不可更改;第三步:信息登记先选择帐号类型(政府、企业、其他组织),然后按对应的类别进行信息登记;第四步:填写公众号信息,提交注册完成企业号新手指南建立通讯录首先你需要建立通讯录,导入关注的成员为保证企业信息的安全,企业号需要校验的关注者的身份方可允许关注。因此,你需要实现将成员信息导入通讯录,以用于身份校验。进入“通讯录”,点击左上方的“+”按钮,可批量导入、或逐一添加成员。创建应用所有企业号的消息都是通过“应用”来发送的,每个应用就相当于一个“服务号”,可以有自己的菜单和可见范围。系统已经默认给你建好了一个名为“企业小助手”的应用。你可以直接使用它,或者根据需要建立其他的应用。如果你需要使用接口开发,你还需要创建一个管理组,获取相应的开发凭据。出于对企业信息保护的考虑,企业号不提供具备“超级权限”的开发凭据。因此,你需要创建一个管理组,设定所需要的操作权限,才能获得相应的获取访问凭据的参数:CorpID和Secret。点击左侧导航栏的“设置”,进入“权限管理”,创建一个管理组。做完以上准备,你已经可以使用企业号来发送微信消息、或与你的企业应用对接了。为了帮助企业更方便地使用企业号,我们提供了微企通讯录基础应用,陆续将会有更多的应用开放,你可在企业号应用中心里开启使用。同时,企业号也开放了第三方应用接入,目前已有一些云应用提供商做出了较好的应用套件,帮助企业快速接入并使用企业号。如:畅移:/topic/wechat/企微:/微加:/tj办公逸:/微信企业号接口测试系统本测试系统基于C#+EXTJS实现。具体接口文档可以参考“官方接口参考”章节或者直接访问官方地址:/wiki/index.php?title=%E9%A6%96%E9%A1%B5。进行微信开发的方式主要有两种,一种是主动调用模式,一种是回调模式:主动调用是最基本的连接模式,当你的应用调用企业号时,需使用Https协议、Json数据格式、UTF8编码,访问域名为,数据包不需要加密。在每次主动调用企业号接口时需要带上\o"AccessToken"AccessToken参数。回调模式下,开发者可以通过公众平台提供的接口,实现自动回复、获取订阅者、自定义菜单等功能。测试系统界面如图:通用处理函数HTTPGET方式获取数据定义通用函数GetWebResponse,获取GET方法返回的JSON字符串///<summary>///Get数据接口json格式///</summary>///<paramname="getUrl">接口地址</param>///<paramname="paramData">提交json数据</param>///<paramname="dataEncode">编码方式</param>///<returns></returns>publicstringGetWebResponse(stringgetUrl,EncodingdataEncode){HttpWebRequestrequest=(HttpWebRequest)WebRequest.Create(getUrl);HttpWebResponseresponse=(HttpWebResponse)request.GetResponse();StreamresStream=response.GetResponseStream();StreamReaderreader=newStreamReader(resStream,dataEncode);stringrespJsonText=reader.ReadToEnd();resStream.Close();returnrespJsonText;}HTTPPOST方式推送数据定义通用函数PostWebRequest,推送数据:///<summary>///Post数据接口///</summary>///<paramname="postUrl">接口地址</param>///<paramname="paramData">提交json数据</param>///<paramname="dataEncode">编码方式</param>///<returns></returns>publicstringPostWebRequest(stringpostUrl,stringparamData,EncodingdataEncode){stringret=string.Empty;try{byte[]byteArray=dataEncode.GetBytes(paramData);//转化HttpWebRequestwebReq=(HttpWebRequest)WebRequest.Create(newUri(postUrl));webReq.Method="POST";webReq.ContentType="application/x-www-form-urlencoded";webReq.ContentLength=byteArray.Length;StreamnewStream=webReq.GetRequestStream();newStream.Write(byteArray,0,byteArray.Length);//写入参数newStream.Close();HttpWebResponseresponse=(HttpWebResponse)webReq.GetResponse();StreamReadersr=newStreamReader(response.GetResponseStream(),Encoding.Default);ret=sr.ReadToEnd();sr.Close();response.Close();newStream.Close();}catch(Exceptionex){returnex.Message;}returnret;}Json数据转换成Dictionary///<summary>///将Json数据转成dictionary格式///</summary>///<paramname="jsonData"></param>///<returns></returns>privatestaticDictionary<string,object>JsonToDictionary(stringjsonData){//实例化JavaScriptSerializer类的新实例JavaScriptSerializerjss=newJavaScriptSerializer();try{//将指定的JSON字符串转换为Dictionary<string,object>类型的对象returnjss.Deserialize<Dictionary<string,object>>(jsonData);}catch(Exceptionex){thrownewException(ex.Message);}}Json序列化和反序列化///<summary>///Json字符串转换为Object///</summary>///<typeparamname="T">对象名</typeparam>///<paramname="jsonReturnResult">Json</param>///<returns></returns>publicstaticTGetJsonToObject<T>(stringjsonReturnResult){JavaScriptSerializerjs=newJavaScriptSerializer();if(jsonReturnResult.Contains("errcode")){//可能发生错误QY_ReturnResulterrorResult=js.Deserialize<QY_ReturnResult>(jsonReturnResult);if(errorResult.errcode!="0"){//发生错误thrownewException(errorResult.errmsg);}}Tresult=js.Deserialize<T>(jsonReturnResult);returnresult;}///<summary>///将对象序列化为JSON格式///</summary>///<paramname="o">对象</param>///<returns>json字符串</returns>publicstaticstringSerializeObject(objecto){stringjson=JsonConvert.SerializeObject(o);returnjson;}///<summary>///解析JSON字符串生成对象实体///</summary>///<typeparamname="T">对象类型</typeparam>///<paramname="json">json字符串(eg.{"ID":"112","Name":"石子儿"})</param>///<returns>对象实体</returns>publicstaticTDeserializeJsonToObject<T>(stringjson)whereT:class{//JsonConvert.DeserializeObject<T>(json);JsonSerializerserializer=newJsonSerializer();StringReadersr=newStringReader(json);objecto=serializer.Deserialize(newJsonTextReader(sr),typeof(T));Tt=oasT;returnt;}///<summary>///解析JSON数组生成对象实体集合///</summary>///<typeparamname="T">对象类型</typeparam>///<paramname="json">json数组字符串(eg.[{"ID":"112","Name":"石子儿"}])</param>///<returns>对象实体集合</returns>publicstaticList<T>DeserializeJsonToList<T>(stringjson)whereT:class{JsonSerializerserializer=newJsonSerializer();StringReadersr=newStringReader(json);objecto=serializer.Deserialize(newJsonTextReader(sr),typeof(List<T>));List<T>list=oasList<T>;returnlist;}///<summary>///反序列化JSON到给定的匿名对象.///</summary>///<typeparamname="T">匿名对象类型</typeparam>///<paramname="json">json字符串</param>///<paramname="anonymousTypeObject">匿名对象</param>///<returns>匿名对象</returns>publicstaticTDeserializeAnonymousType<T>(stringjson,TanonymousTypeObject){Tt=JsonConvert.DeserializeAnonymousType(json,anonymousTypeObject);returnt;}启用回调模式在回调模式下,企业不仅可以主动调用企业号接口,还可以接收成员的消息或事件。接收的信息使用XML数据格式、UTF8编码,并以AES方式加密。企业号的每个应用都有自己的回调模式开关。在管理端开启并设置好相关参数后,此应用的回调模式才生效。当你开启应用的回调模式时,企业号会要求你填写应用的URL、Token、EncodingAESKey三个参数。URL是企业应用接收企业号推送请求的访问协议和地址,支持http或https协议。Token可由企业任意填写,用于生成签名。EncodingAESKey用于消息体的加密,是AES密钥的Base64编码。启用回调模式1、在每一个应用中都需要单独启用,选择需要启用的应用。2、在模式选择中,选择回调模式,3、点击右上角的“已关闭”开关,打开回调模式4、填写URL、Token、和EncodingAESKey。这里URL是重点,需要有一个公网域名,需要有自己的服务器资源,能够正确响应微信验证的URL请求。我是买的第三方的虚拟空间,也可以直接用百度或者新浪的SAE.我的URL地址是:/MpQy.ashx。具体MpQy.ashx的实现参考下一个章节。5、保存完毕之后,回调模式设置成功。URL地址响应的实现在解决方案中新添加一个一般处理程序。代码参考如下:<%@WebHandlerLanguage="C#"Class="MpQy"%>usingSystem;usingSystem.Web;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Data.SqlClient;usingSystem.IO;usingSystem.Text;usingSystem.Xml;usingSystem.Xml.XPath;usingSystem.Security;usingSystem.Net;usingSystem.Collections;usingSystem.Security.Cryptography;usingSystem.Web.Security;publicclassMpQy:IHttpHandler{///<summary>///处理企业号的信息///</summary>///<paramname="context"></param>publicvoidProcessRequest(HttpContextcontext){stringpostString=string.Empty;if(HttpContext.Current.Request.HttpMethod.ToUpper()=="POST"){using(Streamstream=HttpContext.Current.Request.InputStream){Byte[]postBytes=newByte[stream.Length];stream.Read(postBytes,0,(Int32)stream.Length);postString=Encoding.UTF8.GetString(postBytes);}if(!string.IsNullOrEmpty(postString)){//Execute(postString);}}else{Auth();}}///<summary>///成为开发者的第一步,验证并相应服务器的数据///</summary>privatevoidAuth(){#region获取关键参数stringtoken="handwxqy";//获取TokenstringencodingAESKey="mfjB6By8EA8lkk2d3ZAESsuYdh8ZmlVl84Ujt9GPv8O";//获取EncodingAESKeystringcorpId="wxc96457917949f274";//获取corpId#endregionWXBizMsgCryptwxcpt=newWXBizMsgCrypt(token,encodingAESKey,corpId);stringsVerifyMsgSig=HttpContext.Current.Request.QueryString["msg_signature"];//企业号的msg_signaturestringsVerifyTimeStamp=HttpContext.Current.Request.QueryString["timestamp"];stringsVerifyNonce=HttpContext.Current.Request.QueryString["nonce"];stringsVerifyEchoStr=HttpContext.Current.Request.QueryString["echoStr"];intret=0;stringsEchoStr="";ret=wxcpt.VerifyURL(sVerifyMsgSig,sVerifyTimeStamp,sVerifyNonce,sVerifyEchoStr,refsEchoStr);if(ret!=0){HttpContext.Current.Response.Write(sEchoStr);HttpContext.Current.Response.End();//System.Console.WriteLine("ERR:VerifyURLfail,ret:"+ret);//return;}HttpContext.Current.Response.Write(sEchoStr);HttpContext.Current.Response.End();}publicboolIsReusable{get{returnfalse;}}}获取AccessTokenAccessToken是企业号的全局唯一票据,在每次主动调用企业号接口时需要带上\o"AccessToken"AccessToken参数。AccessToken需要用\o"CorpID"CorpID和\o"Secret"Secret来换取,不同的Secret会返回不同的AccessToken。正常情况下AccessToken有效期为7200秒,有效期内重复获取返回相同结果;有效期内有接口交互(包括获取AccessToken的接口),会自动续期。\o"CorpID"CorpID是企业号的标识,每个企业号拥有一个唯一的CorpID;Secret是管理组凭证密钥。系统管理员可通过管理端的权限管理功能创建管理组,分配管理组对应用、通讯录的访问权限。完成后,管理组即可获得唯一的secret(secret需要创建管理组之后,才会分配)。系统管理员可通过权限管理查看所有管理组的secret,其他管理员可通过设置中的开发者凭据查看。当企业应用调用企业号接口时,企业号后台为根据此次访问的AccessToken,校验访问的合法性以及所对应的管理组的管理权限以返回相应的结果。注:你应该审慎配置管理组的权限,够用即好,权限过大会增加误操作可能性及信息安全隐患。C#获取AccesToken示例///<summary>///获取企业号的accessToken///</summary>///<paramname="corpid">企业号ID</param>///<paramname="corpsecret">管理组密钥</param>///<returns></returns>publicstringGetToken(stringcorpid,stringcorpsecret){stringgetAccessTokenUrl="/cgi-bin/gettoken?corpid={0}&corpsecret={1}";stringaccessToken="";stringrespText="";//获取josn数据stringurl=string.Format(getAccessTokenUrl,corpid,corpsecret);respText=GetWebResponse(url,Encoding.Default);try{JavaScriptSerializerjss=newJavaScriptSerializer();Dictionary<string,object>respDic=(Dictionary<string,object>)jss.DeserializeObject(respText);//将Json数据转成dictionary格式//通过键access_token获取值accessToken=respDic["access_token"].ToString();}catch(Exceptionex){thrownewException(ex.Message);}returnaccessToken;}通讯录管理企业号通讯录具备完全开放的接口,应用可以调用这些接口管理部门、成员和标签。应用也可以使用部门、成员、标签发消息,或更改应用的可见范围。注意,部门的最大层级为15层,每个部门的直属成员上限为1000个;出于安全考虑,某些接口需要在管理端有明确的授权。定义部门对象获取部门返回的json格式如下:{"errcode":0,"errmsg":"ok","department":[{"id":2,"name":"广州研发中心","parentid":1,"order":10},{"id":3"name":"邮箱产品部","parentid":2,"order":40}]}根据改JSON串定义部门返回对象和部门对象:namespaceHand.WeiXin.QY.Entities{///<summary>///获取部门返回结果///</summary>publicclassQy_Department_Result:QY_ReturnResult{///<summary>///部门对象组///</summary>publicList<QY_Department>department{get;set;}}///<summary>///企业号部门对象///</summary>publicclassQY_Department{///<summary>///id///</summary>publicintid{get;set;}///<summary>///name///</summary>publicstringname{get;set;}///<summary>///parentid///</summary>publicintparentid{get;set;}///<summary>///order排序号///</summary>publicintorder{get;set;}}}定义成员对象获取部门成员(详情)返回的JSON格式如下:{"errcode":0,"errmsg":"ok","userlist":[{"userid":"zhangsan","name":"李四","department":[1,2],"position":"后台工程师","mobile":,"gender":"1","email":"zhangsan@","weixinid":"lisifordev","avatar":"/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0","status":1,"extattr":{"attrs":[{"name":"爱好","value":"旅游"},{"name":"卡号","value":"1234567234"}]}}]}根据部门成员(详情)返回的JSON串自定用户返回结果对象和用户对象:namespaceHand.WeiXin.QY.Entities{publicclassQY_User_Result:QY_ReturnResult{///<summary>///用户对象列表///</summary>publicList<QY_User>userlist{get;set;}}///<summary>///企业号用户对象///</summary>publicclassQY_User{///<summary>///成员UserID。对应管理端的帐号,企业内必须唯一。长度为1~64个字节///</summary>publicstringuserid{get;set;}///<summary>///成员名称。长度为0~64个字节///</summary>publicstringname{get;set;}///<summary>///成员所属部门id列表。注意,每个部门的直属成员上限为1000个///</summary>publicstringdepartment{get;set;}///<summary>///职位信息。长度为0~64个字节///</summary>publicstringposition{get;set;}///<summary>///手机号码。企业内必须唯一,mobile/weixinid/email三者不能同时为空///</summary>publicstringmobile{get;set;}///<summary>///性别。1表示男性,2表示女性///</summary>publicstringgender{get;set;}///<summary>///邮箱。长度为0~64个字节。企业内必须唯一///</summary>publicstringemail{get;set;}///<summary>///微信号。企业内必须唯一。(注意:是微信号,不是微信的名字)///</summary>publicstringweixinid{get;set;}///<summary>///成员头像的mediaid,通过多媒体接口上传图片获得的mediaid///</summary>publicstringavatar_mediaid{get;set;}///<summary>///扩展属性。扩展属性需要在WEB管理端创建后才生效,否则忽略未知属性的赋值///</summary>publicQY_User_Extattrextattr{get;set;}///<summary>///头像url。注:如果要获取小图将url最后的"/0"改成"/64"即可///</summary>publicstringavatar{get;set;}///<summary>///关注状态:1=已关注,2=已冻结,4=未关注///</summary>publicstringstatus{get;set;}///<summary>///状态描述///</summary>publicstringstatus_desc{get;set;}}///<summary>///用户附加属性集合///</summary>publicclassQY_User_Extattr{///<summary>///属性集合///</summary>publicList<QY_User_Extattr_Attrs>attrs{get;set;}}///<summary>///用户附加属性///</summary>publicclassQY_User_Extattr_Attrs{///<summary>///名称///</summary>publicstringname{get;set;}///<summary>///值///</summary>publicstringvalue{get;set;}}publicclassQY_SendInviteResult:QY_ReturnResult{///<summary>///1:微信邀请2.邮件邀请///</summary>publicstringtype{get;set;}}}部门管理API///<summary>///添加部门POST方式///</summary>///<paramname="paramData">提交的数据json</param>///<returns></returns>publicstringCreateDepartment(stringparamData){stringpostUrl=string.Format("/cgi-bin/department/create?access_token={0}",m_sAccessToken);returnPostWebRequest(postUrl,paramData,Encoding.UTF8);}///<summary>///更新部门POST方式///</summary>///<paramname="paramData">提交的数据json</param>///<returns></returns>publicstringUpdateDepartment(stringparamData){stringpostUrl=string.Format("/cgi-bin/department/update?access_token={0}",m_sAccessToken);returnPostWebRequest(postUrl,paramData,Encoding.UTF8);}///<summary>///删除部门GET方式///</summary>///<paramname="deptId">部门ID</param>///<returns></returns>publicstringDeleteDepartment(stringdeptId){stringgetUrl=string.Format("/cgi-bin/department/delete?access_token={0}&id={1}",m_sAccessToken,deptId);returnGetWebResponse(getUrl,Encoding.UTF8);}///<summary>///获取部门列表GET方式///</summary>///<paramname="deptId">部门ID</param>///<returns></returns>publicstringListDepartment(stringdeptId){stringgetUrl=string.Format("/cgi-bin/department/list?access_token={0}&id={1}",m_sAccessToken,deptId);returnGetWebResponse(getUrl,Encoding.UTF8);}///<summary>///把json数据转换成部门list对象///</summary>///<paramname="deptID"></param>///<returns></returns>publicList<QY_Department>GetDepartmentList(stringdeptID){//获取详细信息List<QY_Department>list=newList<QY_Department>();WeiXinQYDllwxd=newWeiXinQYDll();JavaScriptSerializerjs=newJavaScriptSerializer();//实例化一个能够序列化数据的类Qy_Department_ResultresultObj=js.Deserialize<Qy_Department_Result>(wxd.ListDepartment(deptID));//将json数据转化为对象类型并赋值给resultObjlist=resultObj.department;returnlist;}成员管理API///<summary>///添加成员POST方式///</summary>///<paramname="paramData">提交的数据json</param>///<returns></returns>publicstringCreateUser(stringparamData){stringpostUrl=string.Format("/cgi-bin/user/create?access_token={0}",m_sAccessToken);returnPostWebRequest(postUrl,paramData,Encoding.UTF8);}///<summary>///更新成员///</summary>///<paramname="paramData">提交的数据json</param>///<returns></returns>publicstringUpdateUser(stringparamData){stringpostUrl=string.Format("/cgi-bin/user/update?access_token={0}",m_sAccessToken);returnPostWebRequest(postUrl,paramData,Encoding.UTF8);}///<summary>///删除部门GET方式///</summary>///<paramname="deptId">成员UserID。对应管理端的帐号</param>///<returns></returns>publicstringDeleteUser(stringuserId){stringgetUrl=string.Format("/cgi-bin/user/delete?access_token={0}&userid={1}",m_sAccessToken,userId);returnGetWebResponse(getUrl,Encoding.UTF8);}///<summary>///批量删除成员POST方式///</summary>///<paramname="paramData">提交的数据json</param>///<returns></returns>publicstringBatchDeleteUser(stringparamData){stringpostUrl=string.Format("/cgi-bin/user/batchdelete?access_token={0}",m_sAccessToken);returnPostWebRequest(postUrl,paramData,Encoding.UTF8);}///<summary>///获取单个成员GET方式///</summary>///<paramname="deptId">成员UserID。对应管理端的帐号</param>///<returns></returns>publicstringGetUser(stringuserId){stringgetUrl=string.Format("/cgi-bin/user/get?access_token={0}&userid={1}",m_sAccessToken,userId);returnGetWebResponse(getUrl,Encoding.UTF8);}///<summary>///获取部门成员GET方式///</summary>///<paramname="departmentId">获取的部门id必输</param>///<paramname="fetchChild">1/0:是否递归获取子部门下面的成员非必输默认0</param>///<paramname="status">0获取全部成员,1获取已关注成员列表,2获取禁用成员列表,4获取未关注成员列表。status可叠加</param>///<returns></returns>publicstringGetUserSimpleList(stringdepartmentId,stringfetchChild,stringstatus){stringgetUrl=string.Format("/cgi-bin/user/simplelist?access_token={0}&department_id={1}&fetch_child={2}&status={3}",m_sAccessToken,departmentId,fetchChild,status);returnGetWebResponse(getUrl,Encoding.UTF8);}///<summary>///获取部门成员(详细)GET方式///</summary>///<paramname="departmentId">获取的部门id必输</param>///<paramname="fetchChild">1/0:是否递归获取子部门下面的成员非必输默认0</param>///<paramname="status">0获取全部成员,1获取已关注成员列表,2获取禁用成员列表,4获取未关注成员列表。status可叠加</param>///<returns></returns>publicstringGetUserList(stringdepartmentId,stringfetchChild,stringstatus){stringgetUrl=string.Format("/cgi-bin/user/list?access_token={0}&department_id={1}&fetch_child={2}&status={3}",m_sAccessToken,departmentId,fetchChild,status);returnGetWebResponse(getUrl,Encoding.UTF8);}///<summary>///邀请成员关注POST方式///</summary>///<paramname="paramData">提交的数据json</param>///<returns></returns>publicstringSendInvite(stringparamData){stringpostUrl=string.Format("/cgi-bin/invite/send?access_token={0}",m_sAccessToken);returnPostWebRequest(postUrl,paramData,Encoding.UTF8);}///<summary>///把json数据转换成部门成员list对象///</summary>///<paramname="deptID"></param>///<returns></returns>publicList<QY_User>GetUserListObj(stringdepartmentId,stringfetchChild,stringstatus){//获取详细信息List<QY_User>list=newList<QY_User>();WeiXinQYDllwxd=newWeiXinQYDll();stringjson=wxd.GetUserList(departmentId,fetchChild,status);Dictionary<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年音频设备行业技术创新报告
- 2026年云计算行业在零售行业的应用与市场前景报告
- 2026年防静电帘行业发展趋势报告
- 2026年汽车融资租赁行业发展行业报告
- 2026年电子产品包装行业成本控制与环保解决方案报告
- 2026年体育行业创新报告及运动数据分析系统报告
- 2026年互联网行业终端用户体验与服务质量分析报告
- 2026年返回系统的组件和部件行业智能创新报告
- 2026年大数据应用在零售领域的创新探索报告
- 2026年空气净化器行业用户需求分析报告
- 一元二次方程应用说课课件
- 冬季预防抑郁2026知识培训
- 2026中国建筑工程勘察行业市场现状发展趋势分析投资评估规划分析研究报告
- 人防有限空间作业监理实施细则
- 三1班小学生竞选班委班干部竞选简历
- 肺功能测定临床应用及结果的解读
- 考三轮车三力测试题及答案
- 电机维修技术协议与服务标准范本
- 三年级上册语文课件《整本书阅读稻草人》-人教部编版
- 艺术教育公平性探索-洞察及研究
- 张掖介绍课件
评论
0/150
提交评论