|
導讀微信(WeChat)是騰訊公司于2011年1月21日推出的一個為智能終端提供即時通訊服務的免費應用程序,由張小龍所帶領的騰訊廣州研發中心產品團隊打造 [2] 。微信支持跨通信運營商、跨操作系統平臺... 微信(WeChat)是騰訊公司于2011年1月21日推出的一個為智能終端提供即時通訊服務的免費應用程序,由張小龍所帶領的騰訊廣州研發中心產品團隊打造 [2] 。微信支持跨通信運營商、跨操作系統平臺通過網絡快速發送免費(需消耗少量網絡流量)語音短信、視頻、圖片和文字,同時,也可以使用通過共享流媒體內容的資料和基于位置的社交插件“搖一搖”、“漂流瓶”、“朋友圈”、”公眾平臺“、”語音記事本“等服務插件。 這篇文章介紹的內容是關于微信公眾號開發完整教程一,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下因為工作的需要,這一兩年對微信公眾號和小程序,項目制作的比較多。所以我才打算寫一篇全面的制作教程,當然了,最好的教程是微信工作平臺的文檔。我這里只是講述一下我的工作中的制作流程。所有相關文章的源碼,我托管在我自己的github上面,歡迎關注:地址點擊打開鏈接。接下來開始我們的教程。 1.微信與公眾平臺的區別:微信:即時聊天的軟件,屬于一對一的關系 微信公眾平臺:屬于一對多的關系。 2.訂閱號與服務號的區別:訂閱號:針對個人或媒體每天可以群發1條信息,默認不具有自定義菜單。服務器號:針對企業或銀行每月可以群發4條信息,默認具有自定義菜單。運營主體是組織(比如企業、媒體、公益組織)的,可以申請服務號。運營主體是組織和個人的可以申請訂閱號,但是個人不能申請服務號。 3.公眾平臺的兩種模式:1、編輯模式:直接使用微信公眾平臺所提供的后臺操作進行用戶交互。編輯模式可以使用在如下的場景:不具備開發能力的運營者,主要是進行品牌宣傳、新聞媒體、自助客服的公眾賬號,運營初期,不需要特別多的功能,開發模式系統升級,故障等特殊情況 2、開發者模式:直接使用接口代碼實現用戶的交流 4.微信公眾平臺前期準備:注冊公眾平臺,擁有線上服務器 5.認識一下編輯模式:原理:
5.1消息群發:
選擇對象選擇素材進行群發:
5.2:自定義菜單:啟用自定義菜單,并開啟:
點擊查看,進入設置界面:
5.3自動回復:
上述講述的主要是編輯模式的使用,我想很多人應該都會使用,其實和我們平常在論壇編輯文章和帖子差不多。 6.開發者模式原理:
6.1第一步我們要開啟開發者模式:注意:在開啟開發者模式之后編輯模式中部分功能不能正常使用。即開發者模式跟編輯模式存在沖突。進入設置界面:
修改配置:
設置結果如下圖:填寫上你的服務器文件地址,token,點擊提交,驗證即可。如果提交并驗證通過,就進入到開發者模式
6.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是身份認證 其他接口基本上都需要使用該值進行驗證。 7.access_token獲取:(可以在本地測試)7.1查看接口說明:
獲取access_token方式一:
結果如下:
獲取access_token方式二:
結果如下:
我們開始對上述的代碼進行封裝,因為access_token,每天只能調用2000次,所以我們要緩存起來,這樣才能達到復用的效果, 7.2:curl封裝發送請求和獲取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去重新獲取一次。 上述的步驟完成,我們就算是對微信公眾號的開發的基本準備全部準備完畢,接下來就開始對著微信開發者文檔進行開發和數據的替換了。第一節先講述到這里..... 以上就是微信公眾號開發完整教程一的詳細內容,更多請關注php中文網其它相關文章! 微信提供公眾平臺、朋友圈、消息推送等功能,用戶可以通過“搖一搖”、“搜索號碼”、“附近的人”、掃二維碼方式添加好友和關注公眾平臺,同時微信將內容分享給好友以及將用戶看到的精彩內容分享到微信朋友圈。 |
溫馨提示:喜歡本站的話,請收藏一下本站!