Maison >développement back-end >tutoriel php >Explication détaillée de l'interface de menu personnalisée PHP WeChat, de l'interface du service client et du code d'utilisation du code QR

Explication détaillée de l'interface de menu personnalisée PHP WeChat, de l'interface du service client et du code d'utilisation du code QR

伊谢尔伦
伊谢尔伦original
2017-07-03 10:37:102042parcourir

Comment appeler l'interface avancée de WeChat

La différence entre l'interface avancée de WeChat et l'interface ordinaire de WeChat

Backend Le serveur peut appeler des interfaces WeChat pour communiquer des messages avec les utilisateurs de WeChat, c'est appeler des interfaces WeChat. Ces interfaces sont des interfaces de base et vous pouvez les appeler sans aucun paiement ni authentification d'identité. Cependant, il existe certaines interfaces avancées. Votre compte officiel WeChat doit obtenir certaines autorisations, telles que passer l'authentification WeChat pour appeler le menu personnalisé, le paiement WeChat et d'autres fonctions avancées.
Cependant, le système de compte test des comptes publics WeChat peut appliquer ces interfaces avancées (à l'exception des interfaces impliquant des transactions telles que le paiement WeChat).

Interface avancée de Call of WeChat

L'interface avancée de Call of WeChat doit d'abord appeler une interface token_access. Ce n'est qu'en appelant d'abord cette interface que les autres peuvent le faire. les interfaces avancées soient appelées interface.
Comme suit : Schéma de connexion de l'interface avancée


L'appel de token_access nécessite appID et appsecreset (déjà utilisé dans le développement de la plateforme de compte public WeChat (1 ) Dites l'origine des deux)

Le code d'appel est le suivant

<?php
$appid = "wxbad0b4x543aa0b5e";
$appsecret = "ed222a84da15cd24c4bdfa5d9adbabf2";
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
//下面是一个cURL会话过程,通过这个会话可以返回一段字符串{"access_token":"NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l-Se0I-WmOLLniAYLAwzhbYhXNjb"}
这就是我们要获得的Access Token了。在调用高级功能接口的时候就靠它。这个过程用的时候直接引用就好,不需要深究,这个cURL系统相关函数有点多而且复杂。

$ch = curl_init();//初始化
curl_setopt($ch, CURLOPT_URL, $url);//与url建立对话
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //进行配置
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); //进行配置
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//进行配置
$output = curl_exec($ch);//执行对话,获取接口数据Access Token
curl_close($ch);//关闭会话
$jsoninfo = json_decode($output, true);//解码接口数据,将json格式字符串转换成php变量或数组。默认是变量,加true后是数组。
$access_token = $jsoninfo["access_token"];

?>

Appel de l'interface avancée WeChat

1), appelant la fonction de menu personnalisé

 //创建一个自定义菜单的json字符串
 $jsonmenu = &#39;{
  "button":[
  {
   "name":"关于我们",
   "sub_button":[
   {
    "type":"click",
    "name":"公司简介",
    "key":"公司简介"
   },
   {
    "type":"click",
    "name":"社会责任",
    "key":"社会责任"
   },
   {
    "type":"click",
    "name":"联系我们",
    "key":"联系我们"
   }]
  },
  {
   "name":"产品服务",
   "sub_button":[
   {
    "type":"click",
    "name":"微信平台",
    "key":"微信平台"
   },
   {
    "type":"click",
    "name":"微博应用",
    "key":"微博应用"
   },
   {
    "type":"click",
    "name":"手机网站",
    "key":"手机网站"
   }]
  },
  {
   "name":"技术支持",
   "sub_button":[
   {
    "type":"click",
    "name":"文档下载",
    "key":"文档下载"
   },
   {
    "type":"click",
    "name":"技术社区",
    "key":"技术社区"
   },
   {
    "type":"click",
    "name":"服务热线",
    "key":"服务热线"
   }]
  }]
 }&#39;;

 $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;//接口地址
$result = https_request($url, $jsonmenu);//与接口建立会话
var_dump($result);

function https_request($url,$data = null){
 $curl = curl_init();
 curl_setopt($curl, CURLOPT_URL, $url);
 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
 if (!empty($data)){
  curl_setopt($curl, CURLOPT_POST, 1);
  curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
 }
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 $output = curl_exec($curl);
 curl_close($curl);
 return $output;
}
//把这段代码加入到上面的调用Access Token接口的代码中就可以实现在微信公众号界面添加菜单的功能。

Après avoir ajouté un menu au compte officiel WeChat, comment définir l'effet correspondant en cliquant sur le menu ?
Cela implique un autre type XML de transfert de données :

<xml>
<ToUserName><![CDATA[gh_82479813ed64]]></ToUserName>
<FromUserName><![CDATA[ojpX_jig-gyi3_Q9fHXQ4rdHniQs]]></FromUserName>
<CreateTime>1392297442</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[CLICK]]></Event>
<EventKey><![CDATA[公司简介]]></EventKey>
</xml>
//上面是点击click菜单的数据传递类型,数据会发送给后台服务器,然后服务器做出响应。

Il existe de nombreux types de menus, et les types XML sont différents Pour plus de détails, vous pouvez consulter les documents correspondants sur la plateforme de compte public WeChat.

*Ce que je veux expliquer ici, c'est que tant que vous avez l'appID et l'appsecret du compte officiel WeChat, vous pouvez entrer dans le serveur WeChat pour appeler la fonction correspondante en exécutant ce code php dans n'importe quel espace serveur. Il n'est pas nécessaire de l'exécuter sous un serveur avec vérification de jeton. La vérification des jetons permet au serveur principal de déterminer si la source de données provient du serveur WeChat et n'a pas grand-chose à voir avec l'appel de l'interface de haut niveau du serveur WeChat.
Le fichier php doit être exécuté sur le serveur pour avoir un effet.

L'appel d'autres interfaces avancées est le même que l'appel du menu personnalisé.

2), appelez l'interface du service client

Lorsqu'un utilisateur de WeChat envoie activement un message à un compte public WeChat (y compris l'envoi d'un message, le clic sur un événement de clic de menu personnalisé, l'abonnement à un événement, et numérisation d'un code QR, événement de réussite du paiement) WeChat transmettra les données du message au développeur. Les développeurs peuvent appeler des messages de l'interface du service client dans un délai donné et envoyer des messages aux utilisateurs en publiant un paquet de données JSON.

Le code est le suivant :

$access_token = "nFX6GFsspSLBKJLgMQ3kj1YM8_FchRE7vE2ZOIlmfiCOQntZKnBwuOen2GCBpFHBYS4QLGX9fGoVfA36tftME2sRiYsKPzgGQKU-ygU7x8cgy_1tlQ4n1mhSumwQEGy6PK6rdTdo8O8GROuGE3Hiag";
$openid = "o7Lp5t6n59DeX3U0C7Kric9qEx-Q";//微信用户都有一个openID

La figure ci-dessous montre comment obtenir openID.


$data = &#39;{
 "touser":"&#39;.$openid.&#39;",
 "msgtype":"text",
 "text":
 {
   "content":"Hello World"
 }
}&#39;;//通过基础消息接口发送的数据是XML格式的,但是调用客服接口发送的数据是json数据格式,更易传输。 
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$access_token;
$result = https_request($url,$data);
var_dump($result);

function https_request($url,$data)
{
 $curl = curl_init();
 curl_setopt($curl, CURLOPT_URL, $url); 
 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
 curl_setopt($curl, CURLOPT_POST, 1);
 curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 $result = curl_exec($curl);
 if (curl_errno($curl)) {
  return &#39;Errno&#39;.curl_error($curl);
 }
 curl_close($curl);
 return $result;
}

Pour le format spécifique de l'interface du service client pour envoyer des messages graphiques, des messages musicaux et des messages vidéo , veuillez vous référer à la documentation d'aide au développement de la plateforme publique WeChat.
L'interface du service client peut être mixée avec l'interface de message.

Ici, vous ne comprenez peut-être pas pourquoi vous avez besoin d'une telle interface de service client puisque vous pouvez envoyer directement des données XML aux utilisateurs via l'interface de message de réponse passive ? On peut comprendre qu'un message de réponse passive est une réponse unique au même message une seule fois. Si vous saisissez le nom d'un chanteur sur une plateforme musicale, le message envoyé via la réponse passive vous répondra toujours avec la même chanson. Cependant, vous pouvez répondre à des chansons différentes à chaque fois via l'interface du service client, qui implique la base de données MySQL.

Un peu plus simple, une plateforme publique WeChat pour visualiser la livraison express incluant l'adresse. Chaque fois que vous entrez le même numéro de commande, l'arrière-plan peut répondre à chaque fois à l'emplacement de la commande (différentes réponses peuvent être faites pour le même texte), tout comme une réponse manuelle. Il s'agit de l'interface du service client.

3), Générer une interface de code QR

Il existe deux types de codes QR, à savoir le code QR temporaire hein et le code QR permanent. Le premier a un délai d'expiration allant jusqu'à 1800 s.
Vous devez appeler 3 interfaces pour générer un code QR.
La première est access_token
La seconde consiste à générer une interface de ticket
La troisième consiste à échanger les tickets générés via la deuxième interface contre 2 QR. image de code.

$access_token = " xDx0pD_ZvXkHM3oeu5oGjDt1_9HxlA-9g0vtR6MZ-v4r7MpvZYC4ee4OxN97Lr4irkPKE94tzBUhpZG_OvqAC3D3XaWJIGIn0eeIZnfaofO1C3LNzGphd_rEv3pIimsW9lO-4FOw6D44T3sNsQ5yXQ";//假定获取的ACCESS TOKEN为这段代码。

//临时二维码
$qrcode = &#39;{"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 10000}}}&#39;;
//永久二维码
$qrcode = &#39;{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 1000}}}&#39;;

$url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=$access_token";//创建ticket接口
$result = https_request($url,$qrcode);
$jsoninfo = json_decode($result, true);
$ticket = $jsoninfo["ticket"];

function https_request($url, $data = null){
 $curl = curl_init();
 curl_setopt($curl, CURLOPT_URL, $url);
 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
 if (!empty($data)){
  curl_setopt($curl, CURLOPT_POST, 1);
  curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
 }
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 $output = curl_exec($curl);
 curl_close($curl);
 return $output;
}


$ticket = "gQHi8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0UweTNxNi1sdlA3RklyRnNKbUFvAAIELdnUUgMEAAAAAA==";//获取ticket的字符串

$url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".urlencode($ticket);//ticket对面二维码图片代码。
$imageInfo = downloadWeixinFile($url);

$filename = "qrcode.jpg";
$local_file = fopen($filename, &#39;w&#39;);
if (false !== $local_file){
 if (false !== fwrite($local_file, $imageInfo["body"])) {
  fclose($local_file);
 }
}

function downloadWeixinFile($url)
{
 $ch = curl_init($url);
 curl_setopt($ch, CURLOPT_HEADER, 0); 
 curl_setopt($ch, CURLOPT_NOBODY, 0); //只取body头
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 $package = curl_exec($ch);
 $httpinfo = curl_getinfo($ch);
 curl_close($ch);
 return array_merge(array(&#39;body&#39; => $package), array(&#39;header&#39; => $httpinfo)); 
}

Exécutez ce code dans l'espace serveur et le navigateur générera une image de code QR.

Obtenez des interfaces fonctionnelles non WeChat, telles que l'obtention d'informations sur le trafic, les prévisions météorologiques.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn