這篇文章介紹的內容是關於微信公眾號開發完整教程一,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
因為工作的需要,這一兩年對微信公眾號和小程序,專案製作的比較多。所以我才打算寫一篇全面的製作教程,當然了,最好的教程是微信工作平台的文檔。我這裡只是講述一下我的工作中的製作流程。所有相關文章的源碼,我託管在我自己的github上面,歡迎關注:地址點擊打開連結。接下來開始我們的教學。
微信:即時聊天的軟體,屬於一對一的關係
微信公眾平台:屬於一對多的關係。
訂閱號碼:針對個人或媒體每天可以群發1條訊息,預設不具有自訂菜單。 伺服器號碼:針對企業或銀行每月可以群發4條訊息,預設具有自訂選單。 營運主體是組織(如企業、媒體、公益組織)的,可以申請服務號碼。營運主體是組織和個人的可以申請訂閱號,但是個人不能申請服務號碼。
1、編輯模式:直接使用微信公眾平台所提供的後台操作進行使用者互動。編輯模式可以使用在如下的場景:不具備開發能力的經營者,主要是進行品牌宣傳、新聞媒體、自助客服的公眾帳號,營運初期,不需要特別多的功能,開發模式系統升級,故障等特殊情況
2、開發者模式:直接使用介面代碼實現用戶的交流
#註冊公眾平台,擁有線上伺服器
原理:
選擇物件選擇素材進行群發:
#啟用自訂選單,並開啟:
進入設定介面:
public function valid(){ //获取随机字符串 $echoStr = input("echostr"); if($echoStr){ // 验证接口的有效性,由于接口有效性的验证必定会传递echostr 参数 if($this ->checkSignature()){ echo $echoStr; exit; } }else{ $this->responseMsg(); } } protected function checkSignature() { // 微信加密签名 $signature = input("signature"); $timestamp = input("timestamp");//时间戳 $nonce =input("nonce");//随机数 $token = "weixin"; //token值,必须和你设置的一样 $tmpArr =array($token,$timestamp,$nonce); sort($tmpArr,SORT_STRING); $tmpStr = implode($tmpArr); $tmpStr =sha1($tmpStr); if($tmpStr == $signature){ return true; }else{ return false; } }
關於上述程式碼中的變數來源,微信都有詳細的說明,我搭建的公眾號使用的是PHP7.0版本,TP5.0框架。這裡說明一下。
上述程式碼只會執行一次,開啟開發者模式之後,就不會在執行,只會執行上述程式碼中的
responseMsg
方法。
我們先上傳一段測試程式碼試試,回覆文字訊息,是否有回复,程式碼如下:
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 )) { $msgType = "text"; $contentStr = "Welcome to wechat world!"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo "Input something..."; } }else { echo ""; exit; } }
結果如下:
,由於微信的網頁授權的限制,所以我們可以申請測試帳號,我這裡使用的就是測試帳號。上述的開啟開發者模式是一樣的。只要要去申請一個測試帳號就好。申請的地方:
如果出現上述的程式碼,表示我們已經測試成功。接下來,我們開始取得access_token的值,這個參數對我們來說很重要。因為
access_token是公眾號的全域唯一介面呼叫憑證,公眾號呼叫各介面時都需使用access_token。開發者需要進行妥善保存。 access_token的儲存至少要保留512個字元空間。 access_token的有效期限目前為2小時,需定時刷新,重複取得將導致上次取得的access_token失效。 access_token是身份認證 其他介面基本上都需要使用該值進行驗證。
結果如下:
// 获取请求的地址的方法
i
f(!function_exists("http_curl")){ function http_curl($url,$data =array(),$method ="get",$returnType ="json") { //1.开启会话 $ch = curl_init(); //2.设置参数 curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); if($method!="get"){ curl_setopt($ch,CURLOPT_POST,TRUE); curl_setopt($ch,CURLOPT_POSTFIELDS,$data); } curl_setopt($ch,CURLOPT_URL,$url); //执行会话 $json = curl_exec($ch); curl_close($ch); if($returnType == "json"){ return json_decode($json,true); } return $json; } } if(!function_exists('get_access_token')){ function get_access_token() { $appid = "wx1ba8f59d9e2c0be0"; //微信的appid $secret ="9e65155599fb9ec047455e197ff6e121"; //微信的开发者密钥 // 读取缓存中的内容 include_once "MyMemcache.php"; //引入缓存方法文件 $obj = new \MyMemcache("47.104.71.253"); $value = $obj ->get($appid); if(!$value){ $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret; $result = http_curl($url); $value = $result['access_token']; $obj->set($appid,$value,7000); } return $value; } }
上述代码就是我对这两个方法的封装,其中我们用到了缓存技术:缓存的方法如下:
// memcache操作类
class MyMemcache{ public $conn; public $isMemcache =true; public function __construct($host="127.0.0.1",$port='11211') { // 建立连接 if(class_exists('MyMemcache')){ $obj =new \Memcache(); }else{ $this ->isMemcache =false; $obj =new \Memcached(); } $obj ->addServer($host,$port); $this ->conn =$obj; } //获取数据 public function get($key) { return $this->conn->get($key); } //设置数据 public function set($key,$value,$expire=0) { if($this->isMemcache){ $this->conn->set($key,$value,0,$expire); }else{ // Memcached扩展的操作方式 $this->conn->set($key,$value,$expire); } } }
结合上述的三个方法,我们就可以实现获取access_token的值,并保存在缓存系统,7000s去重新获取一次。
上述的步骤完成,我们就算是对微信公众号的开发的基本准备全部准备完毕,接下来就开始对着微信开发者文档进行开发和数据的替换了。第一节先讲述到这里.....
相关文章推荐:
1.微信公众号开发完整教程二
2.微信公众号开发完整教程三
3.微信公众号开发完整教程四
相关视频推荐:
1.php微信接口开发实战项目视频教程 聊天机器人+微信支付
2.开发微信小程序视频教程
以上是微信公眾號開發完整教學一的詳細內容。更多資訊請關注PHP中文網其他相關文章!