c# 小程序订阅通知推送

小程序发送订阅通知前,需要用户进行授权才可以发送,

小程序代码:

注意

1、每次调用授权最多调用三个,如果有多个通知模板,可以在点击a按钮时调用三个,点击b按钮时调用另外三个,灵活变动就行

2、小程序授权通知分两种,分别是:

【一次订阅】用户自主订阅后,开发者可不限时间地下发一条对应的服务消息;每条消息可单独订阅或退订。

【长期性订阅消息】一次性订阅消息可满足小程序的大部分服务场景需求,但线下公共服务领域存在一次性订阅无法满足的场景,如航班延误,需根据航班实时动态来多次发送消息提醒。为便于服务,我们提供了长期性订阅消息,用户订阅一次后,开发者可长期下发多条消息。

目前长期性订阅消息仅向政务民生、医疗、交通、金融、教育等线下公共服务开放,后期将逐步支持到其他线下公共服务业务

所以,大部分小程序都只有“一次订阅”的功能,只有用户点击授权才能下发一条对应的服务消息,如果有多个消息需要推送,就必须多次跳出授权页面,让用户进行授权了。这是个很头疼的问题

官方链接:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/One-time_subscription_info.html

参考:https://developers.weixin.qq.com/community/develop/doc/00008a8a7d8310b6bf4975b635a401?blockType=1

开发部分

//openid为接收订阅通知用户的openid
//username根据你模板参数来
//repairtime根据你模板参数来
  public void SendSubscribe_repair(string openid, string username, DateTime repairtime, string address, string remarks)
        {
            string access_token = GetAccess_token();//Access_Token,这边写个方法,调用接口
            string _url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + access_token;
            string jsonParam = "{\"touser\": \"" + openid + "\"," +
                "\"template_id\": \""+Constant.KL_SUBSCRIBE_BAOXIU + "\"," +
                "\"data\": {\"thing4\": { \"value\": \"" + username + "\"}," +
                "\"time5\": {\"value\": \"" + repairtime + "\"}" +
                ",\"thing2\": {\"value\": \"" + address + "\"}," +
                "\"thing3\": {\"value\": \"" + remarks + "\"}}}";
                //注意jsonParam 的数据为模板的格式,这个就看你微信平台如何设置的了
                
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_url);
            request.Method = "POST";
            request.Timeout = 5000;
            request.ContentType = "application/json;charset=UTF-8";
            byte[] byteData = Encoding.UTF8.GetBytes(jsonParam);
            int length = byteData.Length;
            request.ContentLength = length;
            using (Stream writer = request.GetRequestStream())
            {
                writer.Write(byteData, 0, length);
                writer.Close();
            }
            string jsonStrings = string.Empty;
            using (HttpWebResponse responses = (HttpWebResponse)request.GetResponse())
            {
                using (Stream streams = responses.GetResponseStream())
                {
                    using (StreamReader readers = new StreamReader(streams, System.Text.Encoding.UTF8))
                    {
                        jsonStrings = readers.ReadToEnd();
                        responses.Close();
                        streams.Close();
                        readers.Close();
                    }
                }
            }
            //这里是返回的数据
            JObject jo = (JObject)JsonConvert.DeserializeObject(jsonStrings);
            string errcode = jo["errcode"].ToString();
            string errmsg = jo["errmsg"].ToString();
        }

获取access_token方法

  private string GetAccess_token()
        {
            string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="小程序appid"&secret="小程序appsecret";
            System.Net.WebClient wCient = new System.Net.WebClient();
            wCient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
            byte[] postData = System.Text.Encoding.UTF8.GetBytes("");
            byte[] responseData = wCient.UploadData(url, "POST", postData);
            string returnStr = System.Text.Encoding.UTF8.GetString(responseData);//返回接受的数据 
            JObject obj = (JObject)JsonConvert.DeserializeObject(returnStr);
            string access_token = obj["access_token"].ToString();
            return access_token;
        }

注意jsonParam 的数据为模板的格式,这个就看你微信平台如何设置的了

注意

1、上图中红框部分如:thing4是不能修改的,需严格按照模板来

2、先贴下遇到的返回信息的几种情况

  • {“errcode”:43101,“errmsg”:“user refuse to accept the msg hint: [e5WcGA07873114]”}

用户拒绝接受消息,如果用户之前曾经订阅过,则表示用户取消了订阅关系,如果只订阅1次,第二次发送也会有这个错误

  • {“errcode”:47003,“errmsg”:“argument invalid! hint: [26.orA01123945] data.character_string1.value i”}

模板参数不准确,可能为空或者不满足规则,errmsg会提示具体是哪个字段出错 参数名按照小程序后台模板里的写

  • {“errcode”:0,“errmsg”:“ok”}

成功

有兴趣的可以关注“墨水直达”,里面有许多免费的编程资料可以领取哦~

猜你喜欢

转载自blog.csdn.net/huxinyu0208/article/details/109345439