微信定制消息怎么设置_消息推送平台

微信定制消息怎么设置_消息推送平台背景因为要实现向用户推送一些消息,但是每个用户收到的消息按需求又是不同的这里,比如在考试前向学生推送考试信息,那么每个用户收到信息的时间是不同的,收到的内容是不同的所以,消息需要定制发送在微信提供的接口中,我们设想了

微信定制消息怎么设置_消息推送平台"

背景

因为要实现向用户推送一些消息,但是每个用户收到的消息按需求又是不同的

这里,比如在考试前向学生推送考试信息,那么每个用户收到信息的时间是不同的,收到的内容是不同的

所以,消息需要定制发送

在微信提供的接口中,我们设想了几种方案来实现,最终选择了按照openid列表群发接口来实现

功能

根据不同用户在不同的时间向用户发送定制的消息

代码

获取用户openid

if (!IsPostBack && (Request.QueryString["echostr"]==null))
{
    string appid = "YOUR APPID";
    string appsecret = "YOUR APPSECRET";
    string code = null;

    //调用10次微信服务,查询用户openid-暂时不用
    //for (int i = 0; i < 10; i++)
    //{ 
   
    code = Request.QueryString["code"];
    if (code == null)
    {
        Response.Redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=http%3a%2f%2--你的域名--%2fET%2f&response_type=code&scope=snsapi_base&state=1#wechat_redirect");
    }
    else
    {
        string url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appid + "&secret=" + appsecret + "&code=" + code + "&grant_type=authorization_code";
        string jsonReturn = "";

        HttpWebRequest httprequest = (HttpWebRequest)WebRequest.Create(url);
        httprequest.Method = "GET";
        HttpWebResponse response = (HttpWebResponse)httprequest.GetResponse();
        using (Stream steam = response.GetResponseStream())
        {
            StreamReader reader = new StreamReader(steam, Encoding.GetEncoding("gb2312"));
            jsonReturn = reader.ReadToEnd();
            steam.Close();
        }

        JObject jo = JObject.Parse(jsonReturn);
        OPENID = jo["openid"].ToString();


    }
}

 

获取access_token

public static string getAccessToken()
{
    string appid =  System.Configuration.ConfigurationManager.AppSettings["appid"];
    string appsecret =  System.Configuration.ConfigurationManager.AppSettings["appsecret"];
    string access_token = null;

    string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + appsecret;
    string jsonReturn = "";

    HttpWebRequest httprequest = (HttpWebRequest)WebRequest.Create(url);
    httprequest.Method = "GET";
    HttpWebResponse response = (HttpWebResponse)httprequest.GetResponse();
    using (Stream steam = response.GetResponseStream())
    {
        StreamReader reader = new StreamReader(steam, Encoding.GetEncoding("gb2312"));
        jsonReturn = reader.ReadToEnd();
        steam.Close();
    }

    JObject jo = JObject.Parse(jsonReturn);
    access_token = jo["access_token"].ToString();
    return access_token;

} 

 

用post方式推送

private static string Post(string url, byte[] bytesToPost)
{
    if (String.IsNullOrEmpty(url))
        return "url参数为空值";
    if (bytesToPost == null)
        return "post数据为空值";
    string ResponseString = "";
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    System.Net.ServicePointManager.DefaultConnectionLimit = 50;
    request.KeepAlive = false;
    request.Method = "POST";
    request.ContentType = "text/xml";//提交xml 
    request.ContentLength = bytesToPost.Length;
    Stream writer = request.GetRequestStream();
    writer.Write(bytesToPost, 0, bytesToPost.Length);
    HttpWebResponse HttpWebRespon = (HttpWebResponse)request.GetResponse();
    StreamReader myStreamReader = new StreamReader(HttpWebRespon.GetResponseStream(), Encoding.UTF8);
    ResponseString = myStreamReader.ReadToEnd();
    myStreamReader.Close();

    writer.Flush();
    if (writer != null)
    {
        writer.Close();
    }
    if (request != null)
    {
        request.Abort();
    }
    return ResponseString;
} 

 

向openid发送定制消息

string access_token = getAccessToken();
string url = "https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=" + access_token;

string postText = "{ 
   \"touser\":[\"" + list[i].WeChatOpenId + "\",\"\"],\"msgtype\": \"text\",\"text\": { 
    \"content\": \"【 考试提醒 】\\n\\n\\n" + list[i].StudentName + "同学,你好!\\n明天有考试,请做好准备\\n\\n考试科目:" + list[i].ExamName + "\\n考试日期:" + list[i].Date + "\\n考试时间:" + list[i].StartTime + " - " + list[i].EndTime + "\\n考试地点:" + list[i].ExamPlace + "-" + list[i].SeatNo + "号\\n\\n" + "请提前准备好文具和证件\\n详细情况可点击“查考场”进行查询\\n\\n" + "祝您考试顺利~~\\n\\n\\n" + "-------------------------------\\n" + "xx公司 · 技术支持\\n" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "\"}}";



//因为汉字编码问题,出现40008错误,可采用以下方式对文本编码
//string contentText = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes("今天用微信和女神表白,什么排比、比喻各种修辞,可谓字字经典,句句动情,引经据典,声情并茂。最后,在我强烈的感情攻势下,女神终于回了一句:你谁啊?"));

Encoding encoding = Encoding.GetEncoding("utf-8");
byte[] bytesToPost = encoding.GetBytes(postText);
string res = Post(url, bytesToPost);

Console.WriteLine(res);

流程说明

1.首先需要获取用户openid,在用户访问页面的时候就可以获得,然后存到数据库中
2.获取access_token,用post方式调用微信接口向用户发送消息

注意:
具体什么时间发送,发送什么什么内容,根据自己的业务逻辑来编写
这里的定时发送采用的是Quartz框架,并把推送程序做成了一个服务

小结

在实现消息推送的过程中,遇到很多问题

比如:如何获取openid,获取access_token,在哪里获取,如何和微信接口交互,如何实现定时发送,程序应该是一个BS、CS、控制台、还是服务

在讨论和实践的过程中,每次叠加实现一个技术点,一步步实现了功能

今天的文章微信定制消息怎么设置_消息推送平台分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/67931.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注