当前位置:网站首页>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

边栏推荐
- 【大型电商项目开发】性能压测-性能监控-堆内存与垃圾回收-39
- 微信小程序:全新独立后台月老办事处一元交友盲盒
- Database postragesql client connection default
- 各大主流编程语言性能PK,结果出乎意料
- 大专学历,33岁宝妈又怎样?我照样销售转测试,月入13k+
- Game 280 of leetcode week
- [CTF] AWDP summary (WEB)
- User login function: simple but difficult
- Postman automatically fills headers
- Roads and routes -- dfs+topsort+dijkstra+ mapping
猜你喜欢

“薪資倒掛”、“畢業生平替” 這些現象說明測試行業已經...

各大主流编程语言性能PK,结果出乎意料

Complex, complicated and numerous: illustration of seven types of code coupling

Innovation leads the direction. Huawei Smart Life launches new products in the whole scene

pycharm专业版下载安装教程

Basic operation of database and table ----- phased test II

微信小程序:微群人脉微信小程序源码下载全新社群系统优化版支持代理会员系统功能超高收益

Single step debugging of master data reading of SAP commerce cloud products

测试部新来了个00后卷王,上了年纪的我真的干不过了,已经...

"Upside down salary", "equal replacement of graduates" these phenomena show that the testing industry has
随机推荐
What you learned in the eleventh week
"Upside down salary", "equal replacement of graduates" these phenomena show that the testing industry has
Global and Chinese markets for industrial X-ray testing equipment 2022-2028: Research Report on technology, participants, trends, market size and share
Wechat applet: independent background with distribution function, Yuelao office blind box for making friends
【FPGA教程案例10】基于Verilog的复数乘法器设计与实现
“薪資倒掛”、“畢業生平替” 這些現象說明測試行業已經...
La jeunesse sans rancune de Xi Murong
SAP UI5 应用的主-从-从(Master-Detail-Detail)布局模式的实现步骤
Arbitrum: two-dimensional cost
JS implementation determines whether the point is within the polygon range
Introduction to redis (1)
SAP ui5 application development tutorial 106 - how to improve the readability of SAP ui5 application routing URL trial version
Database postragesq PAM authentication
如果消费互联网比喻成「湖泊」的话,产业互联网则是广阔的「海洋」
Maximum number of "balloons"
Database postragesq peer authentication
微信小程序:全网独家小程序版本独立微信社群人脉
Using openpyxl module to write the binary list into excel file
[CTF] AWDP summary (WEB)
College degree, what about 33 year old Baoma? I still sell and test, and my monthly income is 13K+