Lorsqu'un utilisateur WeChat ordinaire envoie un message à un compte public, le serveur WeChat POSTera le paquet de données XML du message à l'URL renseignée par le développeur.
Veuillez noter :
1、关于重试的消息排重,推荐使用msgid排重。 2、微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。详情请见“发送消息-被动回复消息”。 3、为了保证更高的安全保障,开发者可以在公众平台官网的开发者中心处设置消息加密。开启加密后,用户发来的消息会被加密,公众号被动回复用户的消息也需要加密(但开发者通过客服接口等API调用形式向用户发送消息,则不受影响)。关于消息加解密的详细说明,请见“消息加解密说明”。
La structure des paquets XML push de chaque type de message est la suivante :
<xml> <tousername></tousername> <fromusername></fromusername> <createtime>1348831860</createtime> <msgtype></msgtype> <content></content> <msgid>1234567890123456</msgid> </xml>
Paramètre | Description | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ToUserName |
Micro Signal |
||||||||||||||
FromUserName | Compte expéditeur (un OpenID) | ||||||||||||||
CreateTime | Durée de création du message (entier)|||||||||||||||
MsgType | texte | ||||||||||||||
Contenu | Contenu du message texte | ||||||||||||||
MsgId | Identifiant du message, entier 64 bits |
参数 | 描述 |
---|---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | image |
PicUrl | 图片链接 |
MediaId | 图片消息媒体id,可以调用多媒体文件下载接口拉取数据。 |
MsgId | 消息id,64位整型 |
Paramètre | Description | ||
---|---|---|---|
ToUserName td > | DéveloppeurID WeChat |
||
FromUserName | Compte expéditeur (un OpenID) | tr>CreateTime | Heure de création du message (entier) |
MsgType | image | ||
PicUrl | Lien photo | ||
MediaId | Identifiant multimédia du message photo, vous pouvez appeler l'interface de téléchargement de fichiers multimédias extrait des données. | ||
MsgId | Identifiant du message, entier 64 bits |
<xml> <tousername></tousername> <fromusername></fromusername> <createtime>1357290913</createtime> <msgtype></msgtype> <mediaid></mediaid> <format></format> <msgid>1234567890123456</msgid> </xml>
参数 | 描述 |
---|---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 语音为voice |
MediaId | 语音消息媒体id,可以调用多媒体文件下载接口拉取数据。 |
Format | 语音格式,如amr,speex等 |
MsgID | 消息id,64位整型 |
Paramètre | Description |
---|---|
ToUserName | Développeur<xml> <tousername></tousername> <fromusername></fromusername> <createtime>1357290913</createtime> <msgtype></msgtype> <mediaid></mediaid> <format></format> <recognition></recognition> <msgid>1234567890123456</msgid> </xml> Copier après la connexion |
FromUserName | Compte expéditeur (un OpenID) |
CreateTime | Durée de création du message (entier) |
MsgType | La voix est une voix | Identifiant multimédia du message vocal, vous pouvez appeler l'interface de téléchargement de fichiers multimédia pour extraire des données. |
Format | Format vocal, tel que amr, speex, etc. |
MsgID td>Identifiant du message, entier 64 bits |
Veuillez noter qu'après avoir activé la reconnaissance vocale, chaque fois que l'utilisateur envoie un message vocal au responsable compte, WeChat transmettra le message. Dans le paquet de données XML du message vocal, ajoutez un champ de reconnaissance (Remarque : en raison de la mise en cache du client, les développeurs activent ou désactivent la fonction de reconnaissance vocale, qui prendra effet immédiatement pour les nouveaux abonnés et prendra 24 heures pour déjà les utilisateurs suivis. Les développeurs peuvent suivre à nouveau. Ce compte est destiné aux tests). Le paquet de données XML vocales après activation de la reconnaissance vocale est le suivant :
<xml> <tousername></tousername> <fromusername></fromusername> <createtime>1357290913</createtime> <msgtype></msgtype> <mediaid></mediaid> <thumbmediaid></thumbmediaid> <msgid>1234567890123456</msgid> </xml>
参数 | 描述 |
---|---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 视频为video |
MediaId | 视频消息媒体id,可以调用多媒体文件下载接口拉取数据。 |
ThumbMediaId | 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。 |
MsgId | 消息id,64位整型 |
Paramètre | Description |
---|---|
ToUserName | DéveloppeurID WeChat |
FromUserName | Compte expéditeur (un OpenID) |
CreateTime | Durée de création du message (entier) |
MsgType | La vidéo est une vidéo |
MediaId | Identifiant multimédia du message vidéo, vous pouvez appeler l'interface de téléchargement de fichiers multimédia pour extraire les données. |
ThumbMediaId | L'ID multimédia de la vignette du message vidéo, vous pouvez appeler l'interface de téléchargement de fichiers multimédia pour extraire les données. |
MsgId | Identifiant du message, entier 64 bits |
<xml> <tousername></tousername> <fromusername></fromusername> <createtime>1357290913</createtime> <msgtype></msgtype> <mediaid></mediaid> <thumbmediaid></thumbmediaid> <msgid>1234567890123456</msgid> </xml>
参数 | 描述 |
---|---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 小视频为shortvideo |
MediaId | 视频消息媒体id,可以调用多媒体文件下载接口拉取数据。 |
ThumbMediaId | 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。 |
MsgId | 消息id,64位整型 |
Description | |
---|---|
ToUserName | DéveloppeurID WeChat |
FromUserName | Compte expéditeur (un OpenID) |
Durée de création du message (entier) | |
MsgType | La courte vidéo est shortvideo | MediaId | Identifiant multimédia du message vidéo, vous pouvez appeler l'interface de téléchargement de fichiers multimédia pour extraire des données. |
ThumbMediaId | L'ID multimédia de la vignette du message vidéo, vous pouvez appeler l'interface de téléchargement de fichiers multimédia pour extraire les données. |
MsgId | Identifiant du message, type entier 64 bits |
<xml> <tousername></tousername> <fromusername></fromusername> <createtime>1351776360</createtime> <msgtype></msgtype> <location_x>23.134521</location_x> <location_y>113.358803</location_y> <scale>20</scale> <label></label> <msgid>1234567890123456</msgid> </xml>
参数 | 描述 |
---|---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | location |
Location_X | 地理位置维度 |
Location_Y | 地理位置经度 |
Scale | 地图缩放大小 |
Label | 地理位置信息 |
MsgId | 消息id,64位整型 |
<xml> <tousername></tousername> <fromusername></fromusername> <createtime>1351776360</createtime> <msgtype></msgtype> <title></title> <description></description> <url></url> <msgid>1234567890123456</msgid> </xml>
参数 | 描述 |
---|---|
ToUserName | 接收方微信号 |
FromUserName | 发送方微信号,若为普通用户,则是一个OpenID |
CreateTime | 消息创建时间 |
MsgType | 消息类型,link |
Title | 消息标题 |
Description | 消息描述 |
Url | 消息链接 |
MsgId | 消息id,64位整型 |
Dans la continuité de l'article précédent, regardez ResponseXML(postString) ; la méthode est la suivante
///
/// Récupérer les messages envoyés par les utilisateurs
///
///
private void ResponseXML(string postString)
{
XmlElement rootElement = xmlDoc.Do cumentElement;//Récupérer la racine du document
XmlNode MsgType = rootElement.SelectSingleNode("MsgType"); //Récupérer le texte type du message
RequestXML requestXML = new RequestXML();//Déclarez l'instance, récupérez chaque attribut et attribuez une valeur
requestXML.ToUserName = rootElement.SelectSingleNode ("ToUserName").InnerText;//Compte public
requestXML.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText;//User
requestXML.CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText ;//Heure de création
requestXML.MsgType = MsgType.InnerText;//Type de message
… requestXML.Content = rootElement.SelectSingleNode("Content").InnerText;
Valeurs de localisation géographique latitude, longitude , Taux de zoom de la carte, description de l'emplacement géographique
requestXML.Location_X = rootElement.SelectSingleNode("Location_X").InnerText;
requestXML.Location_Y = rootElement.SelectSingleNode("Location_Y").InnerText;
requestXML.Scale = rootElement.SelectSingleNode("Scale").InnerText;
requestXML.Label = m().ToLower() = = "événement")
requestXML.EventKey = rootElement.SelectSingleNode ("EventKey").InnerText ;
Par conséquent, avant d'attribuer une valeur, vous devez penser à activer la fonction de reconnaissance vocale en mode développeur, sinon vous ne pourrez pas l'obtenir. requestXML.Recognition = rootElement.SelectSingleNode("Recognition"). InnerText; requestXML);
}
La fonction de reconnaissance vocale est activée comme suit :
requestXML en est une que j'ai créée séparément, qui déclare les champs d'attributs couramment utilisés dans les messages, comme suit :
///
/// La classe d'entité qui reçoit le message
///
public class RequestXML
{
private String toUserName = Chaîne .Vide;
// /
ID utilisateur WeChat / / //
public String > Contenu de chaîne publique {get set ; ;}
/*Ce qui suit est l'attribut unique du type d'événement.
public String EventName{get;set;>
///
/*ci-dessous se trouvent les attributs uniques des types graphiques*/
/// & lt; résumé & gt;
/// Le nombre de messages graphiques
///
public int { get; set; summary>
public string Title { get set;
///
Voici les attributs uniques du type de message type*/
/// & lt; résumé & gt;
/// Latitude de l'emplacement géographique
/// & lt;/summary
Public String local ; //
/// Localisation géographique longitude
///
public String Recognition { get; set; }
}
Continuer à suivre ResponseMsg(requestXML);Le La méthode est la suivante :
string MsgType = request switch (MsgType)
{
cas "événement"://Envoyer un message d'événement
si (!string.IsNullOrWhiteSpace(requestXML.EventName ) && requestXML.EventName.ToString().Trim().Equals("subscribe"))
g(requestXML);//Envoyer un message d'événement
}
Pause
case "voice":
SendVoiceMsg(requestXML);//Envoyer un message vocal
break;
case "location"://Envoyer un message de localisation
SendMapMsg(requestXML);
break;
par défaut:
break;
}
}
catch (Exception ex)
Envoyer un SMS
> chaîne de réponseContent = FormatText XML(requestXML.FromUserName, requestXML.ToUserName, requestXML.Content); HttpContext.Current.Response.ContentEncoding = Encoding.UTF8 ;
HttpContext.Current.Response.Write(responseContent);
>
La méthode FormatTextXML définit le format
///
/// Renvoyer le contenu XML formaté
Compte public
/param>
Nom d'utilisateur> ;
De cette façon, le une réponse au message peut être réalisée Si l'utilisateur clique sur le bouton, le code suivant :
case "event"://Envoyer un message d'événement
if.
(!string.IsNullOrWhiteSpace(requestXML.EventName) &&
requestXML.EventName.ToString().Trim().Equals("subscribe"))
sinon si (!string.IsNullOrWhiteSpace(requestXML.EventName) &&
requestXML.EventName.ToString().Trim().Equals("CLIQUEZ"))
///
; param>
private void SendEventMsg(RequestXML requestXML)
{
string keyStr = requestXML.EventKey.ToString();
switch (keyStr )
{
case "mypay":
SendPayDetails(requestXML);//Envoyer la facture de salaire
SendWeaterMessage(requestXML);//S fin des prévisions météo
pause;
cas "kaixinyixiao " :
SendKaiXinMessage(requestXML);//Envoyer un ensemble de résultats de sourire heureux
SendUpdateMessage(requestXML);//Envoyer le lien d'informations de modification
> case "yuangonghuodong":
SendYuanGongHuoDong( requêteXML);/ /Envoyer des activités aux étudiants
pause;
case "yu angongtongzhi":
SendYuanGong Tongzhi(requestXML); //Envoyer une notification aux employés
case "youwenbida":
SendWenti(requestXML); //Envoyer le lien de soumission des employés :
SendWentiList(requestXML);//Envoyer le lien de la liste de questions ;
par défaut :
String réponseContent = String.Empty;
réponseContent = FormatTextXML(requestXML.FromUserName, requestXML.ToUserName,"Cette fonctionnalité n'est pas encore disponible ! Veuillez rester à l'écoute !"); réponseContent);
HttpContext.Current.Response.End();
break;
}
}
SendWelComeMsg(requestXML); //Le message graphique renvoyé en suivant
/// Le message graphique est renvoyé lors du suivi de
/// string newdate = DateTime.Now. .Subtract(new DateTime(1970, 1, 1, 8, 0, 0)).TotalSeconds.ToString();
string PUrlfileName = "http://www.deqiaohr. com.cn/weixin/welcome.jpg ";
ResponseContent = string.Format(Message_News_Main, requestXML.FromUserName, requestXML.ToUserName, newdate, "1",
Employee Service Center", "Suzhou Deqiao Human Resources a été fondée en 2002...", PUrlfileName , "http://www.deqiaohr.com.cn/weixin/WxGsjianjie.aspx"));
HttpContext.Current .Response.ContentType = "text/xml";
HttpContext.Current.Response.ContentEncoding = Encoding.UTF8; HttpContext.Current.Response.End ();
}
Message_News_Main et Message_News_Item sont des formats de messages graphiques et texte
/// /// Cliquez pour afficher le texte intégral et accédez directement à la page Web que vous avez écrite. Concernant le problème des images de page Web adaptatives, définissez simplement la largeur. de l'image à 100%. Si vous souhaitez que la page web s'adapte à l'écran, pensez à ajouter
/// 返回图文消息主体
///
chaîne statique publique Message_News_Main
{
obtenir
{
return @"
{4} 🎜> antecedents Article
{
obtenir
{
return @"
}
/// /param>
private void SendVo iceMsg(RequestXML requestXML)
ToString());
HttpContext.Current.Response.ContentType = "text /xml";
HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
HttpContext.Current .Response.Write(responseContent) ;
HttpContext.Current.Response.End();
}
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!