7.企业微信-1.ILazyQYBasic

一些基础接口

GetAccessTokenAsync

  • 作用

    企业微信API接口的调用凭据 access_token

  • 官方文档 : https://work.weixin.qq.com/api/doc/90000/90135/91039

  • 方法说明

    • 请求方式 : 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

    1. 该请求会将页面重定向到微信的服务器地址, 微信服务器验证通过后悔重新重定向到指定地址, 并在URL中携带code
    2. 该code用于获取网页授权的access_token(该access_token与上面的不同, 这个access_token用于网页授权来换取用户userid以及相关微信头像等信息)
    3. 获取code的方式 : 企业自建应用固定填写:snsapi_base
  • 官方文档 : https://work.weixin.qq.com/api/doc/90000/90135/91022

  • 示例代码

    • 调用方式 : 同步
    • 参数
      • 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获取成员信息

  • 官方文档 : https://work.weixin.qq.com/api/doc/90000/90135/91023

  • 示例代码

    • 调用方式 : 同步

    • 参数

      • 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菜单

  • 官方文档 : https://work.weixin.qq.com/api/doc/90000/90135/90231

  • 示例代码

    • 调用方式 : 异步

    • 参数 :

      • 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菜单结构

  • 官方文档 : https://work.weixin.qq.com/api/doc/90000/90135/90232

  • 示例代码

    • 调用方式 : 异步

    • 返回值 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菜单结构

  • 官方文档 : https://work.weixin.qq.com/api/doc/90000/90135/90233

  • 示例代码

    • 调用方式 : 异步

    • 返回值

      • 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调用本接口
  • 官方文档 : https://work.weixin.qq.com/api/doc/90000/90135/90253

  • 参数

    • 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

  • 官方文档 : https://work.weixin.qq.com/api/doc/90000/90135/90256

  • 参数

    • 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

  • 作用 : 获取临时素材

  • 官方文档 : https://work.weixin.qq.com/api/doc/90000/90135/90254

  • 参数

    • 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);
    
posted @ 2020-08-28 20:58  LazyWeChat  阅读(390)  评论(0)    收藏  举报