国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Maison Applet WeChat Développement WeChat Explication détaillée des instructions d'utilisation de php WeChat pour développer des codes QR avec des paramètres

Explication détaillée des instructions d'utilisation de php WeChat pour développer des codes QR avec des paramètres

Mar 16, 2017 pm 03:00 PM

Cet article explique principalement en détail les instructions d'utilisation de php WeChat pour développer des codes QR avec des paramètres. Les amis intéressés peuvent se référer à

Récemment, j'ai développé des fonctions liées à WeChat pour la page Web WeChat PC. Du point de vue d'un novice, les documents des comptes publics WeChat sont encore difficiles à comprendre. La plupart des publications trouvées en ligne copient essentiellement les documents fournis sur la plateforme publique WeChat. Il y a encore des problèmes dans le processus de développement des codes QR paramétrés pour WeChat. J'ai rencontré de nombreux pièges, je vais donc enregistrer mon processus de développement plus en détail ici, en espérant que cela sera utile à tout le monde.

J'utilise le compte du service d'authentification pour ce développement.

1 Accès
Entrez d'abord dans le compte officiel WeChat-> Configuration de base
Ce qui suit est la page de configuration de base, remplissez l'adresse du serveur dans l'URL , cette adresse C'est une interface qui accepte les événements push WeChat. J'ai développé le programme en utilisant thinkframework PHP dans l'un des Module (Décoration) Créez une nouvelle classe dans le répertoire Action, par exemple : WechatAction.class.php, et créez une nouvelle méthode publique dans l'Action, par exemple : URLRedirect () , puis remplissez cette URL est http://[IP]:[port]/index.php/Decoration/Wechat/UrlRedirect, puis remplissez Token, Token Remplissez-le comme vous le souhaitez, EncodingAESKey est OK ou non, puis cliquez sur Confirmer. WeChat enverra une demande d'obtention à cette URL, qui contient de nombreux paramètres, dont la plupart nous le permettent. pour vérifier si cette visite est correcte. Elle a été demandée par le serveur WeChat. Je ne l'ai pas vérifié moi-même. Son exigence est que si nous vérifions avec succès, un paramètre echostr dans la requête get sera renvoyé comme. est. Le retour ici n'est pas return, ni Au lieu de ajaxReturn, utilisez echo Si vous développez avec thinkPHP, utilisez simplement echo I('echostr'); La vérification de l'interface est alors réussie.

Explication détaillée des instructions dutilisation de php WeChat pour développer des codes QR avec des paramètres

2 La fonction du code QR avec paramètres
Il existe deux types de codes QR avec paramètres dans WeChat, l'un est un code QR temporaire code, l'un est un code QR permanent, mais il y a une limite au nombre de codes QR permanents générés. La fonction que je souhaite implémenter cette fois est que les utilisateurs peuvent utiliser des produits sur le site Web sans se connecter, comme obtenir un produit détaillé. devis, mais ne souhaite pas s'inscrire, mais souhaite enregistrer le devis. à ce stade, la page Web peut générer un code QR. L'utilisateur n'a qu'à scanner le code QR avec WeChat, et le compte public officiel enverra des messages graphiques. à l'utilisateur pendant une journée, après avoir cliqué sur le message graphique, vous verrez le devis que l'utilisateur vient d'obtenir, et vous pourrez cliquer pour le visualiser à tout moment et le partager avec des amis pour comparer les prix. Par conséquent, le code QR temporaire peut être utilisé normalement.
Ce qui précède est comment je l'utilise. Voici une introduction à l'ensemble du
processus interactif?:

Lorsque l'utilisateur scanne ce code QR, s'il suit le fonctionnaire. compte, l'utilisateur entrera directement dans la page de conversation avec le compte officiel et le serveur WeChat enverra un message à l'URL du serveur que nous avons définie à l'étape précédente, qui peut contenir un paramètre personnalisé. Si l'utilisateur ne suit pas le compte officiel, l'utilisateur accédera d'abord à la page de suivi du compte officiel. Après que l'utilisateur ait cliqué pour suivre, il entrera directement dans la page de conversation du compte officiel. à ce moment, le serveur WeChat le fera également. envoyez un message d'événement à l'URL que nous avons définie, portant Nous personnalisons les paramètres et nous pouvons contr?ler l'action suivante en fonction de ce paramètre et de ce type d'événement.


3 Processus de développement spécifique

3.1 Obtenir un access_token
Cet access_token est le certificat permettant à notre programme d'appeler l'interface WeChat. La période de validité actuelle est de 7?200 secondes, nous devons donc le mettre à jour régulièrement. access_token.
Méthode d'obtention?:
Méthode?: GET
url?: https://api.weixin.qq.com/ cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
Les paramètres APPID et APPSECRET sont l'APPID et APPSECRET de notre compte officiel, qui se trouvent dans la configuration de base du compte officiel WeChat-> l'appel est réussi. Les données JSON suivantes seront renvoyées?:
{"access_token":"ACCESS_TOKEN","expires_in":7200}

où access_token est l'interface appelante. Pour les informations d'identification, expire_in est la durée de validité du jeton.
Je stocke personnellement le access_token dans la base de données, enregistre le délai d'expiration, puis encapsule la fonction publique getWechatAccessToken() à chaque fois, je vérifie d'abord si le access_token a expiré. -obtenir-le. Sinon, enregistrez-le directement dans la base de données. Le access_token est suffisant. J'ai oublié où je l'ai vu. Il devrait y avoir une limite au nombre de fois que cet access_token peut être obtenu par jour. Voici l'implémentation spécifique de getWechatAccessToken()?:

//獲取access_token
function getWechatAccessToken(){
 $wechatInfo = M('wechat_info')->select();
 $wechatInfo = array_reduce($wechatInfo, create_function('$result, $v', '$result[$v["conf_name"]] = $v;return $result;'));
 $expireTime = $wechatInfo['PUBLIC_WECHAT_ACCESSTOKEN_EXPIRES']['conf_value'];        //前面不用管,是我數(shù)據(jù)庫(kù)相應(yīng)設(shè)置

 if (time() < $expireTime){    //access_token未過期
  return $wechatInfo[&#39;PUBLIC_WECHAT_ACCESSTOKEN&#39;][&#39;conf_value&#39;];
 }else{         //access_token過期,重新獲取
  $baseUrl = C(&#39;WECHAT_PUBLIC_GET_ACCESS_TOKEN&#39;);
  $url = str_replace("##APPSECRET##", $wechatInfo[&#39;PUBLIC_WECHAT_APPSECRET&#39;][&#39;conf_value&#39;], str_replace("##APPID##", $wechatInfo[&#39;PUBLIC_WECHAT_APPID&#39;][&#39;conf_value&#39;], $baseUrl));
  $result = file_get_contents($url);
  $result = json_decode($result, true);

  if (array_key_exists(&#39;errorcode&#39;, $result)){  //失敗重試一次
   return false;
  }else{
   M(&#39;wechat_info&#39;)->where(array(&#39;conf_name&#39; => &#39;PUBLIC_WECHAT_ACCESSTOKEN&#39;))->save(array(&#39;conf_value&#39; => $result[&#39;access_token&#39;]));
   M(&#39;wechat_info&#39;)->where(array(&#39;conf_name&#39; => &#39;PUBLIC_WECHAT_ACCESSTOKEN_EXPIRES&#39;))->save(array(&#39;conf_value&#39; => time()+$result[&#39;expires_in&#39;]-200));
   return $result[&#39;access_token&#39;];
  }
 }
}

C('WECHAT_PUBLIC_GET_ACCESS_TOKEN') = https://api.weixin. qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

Après avoir encapsulé cela, nous pouvons l'utiliser en toute tranquillité d'esprit à chaque fois.

.2 Créer un code QR temporaire

3.2.1 Obtenir un ticket3

Méthode de requête?: POST
Interface?:https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN
Données POST?: {"expire_seconds": 604800 , "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}
Le TOKEN dans l'URL de l'interface est le access_token que nous avons obtenu dans la version 3.1, et expire_seconds dans les données de publication Le code QR est valide jusqu'à 30 jours. Le nom d'action du code QR temporaire est fixé à QR_SCENE. Il s'agit de notre paramètre personnalisé entier de 32 bits. à L'ID de la commande. Lorsque le serveur WeChat pousse l'événement, il renverra cette valeur à l'interface que nous avons définie. Ensuite, j'utiliserai cette valeur pour obtenir les données de commande correspondantes et les afficher sur la page Web. histoire plus tard.

Ce qui suit est une méthode encapsulée pour générer des codes QR temporaires?:

//創(chuàng)建臨時(shí)二維碼
function getTemporaryQrcode($orderId){
 $accessToken = getWechatAccessToken();
 $url = str_replace("##TOKEN##", $accessToken, C(&#39;WECHAT_PUBLIC_GET_TEMPORARY_TICKET&#39;));
 $qrcode = &#39;{"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": &#39;.$orderId.&#39;}}}&#39;;
 $result = api_notice_increment($url, $qrcode);
 $result = json_decode($result, true);
 return urldecode($result[&#39;url&#39;]);
}

La méthode api_notice_increment() est la mienne. Fonction de méthode POST encapsulée. J'ai essayé de nombreuses méthodes POST. Peut-être parce que l'interface WeChat a des restrictions strictes sur les méthodes et les paramètres POST, cela a fait perdre beaucoup de temps. Enfin, j'ai trouvé une méthode POST encapsulée qui peut être utilisée en ligne. essayez-le vous-même d'abord. Si WeChat renvoie une erreur, utilisez ceci. Au moins lorsque j'ai testé l'interface WeChat, j'ai utilisé postman pour tester et renvoyé toutes les erreurs, et je dois utiliser JSONString, certainement si c'est le cas. est une cha?ne JSON très stricte. Voici cette méthode?:

function api_notice_increment($url, $data){
 $ch = curl_init();
 $header = "Accept-Charset: utf-8";
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
 curl_setopt($ch, CURLOPT_USERAGENT, &#39;Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)&#39;);
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
 curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 $tmpInfo = curl_exec($ch);
 if (curl_errno($ch)) {
  curl_close( $ch );
  return $ch;
 }else{
  curl_close( $ch );
  return $tmpInfo;
 }

}

getTemporaryQrcode() Il y a un paramètre dans le fichier de configuration que tout le monde peut consulter . En fait, voici le lien de l'interface WeChat?:
C('WECHAT_PUBLIC_GET_TEMPORARY_TICKET') = https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=##TOKEN#. #

La valeur de retour de cette interface est?:
{"ticket":"gQH47joAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2taZ2Z3TVRtNzJXV1Brb3ZhYmJJAAIEZ23sUwMEmm3sUw==","exp ire_seconds":60, "url": "http:// weixin.qq.com/q /kZgfwMTm72WWPkovabbI"}

Où ticket est le bon que nous utilisons pour passer le prochain appel, expire_seconds est la période de validité du code QR et url est le lien que nous avons ouvert après avoir scanné le code QR que nous avons généré. Donc, si nous implémentons nous-mêmes la méthode de génération de code QR, nous n'avons pas besoin de passer l'appel suivant. Je m'arrête à cette étape et renvoie directement la valeur de l'url, puis j'utilise la valeur de cette url pour générer le code QR. et stockez-le localement. Vous pouvez utiliser phpqrcode pour générer des codes QR en PHP, ce qui est très simple à utiliser. évoquons brièvement la prochaine étape?:

3.2.2 獲取二維碼地址
請(qǐng)求方式: GET
接口:https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET
這個(gè)接口的返回值是一張圖片,可以直接展示或者下載,我們有具體使用過,所以也不知道應(yīng)該怎么展示。

3.3 用戶掃描二維碼之后發(fā)生的事情
3.3.1 掃描后發(fā)生了什么
上面提到了,用戶掃描我們生成的臨時(shí)二維碼,如果用戶未關(guān)注公眾號(hào),則首先會(huì)跳轉(zhuǎn)到公眾號(hào)的關(guān)注頁(yè)面,點(diǎn)擊關(guān)注后,會(huì)進(jìn)入公眾號(hào)的會(huì)話頁(yè)面,同時(shí)會(huì)給我們?cè)O(shè)置的接口推送一個(gè)事件。如果用戶已經(jīng)關(guān)注了,用戶微信會(huì)直接跳轉(zhuǎn)到公眾號(hào)會(huì)話頁(yè)面,然后微信服務(wù)器會(huì)給我們?cè)O(shè)置的接口推送一個(gè)事件。

用戶關(guān)注與否微信服務(wù)器給我們推送的事件是差不多的,只是新關(guān)注用戶推送的事件中scene_id前面會(huì)加一個(gè)前綴。下面是微信公眾平臺(tái)文檔的說明:

用戶未關(guān)注時(shí),進(jìn)行關(guān)注后的事件推送

<xml><ToUserName><![CDATA[toUser]]></ToUserName>        //開發(fā)者微信號(hào)
<FromUserName><![CDATA[FromUser]]></FromUserName>       //發(fā)送者賬號(hào)(openid)
<CreateTime>123456789</CreateTime>                //消息創(chuàng)建時(shí)間(整型)
<MsgType><![CDATA[event]]></MsgType>              //消息類型 event
<Event><![CDATA[subscribe]]></Event>              //事件類型(subscribe)
<EventKey><![CDATA[qrscene_123123]]></EventKey>        //事件KEY值,qrscene_為前綴,后面為二維碼參數(shù)值
<Ticket><![CDATA[TICKET]]></Ticket>               //二維碼ticke值,可以用來(lái)?yè)Q取二維碼圖片
</xml>

用戶已關(guān)注時(shí)的事件推送

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>        //開發(fā)者微信號(hào)
<FromUserName><![CDATA[FromUser]]></FromUserName>     //發(fā)送者賬號(hào)(openid)
<CreateTime>123456789</CreateTime>             //消息創(chuàng)建時(shí)間
<MsgType><![CDATA[event]]></MsgType>     //消息類型event
<Event><![CDATA[SCAN]]></Event>               //事件類型 event
<EventKey><![CDATA[SCENE_VALUE]]></EventKey>   //事件key值,是一個(gè)32位無(wú)符號(hào)整數(shù),即創(chuàng)建二維碼時(shí)的二維碼scene_id
<Ticket><![CDATA[TICKET]]></Ticket>      //二維碼的ticke,可以用來(lái)?yè)Q取二維碼圖片
</xml>

3.3.2 我們要做些什么

我們需要在自己填寫的URL接口中接收這個(gè)事件,然后拿到我們需要的東西做我們想干的事兒。因?yàn)槲乙獙?shí)現(xiàn)的功能比較簡(jiǎn)單,只需要拿到scene_id即可,因?yàn)檫@是我要展示給用戶看的訂單數(shù)據(jù)。下面是我寫的接收和處理部分,比較簡(jiǎn)單,主要看一下應(yīng)該怎么接收微信推送的事件:

public function urlRedirect(){
  $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
  $postObj = simplexml_load_string($postStr, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA);
  $fromUsername = (string)$postObj->FromUserName;
  $EventKey = trim((string)$postObj->EventKey);
  $keyArray = explode("_", $EventKey);
  if (count($keyArray) == 1){   //已關(guān)注者掃描
   $this->sendMessage($fromUsername, $EventKey);
  }else{                   //未關(guān)注者關(guān)注后推送事件
   $this->sendMessage($fromUsername, $keyArray[1]);
  }
 }

我沒有使用其他參數(shù),只是根據(jù)不同的推送事件拿到我想要的訂單ID,然后這時(shí)候其實(shí)相當(dāng)于你在這里用公眾號(hào)的客服在跟掃碼的這個(gè)用戶對(duì)話,上段代碼中調(diào)用的sendMessage()是使用客戶賬號(hào)給掃碼用戶發(fā)送一個(gè)圖文消息,因?yàn)槲以谀胹cen_id的同時(shí)也拿到了用戶的openid,可以利用這個(gè)給用戶發(fā)送消息。

下面是sendMessage()方法:

//給用戶發(fā)送圖文消息,點(diǎn)擊跳轉(zhuǎn)到報(bào)價(jià)頁(yè)面
 public function sendMessage($openid,$orderId){
  $url = str_replace(&#39;##TOKEN##&#39;, getWechatAccessToken(), C(&#39;WECHAT_SEND_MESSAGE&#39;));
  $redirectUrl = str_replace("##ORDERID##", $orderId, str_replace("##OPENID##", $openid, C(&#39;WECHAT_REDIRECT_URL_PRE&#39;)));
  $orderInfo = M(&#39;order&#39;)->where(array(&#39;orderid&#39; => $orderId))->field(array(&#39;totalMoney&#39;, &#39;savedMoney&#39;, &#39;roomarea&#39;))->find();
  $description = str_replace("##ROOMAREA##", intval($orderInfo[&#39;roomarea&#39;] * 1.25), C(&#39;WECHAT_MESSAGE_BRIEF&#39;));
  $description = str_replace("##TOTALBUDGET##", $orderInfo[&#39;totalMoney&#39;], $description);
  $description = str_replace("##MARKETBUDGET##", $orderInfo[&#39;totalMoney&#39;]+$orderInfo[&#39;savedMoney&#39;], $description);
  $description = str_replace("##SAVEMONEY##", $orderInfo[&#39;savedMoney&#39;], $description);
  $dataStr = &#39;{"touser":"&#39; . $openid . &#39;","msgtype":"news","news":{"articles":[{"title":"&#39; . C(&#39;WECHAT_MESSAGE_TITLE&#39;) .
   &#39;","description":"&#39; . $description . &#39;","url":"&#39; . $redirectUrl . &#39;","picurl":"&#39; . C(&#39;WECHAT_MESSAGE_PICURL&#39;) . &#39;""}]}}&#39;;
  api_notice_increment($url, $dataStr);
 }

其中 C('WECHAT_SEND_MESSAGE') = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=##TOKEN##' 至于下面的一大段str_replace,就是在組給用戶發(fā)送的文字而已,需要注意$dataStr的格式,這里面要求JSON字符串比較嚴(yán)格,必須所有的字符串都用雙引號(hào)括起來(lái)。微信接口對(duì)POST參數(shù)的限制真心嚴(yán)格。

下面是微信公眾平臺(tái)開發(fā)者文檔中要求發(fā)送圖文消息的POST data格式:

{
 "touser":"OPENID",
 "msgtype":"news",
 "news":{
  "articles": [
   {
    "title":"Happy Day",
    "description":"Is Really A Happy Day",
    "url":"URL",
    "picurl":"PIC_URL"
   },
   {
    "title":"Happy Day",
    "description":"Is Really A Happy Day",
    "url":"URL",
    "picurl":"PIC_URL"
   }
   ]
 }
}

其中url是用戶點(diǎn)擊這個(gè)消息之后打開的地址,這個(gè)時(shí)候我就組了一個(gè)自己網(wǎng)站的地址,是一個(gè)get請(qǐng)求地址,里面攜帶參數(shù)是用戶的openid和訂單id,這樣用戶點(diǎn)擊開圖文消息就可以看到自己剛才下單的內(nèi)容了,因?yàn)樾枰诰W(wǎng)頁(yè)上展示用戶的微信頭像和昵稱,所以我把openid也放到參數(shù)里,在頁(yè)面加載前先拿到用戶的個(gè)人信息和訂單數(shù)據(jù),再展示網(wǎng)頁(yè)。這樣流程:用戶未登錄下單 -> 生成微信二維碼 -> 用戶掃碼關(guān)注公眾號(hào) -> 查看訂單詳細(xì)信息 就完成了。而且因?yàn)檫@個(gè)圖文消息打開后的鏈接攜帶的參數(shù)是這個(gè)用戶的額openid和其下單的訂單ID,不管分享到哪兒,用什么瀏覽器打開都是可以訪問的,且展示的也是這個(gè)用戶的頭像和昵稱信息,這也是我要實(shí)現(xiàn)的一個(gè)效果。


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 de ce site Web
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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1502
276