当前位置:网站首页>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
边栏推荐
- Inventory of more than 17 typical security incidents in January 2022
- Heartless sword English translation of Xi Murong's youth without complaint
- Database postragesq PAM authentication
- Grabbing and sorting out external articles -- status bar [4]
- User login function: simple but difficult
- 無心劍英譯席慕容《無怨的青春》
- [development of large e-commerce projects] performance pressure test - Performance Monitoring - heap memory and garbage collection -39
- Global and Chinese markets for stratospheric UAV payloads 2022-2028: Research Report on technology, participants, trends, market size and share
- [Yocto RM]11 - Features
- 【大型电商项目开发】性能压测-优化-中间件对性能的影响-40
猜你喜欢
[flutter topic] 64 illustration basic textfield text input box (I) # yyds dry goods inventory #
[untitled]
Delaying wages to force people to leave, and the layoffs of small Internet companies are a little too much!
Daily question brushing record (13)
Take you ten days to easily complete the go micro service series (IX. link tracking)
Basic operation of database and table ----- phased test II
A simple SSO unified login design
微信小程序:微群人脉微信小程序源码下载全新社群系统优化版支持代理会员系统功能超高收益
微信小程序:全新独立后台月老办事处一元交友盲盒
What you learned in the eleventh week
随机推荐
Innovation leads the direction. Huawei Smart Life launches new products in the whole scene
当产业互联网时代真正发展完善之后,将会在每一个场景见证巨头的诞生
Behind the cluster listing, to what extent is the Chinese restaurant chain "rolled"?
142. Circular linked list II
RB technology stack
Basic operation of database and table ----- the concept of index
Database performance optimization tool
I was beaten by the interviewer because I didn't understand the sorting
La jeunesse sans rancune de Xi Murong
Async/await you can use it, but do you know how to deal with errors?
26.2 billion! These universities in Guangdong Province have received heavy support
Global and Chinese market of optical densitometers 2022-2028: Research Report on technology, participants, trends, market size and share
【大型电商项目开发】性能压测-性能监控-堆内存与垃圾回收-39
Postman automatically fills headers
Intel sapphire rapids SP Zhiqiang es processor cache memory split exposure
【海浪建模2】三维海浪建模以及海浪发电机建模matlab仿真
Global and Chinese market of veterinary thermometers 2022-2028: Research Report on technology, participants, trends, market size and share
College degree, what about 33 year old Baoma? I still sell and test, and my monthly income is 13K+
Discrete mathematics: reasoning rules
Global and Chinese markets for stratospheric UAV payloads 2022-2028: Research Report on technology, participants, trends, market size and share