记录使用.netcore 完成微信公众号推送模板消息

        /// <summary>
        /// 微信公众号发送消息
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public async Task<bool> WxSendMsg(PushMsgData data)
        {
            // 设置HTTP请求相关参数 
            var appId = "appId ";
            var appSecret = "appSecret ";
            var accessToken = GetAccessToken(appId, appSecret); // 获取访问令牌 
            var url = $"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={accessToken}";
            var client = new HttpClient();
            // var sqlcategoryId = string.Join("','", data.openId);
            var sqlcategoryId = data.openId;
            // 设置请求消息体  
            var requestBody = new
            {
                touser = sqlcategoryId, // 目标用户的OpenID
                template_id = "template_id", // 消息模板ID
                topcolor = "#FF0000",

                url = "https://www.baidu.com/",//详情需要跳转的网页,需要设置JS接口安全域名

                data = new
                {
                    //模板对应字段
                    first = new
                    {
                        value = "发货成功!",
                        //颜色代码
                        color = "#000000"
                    },
                    keyword1 = new
                    {
                        value = "沙发",
                        //颜色代码
                        color = "#000000"
                    },
                    keyword2 = new
                    {
                        value = "京东物流",
                        //颜色代码
                        color = "#000000"
                    },
                    keyword3 = new
                    {
                        value = DateTime.Now.ToString("F"),
                        //颜色代码
                        color = "#000000"
                    },
                    remark = new
                    {
                        value = "备注信息",
                        //颜色代码
                        color = "#000000"
                    }

                }
            };
            var jsonBody = JsonConvert.SerializeObject(requestBody);
            var content = new StringContent(jsonBody, Encoding.UTF8, "application/json");

            // 发送HTTP请求并接收响应
            var response = await client.PostAsync(url, content);
            var responseContent = await response.Content.ReadAsStringAsync();

            // 解析响应并提取所需的数据
            var responseObject = JsonConvert.DeserializeObject<ResponseMsgModel>(responseContent);
            //var errorCode = responseObject.GetValue("errcode");
            //var errorMessage = responseObject.GetValue("errmsg");

            // 处理响应结果
            if (responseObject.errcode.ToString() == "0" && responseObject != null)
            {
                return true;

            }
            else
            {
                return false;

            }

        }

        // 获取访问令牌
        public string GetAccessToken(string appId, string appSecret)
        {

            //优先获取redis缓存 如果没有再去拉取微信数据
            var token = _cache.Get($"WxAccessToken:Token");
            if (string.IsNullOrEmpty(token))
            {

                var url = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appId}&secret={appSecret}";
                using (HttpClient client = new HttpClient())
                {

                    var response = client.GetAsync(url).Result;
                    var responseContent = response.Content.ReadAsStringAsync().Result;
                    var accessToken = JsonConvert.DeserializeObject<ResponseMsgModel>(responseContent);
                    //因为微信toen的失效时间是两个小时 这里暂时设置为100分钟
                    _cache.Set($"WxAccessToken:Token", accessToken.access_token, 100);
                    return accessToken.access_token;
                }

            }
            else
            {
                return token;
            }

        }
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值