微信网页登录管理
类库
注意要在vs的nuget上勾选包括预发行版,因为这个作者一直都没有发行正式版的呢,可能是太懒,也有可能是他还没准备好
Install-Package iml6yu.Wechat.Mp.Authorization -Version 1.0.2.301-rc22030101
用最新的包
Install-Package iml6yu.Wechat.Mp.Message -Version 1.0.2.429-rc220429003
用法
- 第一步配置StartUp.cs
public void ConfigureServices(IServiceCollection services)
{
//2022年4月29日增加的内容
//开启内存缓存功能,对accesstoken进行缓存,避免token获取次数过多,导致微信接口上限
services.AddMemoryCache();
services.UseWechatAuthorization("你的appid","你的appsecret");
}
- 第二步创建一个controller
[ApiController]
[Route("/Wechat/[controller]/[action]")]
public class WechatLoginController : ControllerBase
{
private AuthorizationProvider authorization;
public WechatLoginController(AuthorizationProvider authorization)
{
this.authorization = authorization;
}
/// <summary>
/// 微信浏览器内登录
/// </summary>
/// <param name="id"></param>
[AllowAnonymous]
[HttpGet("{id}")]
public void Login(string redirecturl)
{
Response.Redirect(authorization.GetCodeUrl($"{Request.Scheme}://{Request.Host.ToString()}" + $"/Wechat/WechatLogin/Logined/{redirecturl}"));
}
/// <summary>
/// 微信登录回调
/// </summary>
/// <param name="id"></param>
[AllowAnonymous]
[HttpGet("{redirecturl}")]
public async Task LoginedAsync(string redirecturl,string code, string state)
{
var codeAccessToken = await authorization.GetAccessTokenModelAsync(code, state);
Response.Redirect($"{HttpUtility.UrlDecode( redirecturl)}?openid="+codeAccessToken.OpenId);
}
}
redirecturl参数:就是客户端传入进来的参数,但是需要注意这个url需要在js客户端使用encodeURIComponent对url进行编码,并且不能包含有任何参数或者hash,比如传入的url是http://xxxx.com?id=123,在重定向的时候id=123这个参数是会被丢弃的
发送模板消息
配置
在startup.cs的ConfigureServices中进行配置
services.UseWechatTemplateMessage(o =>
{
o.AppId = "";
o.AppSecret = "";
});
用法
- 第一步 在需要使用发送模板的controller或者work中修改构造函数如下
//模板消息驱动
private TemplateMessageProvider _wechatMessage;
public Worker(ILogger<Worker> logger, IConfiguration configuration, TemplateMessageProvider provider)
{
}
- 第二步 发送消息
_wechatMessage.SendOffiAccountMessageAsync(new OffiAccountMessage()
{
//模板ID,登录微信公众号管理平台后,在已添加模板中能看到id(一定是企业认证的,非认证的没有这个功能)
TemplateId = "98UUCPPsXU3k2WwcjTJiCA8Dk_cCcLPqya-h85IqhQM",
//模板消息发送到客户后,点击查看详情进入的网址
Url = "http://baidu.com"
Data = new MessageContent()
{
//模板Title内容
MessageTitle = new MessageContentItem("无单入库申请"),
//模板DATA1到DATAn的内容
MessageDatas = new List<MessageContentItem>() {
new MessageContentItem("无单入库"),
new MessageContentItem(user.RealName+"发起的实时审核申请") ,
new MessageContentItem(data.ApplyTime.ToString("yyyy-MM-dd HH:mm:ss")) },
//模板备注消息内容
Remark = new MessageContentItem("请尽快登录190智能入库系统审核单据!")
}
}, checkers.Select(t => t.OpenId).ToArray()/*需要发送的openids*/);
消息收到如下