微信公共號開發簡單入門

測試結果圖

001002 


003

零、需要的知識

1、php基礎知識和常用函數

2、XML格式和php對XML的處理

3、php面向對象相關知識

4、擁有服務器並配置好php所需運行的環境

一、開發前準備工作

1、註冊微信公共平臺賬號,然後成爲開發者,網址:https://mp.weixin.qq.com/

2、註冊之後當然要創建一個公衆號了,有三種(訂閱號,服務號,企業號),本人選擇的是訂閱號

二、稍作修改

1、訂閱號創建之後就可以做一些小事情了,比如別人關注之後,就可以羣發一篇圖文的文章了,如下圖所示

004

2、然後還有其他的一些功能,自定義菜單啊,按關鍵字回覆消息啊,什麼的,都是操作性,看一遍就會了的東西

3、對公衆號的資料稍作修改,完善一下,如下圖所示,這是我的公衆號設置

006

4、開發者驗證

就是微信服務器發送加密的數據給你指定的服務器,你正確的響應,就可以驗證開發者了,這樣證明你擁有服務器,知道如何處理微信服務器給你發的數據和正確發送xml數據返回給微信服務器

下面是微信官方的php演示程序,本人修改了TOKEN,把它放在服務器指定文件夾下即可,當然你的服務器得正在跑着php解釋程序和apache或nginx等

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

//define your token
define("TOKEN", "jtahstu");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();

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 = $GLOBALS["HTTP_RAW_POST_DATA"];

      	//extract post data
		if (!empty($postStr)){
                
              	$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;
        }
    }
		
	private function checkSignature()
	{
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];	
        		
		$token = TOKEN;
		$tmpArr = array($token, $timestamp, $nonce);
		sort($tmpArr);
		$tmpStr = implode( $tmpArr );
		$tmpStr = sha1( $tmpStr );
		
		if( $tmpStr == $signature ){
			return true;
		}else{
			return false;
		}
	}
}

?>

5、其他的自己看看吧,講重點

三、動真格的了,正式開發了

1、首先你得有個服務器,最好有個數據庫,然後你就可以處理用戶發送的消息了,這裏的消息有文字,圖片,視頻,地理位置等等,本人恰巧有阿里雲服務器,來配置下服務器信息

005

解釋一下,url是你處理用戶消息的php腳本,這是我的目錄;第二個Token是一個自定義的祕鑰,下面的是一個消息祕鑰,隨機生成即可;消息加密方式直接就採用明文吧,實際上這個會很容易被攔截,實用的話還是選安全模式爲好

2、到這裏用戶就可以發送消息給服務器,然後服務器也能接收到數據了,下面就是返回數據。

下面代碼去掉了驗證部分,只保留了回覆消息得函數

回覆不同類型的消息,得按不同的xml格式,這裏返回的都是text,其他的請參考官方文檔

<?php
// define your token
define ( "TOKEN", "jtahstu" );

$wechatObj = new wechatCallbackapiTest ();
$wechatObj->responseMsg (); // 調用回覆消息的函數
class wechatCallbackapiTest {
	public function responseMsg() {
		// get post data, May be due to the different environments
		$postStr = $GLOBALS ["HTTP_RAW_POST_DATA"];
		$postObj = simplexml_load_string ( $postStr, 'SimpleXMLElement', LIBXML_NOCDATA );
		$fromUsername = $postObj->FromUserName;
		$toUsername = $postObj->ToUserName;
		$keyword = trim ( $postObj->Content );
		$time = time ();
		$msgType0 = $postObj->MsgType;
		if ($msgType0 == 'text') { // 輸入的是文本消息
			$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 ($keyword == "info") {
				$msgType = "text";
				$contentStr = "這是jtashtu的微信公衆平臺測試賬號,歡迎關注!";
				$resultStr = sprintf ( $textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr );
				echo $resultStr;
			} else if (is_numeric ( $keyword )) {
				$msgType = "text";
				require 'menu.php';
				$contentStr = $res;
				$resultStr = sprintf ( $textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr );
				echo $resultStr;
			} else {
				$msgType = "text";
				$contentStr = $keyword;
				$resultStr = sprintf ( $textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr );
				echo $resultStr;
			}
		} else if ($msgType0 == 'image') {//輸入的是圖片
			$textTpl = "<xml>
							<ToUserName><![CDATA[%s]]></ToUserName>
							<FromUserName><![CDATA[%s]]></FromUserName>
							<CreateTime>%s</CreateTime>
							<MsgType><![CDATA[text]]></MsgType>
							<Content><![CDATA[%s]]></Content>
							<FuncFlag>0</FuncFlag>
						</xml>";
			$contentStr = "不要對我發黃圖哦";
			$resultStr = sprintf ( $textTpl, $fromUsername, $toUsername, $time, $contentStr );
			echo $resultStr;
		}else{
			echo "";
		}
	}
}

?>

還有一個外部程序menu.php,也就是防止寫一起太混亂了

<?php
$menu0="		101、jtahstu的個人主頁
		102、jtahstu的博客
		103、ACOJ
		201、軟件創新實驗室官網
		202、AKOJ -- 在線評測系統
		";
$menu00=array(
		"101"=>"www.jtahstu.com",
		"102"=>"www.jtahstu.com/blog",
		"103"=>"www.jtahstu.com/acoj",
		"201"=>"www.jtahstu.com/turing",
		"202"=>"183.167.205.82:8081/JudgeOnline/userlist"
);
if(!empty($menu00["$keyword"])){
	$res=$menu00["$keyword"];
}else{
	$res=$menu0;
}
?>

本人就不細解釋代碼了,懂的人一看就懂,不懂的人也不是隨便解釋下就立馬學會的

運行結果就如一開始那樣

四、總結

以上我們就完成了一個簡單的公衆號回覆消息得程序,很簡單,還沒有涉及數據庫和其它的技術,畢竟先入門,然後慢慢挖掘。這個內涵還是有的,本人實際上並不怎麼玩微信,感覺並沒有QQ來着方便,公衆號也用過,像安科小團啊什麼的,本來是不會來接觸這個的,但是大勢所趨嘛,以後工作需要,學習一下。然後今天自己弄了一下,基本上也沒看教程,看了下官方文檔,網址:微信公衆平臺開發者文檔 然後也沒怎麼看懂,實際上需要看的也不多。

下一次看能不能做一些更加深入的功能,什麼查成績,查課表,查這查那,還得再好好看看,加油。


                               --  作者jtahstu寫於2016年1月20日晚的安科寢室,室外氣溫1℃,小雪

本文章首發在本人博客jtahstu的博客
鏈接 http://www.jtahstu.com/blog/post-70.html

歡迎關注

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