Envío de notificación de suscripción de subprograma c #

Antes de que el subprograma envíe notificaciones de suscripción, necesita la autorización del usuario para enviarlo.

Código de mini programa:

Nota

1. Puede llamar hasta tres para cada llamada de autorización. Si hay varias plantillas de notificación, puede llamar a tres cuando hace clic en el botón a, y puede llamar a los otros tres cuando hace clic en el botón b, simplemente cámbielo de forma flexible.

2. Hay dos tipos de notificaciones de autorización de programas pequeños, a saber:

[Suscripción única] Después de que el usuario se suscribe de forma independiente, el desarrollador puede enviar un mensaje de servicio correspondiente sin límite de tiempo, cada mensaje puede suscribirse o darse de baja por separado.

[Mensajes de suscripción a largo plazo] Los mensajes de suscripción únicos pueden satisfacer las necesidades de la mayoría de los escenarios de servicio de los miniprogramas, pero hay escenarios en los servicios públicos fuera de línea que no se pueden cumplir con suscripciones únicas. Por ejemplo, si un vuelo se retrasa , debe enviar varios mensajes basados ​​en el recordatorio del estado del vuelo en tiempo real. Para la comodidad del servicio, proporcionamos un mensaje de suscripción a largo plazo. Después de que el usuario se suscribe una vez, el desarrollador puede enviar varios mensajes durante mucho tiempo.

En la actualidad, las noticias de suscripción a largo plazo solo están abiertas a los servicios públicos fuera de línea, como los asuntos gubernamentales y el sustento de las personas, la atención médica, el transporte, las finanzas, la educación, etc., y apoyarán gradualmente a otras empresas de servicios públicos fuera de línea en el futuro.

Por lo tanto, la mayoría de los programas pequeños solo tienen la función de "suscripción única". Solo el usuario hace clic en la autorización para enviar un mensaje de servicio correspondiente. Si hay varios mensajes para enviar, la página de autorización debe saltarse varias veces para permitir que usuario para autorizar. Esto es un dolor de cabeza

Enlace oficial: https://developers.weixin.qq.com/doc/offiaccount/Message_Management/One-time_subscription_info.html

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

Parte de desarrollo

//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();
        }

Obtener el método 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;
        }

Tenga en cuenta que los datos de jsonParam están en el formato de una plantilla, esto depende de cómo esté configurada su plataforma WeChat

 

Nota

1. La parte del cuadro rojo en la imagen de arriba es como: thing4 no se puede modificar, debe estar estrictamente de acuerdo con la plantilla

2. Primero publique varias situaciones de información de devolución encontrada

  • {"Errcode": 43101, "errmsg": "el usuario se niega a aceptar la sugerencia de mensaje: [e5WcGA07873114]"}

El usuario se niega a aceptar el mensaje. Si el usuario se ha suscrito antes, significa que el usuario ha cancelado la relación de suscripción. Si el usuario solo se suscribe una vez, la segunda transmisión también tendrá este error.

  • {"Errcode": 47003, "errmsg": "¡argumento no válido! pista: [26.oA01123945] data.character_string1.value i ”}

El parámetro de la plantilla es inexacto, puede estar vacío o no cumple con las reglas, errmsg preguntará qué campo es incorrecto y el nombre del parámetro está escrito en la plantilla de fondo del subprograma.

  • {"Errcode": 0, "errmsg": "ok"}

éxito

Aquellos que estén interesados ​​pueden prestar atención a " Ink Direct ", hay muchos materiales de programación gratuitos para recibir ~

Supongo que te gusta

Origin blog.csdn.net/huxinyu0208/article/details/109345439
Recomendado
Clasificación