7.企业微信-1.ILazyQYBasic
一些基础接口
GetAccessTokenAsync
-
作用
企业微信API接口的调用凭据 access_token
-
方法说明
- 请求方式 : Get
- 返回值 : string , 即获取到的access_token
-
示例代码
var access_token = await _lazyQYBasic.GetAccessTokenAsync();
GetContactAccessTokenAsync
-
作用
企业微信通讯录接口的调用凭据 access_token
-
方法说明
- 请求方式 : Get
- 返回值 : string , 即获取到的access_token
-
示例代码
var access_token = await _lazyQYBasic.GetContactAccessTokenAsync();
备注 : 上述两个接口均已经在需要access_token的API接口中默认调用
GetAuthorizationCode
-
作用
用于向用户发起请求授权, 并获取授权code
- 该请求会将页面重定向到微信的服务器地址, 微信服务器验证通过后悔重新重定向到指定地址, 并在URL中携带code
- 该code用于获取网页授权的access_token(该access_token与上面的不同, 这个access_token用于网页授权来换取用户userid以及相关微信头像等信息)
- 获取code的方式 : 企业自建应用固定填写:snsapi_base
-
示例代码
- 调用方式 : 同步
- 参数
- HttpContext
- 返回值 : string
- 通过成员授权获取到的code,最大为512字节。每次成员授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
- 前提 : Startup.cs中注册 services.AddLazyQY(); 并在appsettings.json中完成LazyWeChat的配置
public IActionResult GetAuthorizationCode() { var code = _lazyQYBasic.GetAuthorizationCode(this.HttpContext); if (!string.IsNullOrEmpty(code)) { return Redirect($"Index?code={code}"); } else { return View(); } }备注 : 在获取GetAuthorizationCode的Action中不要添加额外代码, 因为_lazyQYBasic.GetAuthorizationCode中会有页面重定向, 添加额外代码可能导致无法获取到code
GetUserInfoAsync
-
作用 : 该接口用于根据code获取成员信息
-
示例代码
-
调用方式 : 同步
-
参数
- code : GetAuthorizationCode获取的授权code
-
返回值 : dynamic
-
当用户为企业用户时
{ "errcode": 0, "errmsg": "ok", "UserId":"USERID", "DeviceId":"DEVICEID"} -
-
-
{ "errcode": 0, "errmsg": "ok", "OpenId":"OPENID", "DeviceId":"DEVICEID"}
```
- 前提 : Startup.cs中注册 services.AddLazyQY(); 并在appsettings.json中完成LazyWeChat的配置
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly ILazyQYBasic _lazyQYBasic;
public HomeController(ILogger<HomeController> logger, ILazyQYBasic lazyQYBasic)
{
_logger = logger;
_lazyQYBasic = lazyQYBasic;
}
public async Task<IActionResult> Index()
{
var code = "";
if (!HttpContext.Request.Query.Keys.Contains("code"))
return Redirect("Home/GetAuthorizationCode");
else
code = HttpContext.Request.Query["code"].ToString();
var res = await _lazyQYBasic.GetUserInfoAsync(code);
var userInfo = JsonConvert.SerializeObject(res);
_logger.LogInformation($"UserInfo :{userInfo}");
ViewBag.userInfo = userInfo;
return View();
}
public IActionResult GetAuthorizationCode()
{
var code = _lazyQYBasic.GetAuthorizationCode(this.HttpContext);
if (!string.IsNullOrEmpty(code))
{
return Redirect($"Index?code={code}");
}
else
{
return View();
}
}
}
自定义菜单
CreateMenuAsync
-
作用
创建企业微信App菜单
-
示例代码
-
调用方式 : 异步
-
参数 :
-
menuButton : 菜单结构(MenuButton)的class
该class有AddMenu 方法, 用于添加菜单或者子菜单(菜单类 WeChatMenu)
WeChatMenu的结构如下, 该类的结构中包含了微信菜单的所有字段, 菜单会根据类型的不同而拥有不同的字段, 开发者可以根据自己的需要选择需要赋值的字段, LazyWeChat会自动忽略未赋值字段, 具体字段选择情况请参考官方文档
public class WeChatMenu { public WeChatMenu() => sub_button = new List<WeChatMenu>(); public string type { get; set; } public string name { get; set; } public string url { get; set; } public string appid { get; set; } public string pagepath { get; set; } public string key { get; set; } public List<WeChatMenu> sub_button { get; set; } }菜单类型的结构如下, 菜单类型说明请参考官方文档
public enum MenuType { click, view, miniprogram, scancode_waitmsg, scancode_push, pic_sysphoto, pic_photo_or_album, pic_weixin, location_select, media_id }可参考如下代码创建菜单
MenuButton menuButton = new MenuButton(); menuButton.AddMenu(new WeChatMenu { type = MenuType.click.ToString(), name = "Click Menu", key = "Key_Event1", }); var sub_button = new WeChatMenu { name = "Sub Menu" }; sub_button.sub_button.Add(new WeChatMenu { type = MenuType.view.ToString(), name = "Sub View Menu", url = "http://www.soso.com/" }); sub_button.sub_button.Add(new WeChatMenu { type = MenuType.click.ToString(), name = "Sub Click Menu", key = "Key_Event2", }); menuButton.AddMenu(sub_button); var res = await _lazyQYBasic.CreateMenuAsync(menuButton);
-
-
返回值
-
dynamic
{"errcode":0,"errmsg":"ok"}
-
-
前提 : Startup.cs中注册 services.AddLazyQY(); 并在appsettings.json中完成LazyWeChat的配置
-
GetCurrentMenuAsync
-
作用
获取当前企业微信App菜单结构
-
示例代码
-
调用方式 : 异步
-
返回值 dynamic
{ "button": [{ "name": "扫码", "sub_button": [{ "type": "scancode_waitmsg", "name": "扫码带提示", "key": "rselfmenu_0_0", "sub_button": [] }, { "type": "scancode_push", "name": "扫码推事件", "key": "rselfmenu_0_1", "sub_button": [] }, { "type": "view_miniprogram", "name": "小程序", "pagepath": "pages/lunar/index", "appid": "wx4389ji4kAAA" } ] }, { "name": "发图", "sub_button": [{ "type": "pic_sysphoto", "name": "系统拍照发图", "key": "rselfmenu_1_0", "sub_button": [] }, { "type": "pic_photo_or_album", "name": "拍照或者相册发图", "key": "rselfmenu_1_1", "sub_button": [] }, { "type": "pic_weixin", "name": "微信相册发图", "key": "rselfmenu_1_2", "sub_button": [] } ] }, { "name": "发送位置", "type": "location_select", "key": "rselfmenu_2_0" } ] } -
前提 : Startup.cs中注册 services.AddLazyQY(); 并在appsettings.json中完成LazyWeChat的配置
var res = await _lazyQYBasic.GetCurrentMenuAsync();
-
DeleteMenuAsync
-
作用
删除当前企业微信App菜单结构
-
示例代码
-
调用方式 : 异步
-
返回值
-
dynamic
{"errcode":0,"errmsg":"ok"}
-
-
前提 : Startup.cs中注册 services.AddLazyQY(); 并在appsettings.json中完成LazyWeChat的配置
var res = await _lazyQYBasic.DeleteMenuAsync();
-
素材
UploadTempMaterialAsync
-
作用 : 新增临时素材
- 临时素材media_id是可复用的
- 媒体文件在微信后台保存时间为3天,即3天后media_id失效
- 传临时素材的格式、大小限制与公众平台官网一致
- 图片(image): 10M,支持PNG\JPEG\JPG\GIF格式
- 语音(voice):2M,播放长度不超过60s,支持AMR\MP3格式
- 视频(video):10MB,支持MP4格式
- 缩略图(thumb):64KB,支持JPG格式
public enum MediaType { image, voice, video, thumb }- 需使用https调用本接口
-
参数
- fullFilePath : 素材完整路径
- mediaType : 素材类型
-
返回值 dynamic
{"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789} -
示例代码
var root = Directory.GetCurrentDirectory(); var fullFilePath = root + @"\Materials\image.jpg"; var imageRes = _lazyQYBasic.UploadTempMaterialAsync(fullFilePath, mediaType).Result;
UploadImgMaterialAsync
-
用作 : 上传图文消息内的图片获取URL
-
参数
- fullImgFilePath : 图片完整路径
-
返回值 dynamic
{ "url": "http://mmbiz.qpic.cn/mmbiz/gLO17UPS6FS2xsypf378iaNhWacZ1G1UplZYWEYfwvuU6Ont96b1roYs CNFwaRrSaKTPCUdBK9DgEHicsKwWCBRQ/0" } -
示例代码
var root = Directory.GetCurrentDirectory(); var fullFilePath = root + @"\Materials\1.jpg"; var imageRes = await _lazyQYBasic.UploadImgMaterialAsync(fullFilePath);
GetTempMaterialAsync
-
作用 : 获取临时素材
-
参数
- media_id : 媒体文件ID
-
返回值 object
-
如果返回的是视频消息素材, 则为dynamic
{ "video_url":DOWN_URL } -
否则为媒体的字节数组, byte[]
-
-
示例代码
var media_id = "F-0-E8F_ai7fL8JYYo_FcAjUoFWK5PbA12Q1Dkag5hyX57qs4GbJazj34kBNbeEi"; var material = await _lazyQYBasic.GetTempMaterialAsync(media_id);

浙公网安备 33010602011771号