当前位置:网站首页>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
边栏推荐
- node工程中package.json文件作用是什么?里面的^尖括号和~波浪号是什么意思?
- Are you still writing the TS type code
- Complex, complicated and numerous: illustration of seven types of code coupling
- Global and Chinese market of veterinary thermometers 2022-2028: Research Report on technology, participants, trends, market size and share
- Armv8-a programming guide MMU (3)
- 19. Delete the penultimate node of the linked list
- Nebula importer data import practice
- 107. Some details of SAP ui5 overflow toolbar container control and resize event processing
- [wave modeling 3] three dimensional random real wave modeling and wave generator modeling matlab simulation
- Huawei employs millions of data governance experts! The 100 billion market behind it deserves attention
猜你喜欢
Single step debugging of master data reading of SAP commerce cloud products
DOM basic syntax
Playwright recording
Chia Tai International Futures: what is the master account and how to open it?
Playwright之录制
SAP ui5 application development tutorial 106 - how to improve the readability of SAP ui5 application routing URL trial version
【海浪建模1】海浪建模的理论分析和matlab仿真
实战模拟│JWT 登录认证
What happened to those who focused on automated testing?
Talking about JVM 4: class loading mechanism
随机推荐
Database postragesql lock management
The server time zone value ‘� й ��� ʱ 'is unrecognized or representatives more than one time zone【
Take you ten days to easily complete the go micro service series (IX. link tracking)
Digital DP template
dotnet-exec 0.6.0 released
【FPGA教程案例9】基于vivado核的时钟管理器设计与实现
Playwright之录制
【CTF】AWDP总结(Web)
Poap: the adoption entrance of NFT?
Implementation steps of master detail detail layout mode of SAP ui5 application
Using openpyxl module to write the binary list into excel file
Global and Chinese market of nutrient analyzer 2022-2028: Research Report on technology, participants, trends, market size and share
Robley's global and Chinese markets 2022-2028: technology, participants, trends, market size and share Research Report
【大型电商项目开发】性能压测-优化-中间件对性能的影响-40
Basic operation of database and table ----- phased test II
What happened to those who focused on automated testing?
pycharm专业版下载安装教程
dotnet-exec 0.6.0 released
Grabbing and sorting out external articles -- status bar [4]
What is the current situation and Prospect of the software testing industry in 2022?