利用微信公衆號做網課答案查詢-後端php

利用微信公衆號做網課答案查詢-後端php-2020-4-17
題庫api需要自己去找,或是自己做,數據龐大

一、準備

1.公衆號

(不講)

2.服務器

(不講,我博客裏有教)

3.Php

(不講,我博客裏有教在服務器上安裝)

4.題庫api接口

(自己做或是用別人的) api不提供自己找,因爲過段時間就會失效

二、操作

1.新建一個php

cha.php //第一次先校驗token,讓微信公衆號接口驗證成功

<?php
                                           //token是微信公衆號接口校驗用的,第一次需要
define("TOKEN", "weixin");                  //根據自己的token改,我以weixin爲例
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();                      //接口驗證         第一次啓用,驗證完,註釋       
//$wechatObj->responseMsg();              //調用回覆消息方法  先註釋      
class wechatCallbackapiTest
{
 public function valid()                //校驗token的方法
 {
 $echoStr = $_GET["echostr"];
 //valid signature , option
 if($this->checkSignature()){
 echo $echoStr;
 exit;
 }
 }

 public function responseMsg()           //回覆消息用的
 {
 //get post data, May be due to the different environments
 $postStr = file_get_contents('php://input');

 //extract post data
 if (!empty($postStr)){
 /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
  the best way is to check the validity of xml by yourself */
 libxml_disable_entity_loader(true);
  $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
 $fromUsername = $postObj->FromUserName;
 $toUsername = $postObj->ToUserName;
 $keyword = trim($postObj->Content);
 $time = time();
 $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>"; 
 if(!empty( $keyword ))
 {
  $data = array(
    'q' => $keyword,
    
);
  $ch = curl_init();
  $params[CURLOPT_URL] = "*****";    //請求url地址,******裏面填api題庫接口
  $params[CURLOPT_HEADER] = FALSE; //是否返回響應頭信息
  $params[CURLOPT_SSL_VERIFYPEER] = false;
  $params[CURLOPT_SSL_VERIFYHOST] = false;
  $params[CURLOPT_RETURNTRANSFER] = true; //是否將結果返回
  $params[CURLOPT_POST] = true;
  $params[CURLOPT_POSTFIELDS] = $data;
  curl_setopt_array($ch, $params); //傳入curl參數
  $content = curl_exec($ch); //執行
  curl_close($ch); //關閉連接
  //return $content;


 
$json1=json_decode($content);
 
$code=json_encode($json1,JSON_UNESCAPED_UNICODE);
$data=strtr($code, array("success"=>"成功獲取"));//這裏是過濾返回的json用的根據實際api修改
$msgType = "text";
  $contentStr = $data;
  $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  echo $resultStr;
 }else{
  echo "Input something...";
 }

 }else {
 echo "";
 exit;
 }
 }
 
 private function checkSignature()               //校驗token的
 {
 // you must define TOKEN by yourself
 if (!defined("TOKEN")) {
 throw new Exception('TOKEN is not defined!');
 }
 
 $signature = $_GET["signature"];
 $timestamp = $_GET["timestamp"];
 $nonce = $_GET["nonce"];
 
 $token = TOKEN;
 $tmpArr = array($token, $timestamp, $nonce);
 // use SORT_STRING rule
 sort($tmpArr, SORT_STRING);
 $tmpStr = implode( $tmpArr );
 $tmpStr = sha1( $tmpStr );
 
 if( $tmpStr == $signature ){
 return true;
 }else{
 return false;
 }
 }
}

?>

複製即可不用修改,//因爲是校驗而已
我的話是將cha.php放在網站入口處

2.微信公衆號修改配置

開發->基本配置->服務器配置->修改配置
在這裏插入圖片描述URL是php文件所在地方
//比如我是,域名+cha.php,因爲我是反正網站入口處
Token是校驗碼,
//我已weixin爲例
EncodingAESKey 點擊隨機生成就好
選擇明文模式
提交
顯示token校驗成功,就好//如果不是檢查一下

3.修改cha.php

剛纔這是校驗成功,現在修改讓它具有查題功能

<?php
/**
 * wechat php test
 */

//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
//$wechatObj->valid();//接口驗證
$wechatObj->responseMsg();//調用回覆消息方法
class wechatCallbackapiTest
{
 public function valid()
 {
 $echoStr = $_GET["echostr"];

 //valid signature , option
 if($this->checkSignature()){
 echo $echoStr;
 exit;
 }
 }

 public function responseMsg()
 {
 //get post data, May be due to the different environments
 $postStr = file_get_contents('php://input');

 //extract post data
 if (!empty($postStr)){
 /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
  the best way is to check the validity of xml by yourself */
 libxml_disable_entity_loader(true);
  $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
 $fromUsername = $postObj->FromUserName;
 $toUsername = $postObj->ToUserName;
 $keyword = trim($postObj->Content);
 $time = time();
 $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>"; 
 if(!empty( $keyword ))
 {
  $data = array(
    'q' => $keyword,
    
);
  $ch = curl_init();
  $params[CURLOPT_URL] = "這裏放題庫api";    //請求url地址
  $params[CURLOPT_HEADER] = FALSE; //是否返回響應頭信息
  $params[CURLOPT_SSL_VERIFYPEER] = false;
  $params[CURLOPT_SSL_VERIFYHOST] = false;
  $params[CURLOPT_RETURNTRANSFER] = true; //是否將結果返回
  $params[CURLOPT_POST] = true;
  $params[CURLOPT_POSTFIELDS] = $data;
  curl_setopt_array($ch, $params); //傳入curl參數
  $content = curl_exec($ch); //執行
  curl_close($ch); //關閉連接
  //return $content;


 
$json1=json_decode($content);
 
$code=json_encode($json1,JSON_UNESCAPED_UNICODE);
$data=strtr($code, array("success"=>"成功獲取"));//過濾返回json自己修改
$msgType = "text";
  $contentStr = $data;
  $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  echo $resultStr;
 }else{
  echo "Input something...";
 }

 }else {
 echo "";
 exit;
 }
 }
 
 private function checkSignature()
 {
 // you must define TOKEN by yourself
 if (!defined("TOKEN")) {
 throw new Exception('TOKEN is not defined!');
 }
 
 $signature = $_GET["signature"];
 $timestamp = $_GET["timestamp"];
 $nonce = $_GET["nonce"];
 
 $token = TOKEN;
 $tmpArr = array($token, $timestamp, $nonce);
 // use SORT_STRING rule
 sort($tmpArr, SORT_STRING);
 $tmpStr = implode( $tmpArr );
 $tmpStr = sha1( $tmpStr );
 
 if( $tmpStr == $signature ){
 return true;
 }else{
 return false;
 }
 }
}

?>

需要修改兩處,一個是題庫api,一個是返回json過濾,上面有標記自己看
然後保存即可,已經具備網課答案查詢自動回覆

三、效果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章