成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

詳解在TP中怎么引入ThinkWechat.php并打印日志

下面由thinkphp框架教程欄目給大家介紹在TP中怎么引入ThinkWechat.php以及怎么打印日志到日志文件,希望對需要的朋友有所幫助!

基于Thinkphp6的微信公眾號交互式消息開發

看完thinkPHP實戰,我從github上下載了書中的代碼,準備運行一下微信公眾號開發的程序。
可是,因為書中使用的是ThinkPHP3.2.3,而最新版本已經是6.0.X,反正我對ThinkPHP不熟悉,就下載了最新版來使用。我預料到因為版本不同,程序運行會有問題。我想的是,遇到一個解決一個吧。沒想到,我遇到了很多困難,兩天了才把程序跑起來。最后還更改了框架的一點點代碼。

閑話少說,我依次羅列下遇到的困難吧。

如何在TP中引入ThinkWechat.php

書中是把ThinkWechat.php放在/Application/Home/Library下的。但TP6已經沒有Application,我就在/app下新建了library目錄,將文件放入其中。

在Index.php中需要引入該文件

use applibraryThinkWechat;

在ThinkWechat.php文件中添加namespace

namespace applibrary;

Class 'applibrarySimpleXMLElement' not found

一開始,百度說是要在環境上安裝php7-xml. 我的macmini需要用brew來安裝,很久沒用brew,brew update慢死了,按照百度的帖子,替換了阿里云的鏈接。
結果還是不行。弄brew弄了幾個小時。后來不知道怎么發現,原來tp6里面用了namespace,所以在使用SimpleXMLElement的時候,要在文件開頭寫如下語句
use SimpleXMLElement;

TP6怎么打印日志到日志文件

因為是和微信公眾號進行交互,我不知道有什么辦法方便調試,試過了微信提供的接口調試工具,但是也僅僅能夠檢查參數設置是否正確。于是我用了最笨的打印日志的方法。
要打印日志需要在TP6中做以下設置:

在config/log.php 中

1.設置日志記錄級別

'level' => ['emergency'],

我調試時幾乎把所有的level值都寫到這里了。

1.設置日志保存目錄

'path' => App()->getRuntimePath() .'/log',

2.然后在程序中用下面的語句實時寫入日志文件

Log::write('index _get session id before set ID '. Session::getId(), 'notice');

關注測試公眾號后,輸入999,可以收到正常回復。輸入1 程序則退出

這個問題卡了我大半天!!

一開始,我以為是返回給微信平臺的response 有問題,因為我在ThinkWechat.php中打印了很多日志,發現只要我輸入除999以外的信息,data2xml方法總是不能完全執行,日志在
$node = dom_import_simplexml($child);之后就無法打印。

我一直以為是$node->appendChild($node->ownerDocument->createCDATASection($value));
這句代碼執行有問題。
因此還從《微信公眾平臺開發》一書中找到通過設置xml模板中,用sprintf方法替換模板中的變量來生成response的xml。

這樣做的結果是,我能在日志中看到response xml 成功生成,但是輸入1仍然沒有得到我期望的回復,應該是沒有任何回復,顯示“該公眾號暫時無法提供服務,請稍后再試”,并且才程序也是立即退出了。

后來我發現,自己隨便寫的程序,比如公眾號每次都回復用戶輸入的信息,像應聲桶那樣,就沒有問題,程序也不退出。我突然想著會不會是和session有關?因為源代碼中用到了session來實現用戶的注冊和登錄。
我看了下TP6的開發文檔,果然,里面寫到session默認是沒初始化的。這里我有點欲哭無淚。

按照文檔說明,我打開了session:

1.在app/middleware.php 中去掉thinkmiddlewareSessionInit::class的注釋。

2.并且把代碼中的session_start()去掉。因為TP6只支持通過Session類方法和session助手函數來操作session. 不支持一切的session_xx 函數。

Session 打開之后,程序不再退出。但出現新的問題,輸入999后再輸入1,公眾號正確回復請輸入用戶名,但輸入用戶名后的回復卻和輸入999一樣。提示輸入1注冊,輸入2登錄。 而正確的應該是提示輸入用戶名。

這時,我發現runtime/session目錄中生成了多個session文件。對于同一個用戶來說,應該僅有一個session文件才是正確的。相當于用戶每一次和公眾號交互,都有一個新的session文件產生,這樣沒法獲取用戶之前輸入的信息。

百度后發現這個原因是

session是存儲在服務器端的,那么區別每個用戶的session就需要使用客戶端的cookie,微信服務器是不發送cookie到開發者服務器,所以基于cookie的session無法使用。
但是只要為每個用戶設置一個唯一的session_id,也可以達到同樣的效果。
每個人微信號是唯一的,所以我們可以使用微信號作為用戶的session_id,也可以將其md5加密后使用。

我打算用FromUserName的值作為sessionid。也就是每一個用戶自己的openid。不過TP6 不支持session_id()方法來設置sessionid。我后來看文檔發現可以用Session::setId來設置SessionID,但是不知道為什么每次還是會生成不同的sessionID。

網上說可以就用openid,我發現每次微信公眾號向服務器發來的url確實都會附帶openid,我就在session.php配置了openid,希望TP6每次用請求中的openid作為sessionid。不過仍然沒有生效。

TP6的session.php有如下配置:

SESSION_ID的提交變量,解決flash上傳跨域
'var_session_id' => 'openid',

查看了下框架的setId,原始代碼如下

public function setId($id = null): void     {         $this->id = is_string($id) && strlen($id) === 32 && ctype_alnum($id) ? $id : md5(microtime         (true).session_create_id());     }

原來sessionid必須為32位包含字母數字的字符串,如果不滿足要求(openid長度為28位),就用當前時間作為sessionid,所以我把setId改為下面的樣子,然后在index方法中打印sessionid,發現每次都是一樣的。

public function setId($id = null): void     {         $this->id = is_string($id) && strlen(md5($id)) === 32 && ctype_alnum(md5($id)) ? md5($id) : md5(microtime         (true).session_create_id());     }

運行了程序,一切正常,感覺太美好了。

這時,我想之前遇到的那么多問題,應該和xml response沒有關系。于是我又用回以前的ThinkWechat.php,卻發現runtime/session目錄中沒有生成session文件。

檢查后才發現,原始的ThinkWechat.php的response方法最后是

exit($xml->asXML());

而TP6官方文檔有以下提醒:

注意,Session寫入數據的操作會在請求結束的時候統一進行本地化存儲,所以不要在寫入Session數據之后使用exit等中斷操作,可能會導致Session沒有正常寫入。

因此我把exit語句改為return $xml->asXML(); 這時session文件正常生成,公眾號回復的信息也正確了。

PS 代碼已托管在github上

https://github.com/sarawang9012/thinkwechat

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
亚洲AV成人中文无码专区| 人人狠狠综合久久88成人| 牛牛本精品99久久精品66| 欧美成人区精品一区二区婷婷| 欧美中文字幕无线码视频| 日韩精品久久久久久久电影蜜臀| 少妇久久久久久被弄高潮| 无码人妻AⅤ一区二区| 亚洲AV无码成人网站久久精品大 | 把老师摁在黑板上做了一节课作文| ASS十三小美女ASSPICS| 大胆极品美軳人人体| 国产精品∧V在线观看| 国产特级毛片AAAAAA高潮流| 久久99精品久久久久久HB| 妺妺窝人体色WWW写真| 日韩精品无码区免费专区| 西瓜在线看免费观看视频| 亚洲一区二区三区无码影院| 99热精品国产三级在线| 国产AV人人夜夜澡人人爽| 激情 亚洲 成人小说 激情| 美女高潮流白浆娇喘免费网站| 人妻丰满被色诱中文字幕| 无码精品人妻一区二区三区影院| 亚洲人成人无码.WWW石榴| 综合在线视频精品专区| 东京热无码人妻精品一区二区三区| 国产真人无码作爱免费视频| 久青草无码视频在线观看| 热RE99久久精品国产99热| 新妺妺窝人体色7777婷婷| 岳胀耸的雪乳奶水| 丰满岳乱妇在线观看中字无码| 好男人官网资源在线观看| 免费A级毛片无码免费视频1 | 内射爽无广熟女亚洲| 神里凌华被焯出白水视频| 亚洲色WWW成人永久网址| XXXX性BBBB欧美| 国产在线蜜乳一区二区三区| 女人高潮抽搐30分钟| 无码少妇一区二区浪潮AV| 中文亚洲爆乳AV无码专区| 观看国产色欲色欲色欲WWW| 久久精品第九区免费观看| 用嘴巴吃鸡的好处| YSL千人千色T9T9T9| 国产精品久久久久久久久鸭无码 | 亚洲乱码无人区卡1卡2卡3| WWW国产精品内射熟女| 国精产品一区二区三区糖心| 欧美人与动牲交XXXXBBBB| 亚洲 中文 欧美 日韩 在线| 696969大但人文艺术来源| 国产免费AV一区二区三区 | 精品国产一区二区三区久久影院| 亲生乖女好紧H下| 亚洲国产精品无码久久九九大片| 爆乳JUFD汗だく肉感| 精品亚洲A∨无码一区二区三区| 日本在线观看母与子| 亚洲一区在线日韩在线尤物| 国产9 9在线 | 中文| 噜噜噜噜噜18禁私人影视| 我趁老师睡觉摸她奶脱她内裤 | 免费A级毛片18禁网站APP| 小东西几天没做又紧了| Z0OZO0人善之交另类| 久久久久精品国产亚洲AV电影| 少妇性生生活视频在线观看| 中文字幕无线码免费人妻| 黑巨人的又黑又大又长| 色狠狠色噜噜AV综合五区| 中国 韩国 日本 免费看片| 国产三级精品三级在专区| 人妻少妇性色精品专区av| 野花香影院在线观看视频免费| 国产精品无卡毛片视频| 人妻少妇中文字幕在线一区| 永久免费看照片的聊骚软件| 国产永久AV福利在线观看| 日韩视频一区二区三区| 97精品国产97久久久久久免费| 精品AV综合一区二区三区| 特级做A爰片毛片免费69| JAPANESEXXXⅩHD乱| 久久久久精品老熟女国产精品| 无码日韩人妻AV一区二区三区| Y1111111少妇影院无码| 久久综合噜噜激激的五月天| 亚洲AV日韩AV一区谷露| 国产7色在线 | 国产| 人妻丰满熟妇无码区免费| 在线看片无码永久AV| 精品中文字幕久久久无码中文Av | 国产山东熟女48嗷嗷叫| 搡老熟女老女人HHD| HEYZO高清中文字幕在线| 老师上课没戴奶罩看到奶头| 亚洲精品亚洲人成人网| 国产亚洲成AⅤ人片在线观看| 熟妇啊轻点灬大JI巴太粗| 八戒八戒视频在线WWW观看| 男朋友一晚弄了我5次正常吗 | 被黑人猛男强伦姧人妻完整版 | BGMBGMBGM成熟交| 国产中文三级全黄| 欧美性猛交XXXX乱大交3| 亚洲精品国产自在久久| 国产精品福利自产拍在线观看| 欧美一区二区三区不卡| 中日韩人妻中文字幕视频在线| 国内精品九九久久精品| 特黄大片又粗又大又暴| 宝贝你夹得太紧了我都要断了| 人妻护士在线波多野结衣| 一区二区在线视频| 精品亚洲AⅤ无码一区二区三区| 亚洲精品中文字幕乱码三区| 9420高清完整版在线观看| 老司机在线精品视频网站| 亚洲中文字幕A∨| 精品人妻中文无码AV在线| 亚洲VA久久久噜噜噜久久男同| 国产亚洲AV人片在线观看| 驯服人妻HD中字日本| 国产日产久久高清欧美一区| 无码少妇丰满熟妇一区二区| 国产伦精品一区二区三区| 无码人妻精品一区二区三区不卡| 国产精品久久无码不卡| 新婚之夜玩弄人妻系列| 黑人GAY大长雕TUBE| 亚洲精品国产成人AV| 精品一区二区三区波多野结衣| 亚洲精品无码专区久久同性男| 久久99九九精品久久久久蜜桃| 亚洲日韩精品无码专区网址| 久久精品亚洲男人的天堂| 一区二区三区国产精华护肤品 | 年轻丰满的继牳3免费看| av 无码av 丰满av| 日本XXXX少妇高清HD| 多毛freeoprn熟妇多毛y| 未满十八18禁止免费无码网站 | 内射爽无广熟女亚洲| Y11111少妇无码电影| 日韩一区二区三区在线| 国产精品国产三级国产AV主播| 亚洲AV成人一区国产精品小说| 精品美女AⅤ国产女教师蜜臀| 亚洲中文字幕一区精品自拍| 男人扒开女人下部添高潮的视频| CHINESE东北嫖妓女HD| 乳欲人妻办公室奶水| 国产色欲AV一区二区三区| 亚洲国产精品一区二区久久HS| 久久中文字幕无码专区| A级毛片毛片免费观的看久| 色噜噜人体337P人体| 国产人妻麻豆蜜桃色精品电影| 亚洲乱码中文字幕久久孕妇黑人| 美女扒开裤衩让男人桶爽| 办公丝袜AV一区二区三区| 天天大片天天看大片| 狠狠躁夜夜躁人爽碰88A| 中文人妻熟妇乱又伦精品| 欧美精品一区二区三区人妻久久久| 国产AV无码专区亚洲A∨毛片| 无码一区二区三区久久精品| 邻居少妇张开双腿让我爽一夜| 公交车上拨开丁字裤进入| 亚洲综合区小说区激情区| 少妇高潮叫床在线播放| 麻花传媒剧在线MV免费观看| 国产精品久久久一区二区三区| 8AV国产精品爽爽ⅤA在线观看| 亚洲AV无码成人精品区明星换面 | 中文字幕,久热精品,视频在线| 免费无遮挡毛片中文字幕| 成人免费无码A毛片| 亚洲AV无码成H人在线观看| 麻豆视频传媒入口| 粗大猛烈进出高潮视频| 亚洲AV永久无码精品一福利| 免费无码午夜福利片| 国产AⅤ无码旗袍丝袜美腿| 亚洲热妇无码Av在线播放| 强伦姧人妻三上悠亚中文字幕| 国产乱码精品一区二区三区四川人| 亚洲综合日韩AV无码毛片| 日产精品一线二线三线芒| 精产国品一二二线三线区别| 99久久免费国产精品四虎| 五十路○の豊満な肉体| 男生女生一起相差差差30| 国产乱人伦偷精品视频不卡| 中文字幕无线码一区二区| 小13箩利洗澡无码免费视频|