日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微信公众号开发初探

發布時間:2023/12/14 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信公众号开发初探 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近利用空閑時間,申請了個微信公眾號,完成一些小功能練練手。

本文總結了開發公眾號期間的一些步驟,心得和體會,希望能幫助更多想做微信開發的小白開發者。


申請微信公眾號

要體驗微信公眾號開發,首先得有一個公眾號,直接在官網申請即可(記住需要新申請公眾號,而不是用你原來的 QQ 或微信登錄)。

申請過程中,要注意的是,我們申請的是訂閱號,用于個人開發。

申請成功后,登錄到公眾號后臺,左側有豐富的菜單供你使用,可以選擇傻瓜式,就是不用寫一行代碼,通過在左側菜單配置,自己設置關注后的歡迎語、給用戶發消息操作等。也可以選擇開發者模式,將左側菜單拉到最下面,可以看到如下圖所示的開發欄。



為了后續及時查看效果,需要第一時間關注這個公眾號,成為自己的第一個粉絲。


開始編寫代碼

首先,我們要明白微信公眾號和用戶打交道的流程,下圖簡單展示了這個流程。


從圖中可以看到,當你在微信中向公眾號發一條消息,這條消息首先會送到微信服務器,然后轉發給你的服務器,經過處理后把響應回給微信服務器,微信服務器再轉給你。

這個和我們開發 Web 程序 C/S 模式基本一致,不同的是,在客戶端和服務端中間,多了一個微信服務器做轉發。

因此我們要關注的,仍然是寫服務端程序,以便接收微信服務器轉發過來的請求。我們的服務入口必須是微信服務器可以訪問的,也就是一個公網地址,內網 IP 肯定是不行的,所以首先得有一臺有外網 IP 的服務器。

以滴滴云 DC2 服務器為例,在官網上購買一個帶 EIP 的 DC2 實例,ssh 登錄到 DC2,安裝 lnmp 全家桶。安裝好后,確認 Nginx 和 php-fpm 已運行。然后就可以在微信公眾平臺上配置服務器地址了。

打開基本配置頁面,按下圖方式填寫表單:


填寫好后,不要急著提交。我們在 DC2 服務器的 Web 目錄下,寫個測試程序 main.php,代碼如下所示,這段代碼也可以在 微信wiki 上找到。

define("TOKEN","your token"); //token 是剛才你在表單寫的token function checkSignature() { $signature = $_GET['signature']; //微信加密簽名 $nonce = $_GET['nonce']; //時間戳 $timestamp = $_GET['timestamp']; //隨機數 $arr = [$timestamp, $nonce, TOKEN];sort($arr); $arr = implode($arr);$m_arr = sha1($arr);if($m_arr == $signature) {return true;} return false; }if (checkSignature()) {$echostr = $_GET['echostr'];if($echostr) {echo $echostr;} }

簡單解釋一下,當我們提交上述表單后,微信服務器會對我們填寫的地址進行驗證,參數如上述注釋,如果表單提示成功,則說明微信服務器訪問到了你配置的 URL,并認證成功,如果失敗,則檢查下你的代碼。

認證成功后,我們就可以把上面的測試代碼刪掉,開始寫真正的服務端程序。


第一個服務

首先我們寫一個天氣查詢服務,就是給公眾號發一個城市名,公眾號返回該城市未來三天的天氣。我這里用的是心知天氣提供的天氣 API,我們分兩步來進行:


1、獲取用戶輸入的城市名

由上圖我們知道,用戶的輸入最終會由微信服務器轉發給我們自己的服務端程序,微信服務器轉發給我們的數據格式如下:

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1348831860</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[this is a test]]></Content><MsgId>1234567890123456</MsgId></xml>

這里簡單解釋下上面的各個字段:

  • ToUserName 消息要發送給誰
  • FromUserName 是消息從哪來
  • CreateTime 時間戳
  • MsgType 消息類型
  • MsgId 消息 Id

我們的服務端程序得獲取這個數據,需要注意的是,如果 PHP 版本是 5.x,可以直接使用 $GLOBALS["HTTP_RAW_POST_DATA"]超全局變量來獲取,如果是 PHP7($GLOBALS 已經被取消),需要用以下方式來獲取:

$wx_post = file_get_contents("php://input")

然后解析 xml 數據,提取各類字段,如下:

$postObj = simplexml_load_string($wx_post, 'SimpleXMLElement', LIBXML_NOCDATA); $from_user_name = $postObj->FromUserName; $to_user_name = $postObj->ToUserName; $city = trim($postObj->Content); //提取用戶發送的城市名

2、根據城市名,返回天氣信息

拿到了城市名,就可以通過 API 查詢城市天氣信息了,但有個問題需要解決:一般用戶發的是中文城市名,而通過 API 查詢,需要的是城市的拼音,因此需要寫一個 中文->拼音 的轉換函數。在 GitHub 上有很多這類項目,我用的是 這個 庫,使用方法自行查看。

轉換成拼音后,即可按 API 的要求,拼接 URL,發送查詢請求,將返回的天氣數據簡單解析,并封裝成微信需要的格式,構造響應,假如要返回給微信服務器的天氣數據為 $weather_info,那么代碼如下:

$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>"; return sprintf($textTpl,$from_user_name,$to_user_name,time(),$weather_info);

到這一步,我們已經做完了所有工作,現在可以嘗試向公眾號發送一條消息,隨便發個城市名,如果代碼沒有錯誤,那么會看到下圖所示的效果:


如果微信返回類似“該公眾號暫時無法提供服務”的提示,那就說明你的代碼存在問題,可是能你的程序沒給微信服務器返回任何內容,也可能回復的數據不合規范,給你直接返回了 JSON 類型數據。檢查下代碼,或者看看 Nginx 日志,一般都能找到原因。


更進一步

有了上面簡單的實戰,我們了解了微信開發的基本流程,并實現了一個向公眾號的粉絲提供天氣查詢的服務。上面只是向用戶返回了文字類型消息,我們也可以嘗試發送圖片、音樂、圖文類型的消息,只需要將上述消息 MsgType 字段改為對應類型,并按微信開發手冊填充 Content 內容即可,剩下的就是發揮想象力的時候了,可以嘗試添加其他功能,比如點歌、查快遞,甚至像 Siri 的一個機器助理。


總結

從上述開發過程我們可以看到,微信公眾號開發和我們開發普通的 Web 程序基本一致,唯一不同的中間經過了微信服務器做了一次轉發。需要注意的是,上述配置的公眾號,只有部分微信 API 權限,分享、支付等功能,均需要通過認證才可用。

本文作者:許基偉


想了解更多技術知識,歡迎關注滴滴云知乎機構號,大量教程在線等你~

滴滴云官網:didiyun.com/?

滴滴云瘋狂雙十一,服務器最低35折起

總結

以上是生活随笔為你收集整理的微信公众号开发初探的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。