当前位置:网站首页>PHP wechat official account development
PHP wechat official account development
2022-07-05 01:17:00 【℡ pure Chinese ~】
Calling interface of official account
/* official account */
public function check_server()
{
// Verify the server address URL If you need to verify for the first time
if (isset($_GET['echostr'])) {
$this->valid();
} else {
// Official operation of official account
$this->responseMsg();
$this->setMenu();
}
}
One 、 Verify official account for the first time
// verification
private function valid()
{
$echoStr = $_GET["echostr"];
if ($this->checkSignature()) {
header('content-type:text');
echo $echoStr;
exit;
} else {
echo $echoStr . '+++' . WXTOKEN;
exit;
}
}
// attestation
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = WXTOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if ($tmpStr == $signature) {
return true;
} else {
return false;
}
}
Two 、 Official account operation
// Official account automatically replies to messages and pays attention to reply messages
public function responseMsg()
{
//file_get_contents()
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
//extract post data
if (!empty($postStr)) {
libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
//$file = fopen("/var/www/html/ecshop/api/app/ceshi.log", "a+");// Create a file or open a file
// fwrite($file, ' Type of reception ' . '----'.json_encode($postObj).'-------------------' . date('Y-m-d H:i:s', time()) . "\r\n");
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$msgType = $postObj->MsgType; // Message type
$event = $postObj->Event; // Time type ,subscribe( subscribe )、unsubscribe( Unsubscribe )
$textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml>";
$contentStr = " Default reply text ";
switch ($msgType) {
case "event":
if ($event == "subscribe") {
$contentStr = '<a data-miniprogram-appid=" Applet appid" data-miniprogram-path=" Applet path " data-miniprogram-nickname=" The name of the applet is not required " data-miniprogram-type="text" href=""> Users pay attention to the information returned by official account </a>';
}
break;
case "text":
if (strpos($keyword, ' refund ') !== false || strpos($keyword, ' Refund ') !== false) {
$contentStr = ' The corresponding text is detected and returned ';
// $again = true;
} elseif (strpos($keyword, ' Customer service ') !== false || strpos($keyword, ' complaints ') !== false || strpos($keyword, ' Order ') !== false) {
$contentStr = ' The corresponding text is detected and returned ';
}
break;
}
if ($event == "CLICK" && $postObj->EventKey == "business_cooperation") {
$contentStr = ' Click Customize menu to return ';
}
$msgType = "text";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
} else {
echo "";
exit;
}
}
// Set up custom menus
private function setMenu()
{
$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $this->getToken();
$data = '{ "button":[ { "type":"miniprogram", // Jump applet "name":" Menu name 1", "url":" Alternate address ", "appid":" Applet appid", "pagepath":" Applet page address " }, { "type":"miniprogram", // Jump applet "name":" Menu name 2", "url":" Alternate address ", "appid":" Applet appid", "pagepath":" Applet page address " }, { "type":"click", // Click reply "name":" Menu name 3", "key":"business_cooperation" // Received when replying to the message KEY Customize } ] }';
$resArr = $this->httpRequest($url, $data);
var_dump($resArr);
}
// obtain token
public function getToken($type = 0)
{
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=appSecret";
$res = json_decode($this->httpGet($url));
$access_token = $res->access_token;
return $access_token;
}
// Request an excuse
private function httpGet($url)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
private function httpRequest($url, $data = null)
{
$ch = curl_init();
//3. Set parameters
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Skip Certificate Validation
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // Check... From the certificate SSL Whether the encryption algorithm exists
//4. Call interface
if (!empty($data)) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
$res = curl_exec($ch);
if (substr($res, 0, 3) == pack("CCC", 0xEF, 0xBB, 0xBF)) $res = substr($res, 3);
$resArr = json_decode($res, true);
//5. close curl
curl_close($ch);
return $resArr;
}
Official account technology talk
边栏推荐
- 無心劍英譯席慕容《無怨的青春》
- There is a new Post-00 exam king in the testing department. I really can't do it in my old age. I have
- Digital DP template
- What happened to those who focused on automated testing?
- The most complete regular practical guide of the whole network. You're welcome to take it away
- Nebula importer data import practice
- Senior Test / development programmers write no bugs? Qualifications (shackles) don't be afraid of mistakes
- 微信小程序:全新独立后台月老办事处一元交友盲盒
- [FPGA tutorial case 10] design and implementation of complex multiplier based on Verilog
- 整理混乱的头文件,我用include what you use
猜你喜欢
Wechat applet: the latest WordPress black gold wallpaper wechat applet two open repair version source code download support traffic main revenue
[pure tone hearing test] pure tone hearing test system based on MATLAB
【纯音听力测试】基于MATLAB的纯音听力测试系统
Talking about JVM 4: class loading mechanism
Wechat applet: Xingxiu UI v1.5 WordPress system information resources blog download applet wechat QQ dual end source code support WordPress secondary classification loading animation optimization
I was beaten by the interviewer because I didn't understand the sorting
Basic operation of database and table ----- phased test II
微信小程序:全网独家小程序版本独立微信社群人脉
Delaying wages to force people to leave, and the layoffs of small Internet companies are a little too much!
【大型电商项目开发】性能压测-优化-中间件对性能的影响-40
随机推荐
微信小程序:最新wordpress黑金壁纸微信小程序 二开修复版源码下载支持流量主收益
Wechat applet; Gibberish generator
Expose testing outsourcing companies. You may have heard such a voice about outsourcing
Wechat applet: independent background with distribution function, Yuelao office blind box for making friends
[microprocessor] VHDL development of microprocessor based on FPGA
142. Circular linked list II
After reading the average code written by Microsoft God, I realized that I was still too young
Redis master-slave replication cluster and recovery ideas for abnormal data loss # yyds dry goods inventory #
Armv8-a programming guide MMU (3)
Classification of performance tests (learning summary)
Wechat applet: the latest WordPress black gold wallpaper wechat applet two open repair version source code download support traffic main revenue
Four pits in reentrantlock!
整理混乱的头文件,我用include what you use
多模输入事件分发机制详解
Maximum number of "balloons"
College degree, what about 33 year old Baoma? I still sell and test, and my monthly income is 13K+
If the consumer Internet is compared to a "Lake", the industrial Internet is a vast "ocean"
Introduction to redis (1)
SAP UI5 应用开发教程之一百零六 - 如何提高 SAP UI5 应用路由 url 的可读性试读版
Database postragesql lock management