微信授權登入

文件:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319 微信的授權登入與QQ、新浪等平台的授權登入大同小異,均採用OauthOAuth2.0鑑權方式。 微信授權分為兩種: 靜默授權 彈窗授權,需要用戶手動同意 兩種scope的區別說明 以snsapi_base為scope發起的網頁授權,是用來獲取進入頁面的用戶openid的,並且是靜默授權並自動跳轉到回調頁的。用戶感知的就是直接進入了回調頁(往往是業務頁面) 以snsapi_userinfo為scope發起的網頁授權,是用來獲取用戶的基本資訊的。但這種授權需要用戶手動同意,並且由於用戶同意過,所以無須關注,就可在授權後獲取該用戶的基本資訊。 用戶管理類介面中的「獲取用戶基本資訊介面」,是在用戶和公眾號產生訊息交互或關注後事件推送後,才能根據用戶OpenID來獲取用戶基本資訊。這個介面,包括其他微信介面,都是需要該用戶(即openid)關注了公眾號後,才能呼叫成功的。 具體而言,網頁授權流程分為四步: 引導用戶進入授權頁面同意授權,獲取code 透過code換取網頁授權access_token(與基礎支援中的access_token不同) 如果需要,開發者可以重新整理網頁授權access_token,避免過期 透過網頁授權access_token和openid獲取用戶基本資訊(支援UnionID機制) 以下是封裝的微信操作類,需要用到兩個資料表,用於保存access_token、ticket,由於它們具有一定有效期,且每天請求數有上限,所以開發者需自行保存 <?php /\*\* \* 微信操作表 \* wxtoken 表結構 \* id \* access\_token \* addtime \* wxticket 表結構 \* id \* ticket \* addtime \*/ class WX { private $appid; private $appserect; private $curl; private $msg; protected $errs = array( '-1' => '系統繁忙,此時請開發者稍候再試', '0' => '請求成功', '40001' => 'AppSecret錯誤或者AppSecret不屬於這個公眾號,請開發者確認AppSecret的正確性', '40002' => '請確保grant\_type字段值為client\_credential', '40164' => '呼叫介面的IP地址不在白名單中,請在介面IP白名單中進行設定。', ); function \_\_construct($appid, $appserect) { $this->appid = $appid; $this->appserect = $appserect; $this->curl = new Curl(); } /\* 微信網頁授權登入 需要在公眾號設定 - 功能設定 - 網頁授權域名 第一步:用戶同意授權,獲取code scope : snsapi\_base 只能獲取openid 直接跳轉 snsapi\_userinfo \*/ public function getCode($redirect\_uri, $scope = 'snsapi\_userinfo',$state = '1') { $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$this->appid}&redirect\_uri={$redirect\_uri}&response\_type=code&scope={$scope}&state={$state}#wechat\_redirect"; header("Location:{$url}"); exit; } /\* 第二步:透過code換取網頁授權access\_token \*/ public function getAccessTokenByCode($code) { $url = "https://api.weixin.qq.com/sns/oauth2/access\_token?appid={$this->appid}&secret={$this->appserect}&code={$code}&grant\_type=authorization\_code"; // exit($url); // $curl = new Curl(); $result = $this->curl->doGet($url); if (!$result) { // $this->curl->getError() $this->msg = "獲取token失敗"; return false; } $result = json\_decode($result, true); if ($result\['errcode'\]) { $this->msg = $result\['errmsg'\]; return false; } return $result; } // 第三步:重新整理access\_token(如果需要) 透過code 獲取openid $type 0靜默授權 1彈窗授權 public function getUserInfo($code, $type = 0, $lang = 'zh\_CN ') { $result = $this->getAccessTokenByCode($code); if (!$result) { return false; } $member = C::t(PT\_USER)->getByOpenid($result\['openid'\]); if ($member) { return $member; } else { if ($type) { $url = "https://api.weixin.qq.com/sns/userinfo?access\_token={$result\['access\_token'\]}&openid={$result\['openid'\]}&lang={$lang}"; // $return = $this->curl->doGet($url); // 這介面有病 強制顯示文件頭 $return = file\_get\_contents($url); if (!$return) { $this->msg = '獲取用戶資訊失敗'; return false; } $return = json\_decode($return, true); if (!$return) { $this->msg = '獲取用戶資訊返回失敗'; return false; } // file\_put\_contents('ccc.txt',print\_r($return,true),FILE\_APPEND); $data = array( 'openid' => $return\['openid'\], 'name' => $return\['nickname'\], 'sex' => $return\['sex'\], 'province' => $return\['province'\], 'city' => $return\['city'\], 'country' => $return\['country'\], 'img' => $return\['headimgurl'\], 'bindtel' => 0, ); } else { $data = array( 'openid' => $result\['openid'\], 'username' => "微信用戶\_" . random(6,1) ); } $name = rand(100000, 1000000000); $e = $name . "@qq.com"; $password = $e; $id = UserAddEdit(0, $data\['username'\], $password, $e,10,0,"", $msg); if ($id <= 0) { $this->msg = $msg; return false; } C::t(PT\_USER)->update($data, $id); $member = C::t(PT\_USER)->get($id); return $member; } } /\* 公眾號 安全中心 設定IP白名單 公眾號的全局唯一介面呼叫憑據,公眾號呼叫各介面時都需使用access\_token。開發者需要進行妥善保存。access\_token的儲存至少要保留512個字符空間。access\_token的有效期目前為2個小時,需定時重新整理,重複獲取將導致上次獲取的access\_token失效。 \*/ public function getAccessToken($type) { $addtime = TIMESTAMP - 7200; $url = "https://api.weixin.qq.com/cgi-bin/token?grant\_type=client\_credential&appid={$this->appid}&secret={$this->appserect}"; $row = C::t(PT\_WXTOKEN)->getNew($addtime, $type); if ($row) { return $row\['access\_token'\]; } else { $result = $this->curl->doGet($url); if (!$result) { $this->msg = "無法獲取令牌內容"; return false; } $result = json\_decode($result, true); if (!$result) { $this->msg = "解析令牌內容失敗"; return false; } if ($result\['access\_token'\]) { C::t(PT\_WXTOKEN)->addToken($result\['access\_token'\], $type); return $result\['access\_token'\]; } else { $this->msg = "獲取令牌失敗"; return false; } } } // 獲取js票據 需要在公眾號設定 - 功能設定 - JS介面安全域名設定 public function getJsTicket() { $addtime = TIMESTAMP - 7200; $row = C::t(PT\_WXTICKET)->getNew($addtime); if ($row) { return $row\['ticket'\]; } else { $token = $this->getAccessToken(); if (!$token) { return false; } $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access\_token={$token}&type=jsapi"; $result = $this->curl->doGet($url); if (!$result) { $this->msg = "無法獲取js票據"; return false; } $result = json\_decode($result, true); if (!$result) { $this->msg = "解析js票據內容失敗"; return false; } if ($result\['ticket'\]) { C::t(PT\_WXTICKET)->addTicket($result\['ticket'\]); return $result\['ticket'\]; } else { $this->msg = "獲取js票據失敗"; return false; } } } // js sdk 票據簽名 當前網頁的URL,不包含#及其後面部分 public function jsSign($data) { // 1.所有待簽名參數按照字段名的ASCII 碼從小到大排序(字典序) ksort($data); // 2.URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串string1 採用原始值,不進行URL 轉義 $string1 = $this->ToUrlParams($data); // echo "string1:{$string1}"; // 3.對string1做sha1加密 $sign = sha1($string1); // echo "signature:{$sign}"; return $sign; } // 獲取訊息內容 public function getMsg() { return $this->msg; } /\*\* \* 格式化參數格式化成url參數 \*/ public function ToUrlParams($data) { $buff = ""; foreach ($data as $k => $v) { if ($k != "sign" && $v != "" && !is\_array($v)) { $buff .= $k . "=" . $v . "&"; } } $buff = trim($buff, "&"); return $buff; } } ?> // 微信登入 function wxlogin() { global $_G,$identifier,$config,$wx; if (!$_G[‘uid’]) { if ($_GET[‘state’]) { // 回調 $member = $wx->getUserInfo($_GET[‘code’]); if (!$member) { exit($wx->getMsg()); } if (!function_exists(“setloginstatus”)) { include_once libfile(‘function/member’); } // 設定登入狀態$wx setloginstatus($member, 2592000); checkfollowfeed(); $_G[‘uid’] = $member[‘uid’]; $_G[‘member’] = $member; } else { // 請求授權 對參數編碼 $redirect = urlencode(getProtocol() . $_SERVER[‘HTTP_HOST’] . $_SERVER[‘REQUEST_URI’]); $wx->getCode($redirect, ‘snsapi_base’); } } } function getProtocol() { return is_HTTPS() ? ‘https://’ : ‘http://’; } function is_HTTPS() { if ($_SERVER[‘HTTPS’] === 1 || $_SERVER[‘HTTPS’] === ‘on’ || $_SERVER[‘SERVER_PORT’] == 443) { return true; } return false; }

2019年4月5日 · 4 min · MoeJue

微信JSAPI支付

前陣子一直在做微信相關的業務,雖說不是什麼新技術,但之前一直沒有機會接觸到,然後踩了些坑,抽空整理記錄下。 微信支付一共分為7種,分別是:付款碼支付、JSAPI支付、Native支付、APP支付、H5支付、小程序支付、人臉支付。 此次業務中使用到的是微信JSAPI支付:用戶透過微信掃碼、關注公眾號等方式進入商家H5頁面,並在微信內呼叫 JSSDK完成支付 文件:https://pay.weixin.qq.com/wiki/doc/api/index.html SDK:[https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=11_1 ](https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=11_1)JSAPI支付需要在微信中的瀏覽器打開才能喚起微信支付,效果如下圖 附上介面程式碼 程式碼中使用了模板引擎 html: {$competition\['username'\]} {$prices\[0\]}鑽 {$prices\[1\]}鑽 {$prices\[2\]}鑽 {$prices\[3\]}鑽 {$prices\[4\]}鑽 註:1鑽=1元,1鑽={$activity\['offset'\]}票 立即微信支付 JavaScript: // 投票 var offset = {$activity[‘offset’]}; $(’#tips’).html(‘正在給{$competition[‘code’]}號贈送{$prices[0]}鑽=’+({$prices[0]}*offset)+‘票’); $(’#vote’).click(function(){ $.post(’/index/index/detailed.html?cid={$cid}&aid={$aid}’,{ formhash :’{FORMHASH}’, submit:‘1’, type:1, openid:’{$_G[‘member’][‘openid’]}’ },function(res){ alert(res.msg); if (res.code == 0) { $(’.box-1 span’).text(res.data.all); $(’.box-2 span’).text(res.data.rank); $(’.box-3 span’).text(res.data.up + ‘票’); } }); }) /* jQuery物件級別外掛程式擴展 */ $.fn.extend({ /* 單選框 */ hlRadio:function () { var radioEl=$(this); radioEl.click(function () { var price = 0; price = $(‘input:radio:checked’).val(); $(’#price’).val(’’); $(’#tips’).html(‘正在給{$competition[‘code’]}號贈送’+price+‘鑽=’+(price*offset)+‘票’); radioEl.siblings(“div”).removeClass(“active”); $(this).siblings(“div”).addClass(“active”); }); }, }); $(“input[name=‘price’]”).hlRadio(); $(’#price’).bind(‘input propertychange’, function(){ var price = 0; price = $(’#price’).val(); $(’#tips’).html(‘正在給{$competition[‘code’]}號贈送’+price+‘鑽=’+(price*offset)+‘票’); }) ...

2019年3月30日 · 4 min · MoeJue

國產邪神手辦開箱

「邪神」正是用於描述這些表情崩壞到離譜,細節不堪到令人髮指的手辦。 說起「邪神」,大家也許第一感覺就是「邪神四姐妹」,其實都是讓人膜拜的存在,四大邪神的威名萬世傳揚,不僅可以辟邪,而且擺出來非常長臉有沒有,殺人不見血的強大武器 在還沒下單時,我就已經想好了這次的標題《泳裝手辦果然棒》; 當看到這麼小的包裝的時候我已經預感到不好了,連箱子都才4個面 氣泡墊中若隱若現的身影 第一眼看去還好,但是不經細看 看一圈外包裝,沒什麼大毛病,標配 還好看得出來是楪祈 這。。。這角度,刁鑽 這手,無可挑剔 這泛白的頭髮 不過還句話說的好:物極必反。 當邪神邪到一定程度後,反而讓人欲罷不能…… 到貨後,我可能不得不修改標題了 國產最出名的邪神當屬「大邪神saber」,由於畫面可能引起不適,就不放圖片了 但邪神的影響力卻促使他們成為了真正的收藏品。 總之:「這是款治癒心靈,讓人心境平靜的產品。」

2019年3月14日 · 1 min · MoeJue

這次真的放鴿子了

完了完了,這次真的放鴿子了,前兩個月的年終總結還在誇自己去年每個月都有勤奮地發部落格,然而 flag 果然是用來打破的。 其實還不算太放鴿子(還有這樣算的嗎???黑人問號),今天其實是 2 月 29 日(強行挽回) 啦啦啦啦~~~ 好吧,其實放鴿子的原因主要還是因為工作繁忙,今晚也是好不容易沒有加班,才能寫寫部落格,平時白天上班就很累了,下班就想休息,根本沒那心思構思部落格了,得諒解得諒解。 要問我是什麼工作的話,IT 行業,現在是在某互聯網公司做程式設計師,全端工程師(笑),所以加班是常有的事,你懂的 所以所以以後有空的話可能會整理整理學習到的技術和心得分享分享(超乾的貨)。 但是新專案的話可能就沒時間去構思了 不過不用擔心部落客的頭髮問題,我們不一樣,我是面向 ACG 編程的,不會有髮際線問題 然後再說說部落格,其實從去年底就一直有想換主題的想法,看中了好幾款,但並不是 emlog 的主題,又沒辦法說換就換,現在的主題就是平平淡淡的規規矩矩的一個模板,有點審美疲勞了,也和我部落格的主題其實一點都不搭,但又怕花花綠綠的主題很多人不適應或者說是不喜歡,所以一直在糾結,要不要自己移植一份過來並保留現在的主題,允許用戶自行切換,但是呢。。。。。。。懶 差不多就這樣了,什麼事不能放到以後再說,主要還是水水文,逃~~

2019年3月1日 · 1 min · MoeJue

小米8青春版開箱

小米8青春版 6G + 64G (這輩子可能只能當個米粉了) 原價1699,年貨節優惠200,到手1499 下單第二天才能發貨,運輸一天,第三天到貨 還送了張米粉卡,我可能是用不上了6.26 英寸 19:9 全螢幕 2280 x 1080 FHD+,403 PPI,1500:1 對比度 驍龍660 AIE 八核心處理器,最高主頻 2.2GHz Adreno 512 圖形處理器,最高主頻 650 MHz 可能有人說我64G買小了,我之前的小米才32G,用了兩年都沒用完,買來之後才發現小米8也是支援外置SD卡的,插上我32G的SD卡完全夠用。夠用就好,何必浪費錢買大記憶體… 手機主機 / 電源適配器 / USB Type-C 數據線 / Type-C To Audio 轉接線 / 插針 / 高透軟膠保護套 / 入門指南 / 三包憑證 開機然後是一些首次開機設定 學習手勢錄入指紋 經過漫長而興奮的設定後 進入桌面 看一下配置 MIUI9,暫時不打算升級,MIUI10雖說號稱最快的版本,但是有些地方不大喜歡 3350mAh(typ)/ 3250mAh ( min ) 支援 QC3.0 快充 標配 5V2A 充電器 USB Type-C 充電接口 採用的是玻璃背蓋,但並不支援無線充電,不戴套好滑,生怕摔到地上 AI 雙攝 前置 24MP,SONY IMX576,4合1,1.8um大像素 後置 12MP,SONY IMX363,1.4um 大像素,f/1.9 大光圈,Dual PD 雙核對焦 後置 5MP,SAMSUNG S5K5E8,1.12um 大像素 由於雙鏡頭+薄的原因,會導致後部凸起,放桌上會硌到桌子,戴上保護套就剛好持平 總的來說,小米手機的性價比高,值得購買。讚一個

2019年1月25日 · 1 min · MoeJue

我好像失去了一個朋友

有人說: 補番完畢就像失去了一個好朋友。 是啊,在看番的時候,大家都會傾注自己的感情,把自己代入到二次元,即使只是「旁觀者」,但是所有發生在二次元裡的事我們都在見證著: 不斷認識和了解的夥伴、一起面對的事,快樂、高興、憂愁、疑惑、難過、悲傷、生氣、辛酸,都是和二次元裡的夥伴們共同擁有的回憶。 到了完結之時,那些難忘的人和事都要和我們說再見了,這是真的生離死別,我們也許永遠都不會再相見了吧。 可是呢,大家並沒有消失啊。 他們並沒有走,大家結下的羈絆,使我們更緊密地聯繫在一起——對的,他們已經向我們傳達了心意,永遠駐留在我們的記憶裡,他們並沒有走,他們一直都陪伴在我們的身邊,鼓勵我們,幫助我們,無時無刻。 他們也許屬於過去,但他們早已經成為了我們的力量,去鼓勵我們、幫助我們在人生的道路上向前看,向前走,去擁抱未來,擁抱美好的事物。 到那時,我們也一定會再次遇上像他們一樣的夥伴,給予我們再一次難忘的回憶。 然後我們又懷著同樣的感恩之情,元氣滿滿地,繼續向前走。沒有他們,我覺得,我們是不可能做到的。 我想,這就是每一部難忘的好番的意義吧。 再次,民那桑, さよなら,ありがと。

2019年1月17日 · 1 min · MoeJue

我以為我會暴富,但是我沒有。

2018年已經走到盡頭 暴富的願望落空了 更慘的是還要完成一部年度巨作 ——年終總結 說起來,這世上原本沒有年終總結 自從有了KPI 就有了扯不盡的怨念 下面是正文 在 文章歸檔 這裡可以很清楚地看到所有文章和發布的時間,2018年的每一個月都有發布文章,幾乎每天都會來看看。 # 回顧 1月份寫了第一個自己的部落格系統 2月份買第一個手(老)辦(婆) 3月份發布了幻想領域圖床首個版本 4月份更新了幻想領域圖床正式版、整合了emlog新浪插件 5月份上線了萌音發卡平台 6月份修復了許久未管的歌單 7月份哇,萌音社群來了 8月份收款碼三合一發布 9月份萌音影視上線 10月份過的第三個程式設計師節1024 11月份買了小米筆記型電腦&萌音雲筆記發布 12月份去了遠方,唯有二次元不能放棄 # 2019 2019將會是一個忙碌、學習且成長的一年。年初的展望沒有食言,今年大大小小的專案也是寫了不少,也學到了很多東西,創建了我第一個qq群,交到了一群愛我的小夥伴們。 今年確實是又雙叒叕忘記準時發部落格,但今年不會再像去年那樣機(無)智(恥)地改時間了,過去的時間畢竟不能再回來了。 這兩個月學習的一些東西都給記到萌音雲筆記上了,沒有往部落格這邊發,有興趣的小夥伴可以去看看。鬼知道我經歷了什麼,以前都是一兩個月孵化出一個專案,現在是一星期整一個出來。這僅僅只是吐槽,並非埋怨。 去年的展望是寫在了敬業福中(去年有來的朋友才會知道),今年本來還想掛上去的,突然發現原始碼在很遙遠的地方,然後就算了,大不了發篇部落格就好了。 這兩個月也入門了下C、C++、Java、node.js,玩了discuz外掛&模板、百度&微信小程序、公眾號…… 2019年繼續加油….

2019年1月2日 · 1 min · MoeJue

最初,進入二次元是什麼時候?

最初,是甚麼時候進入二次元的呢? 或許是一部引人入勝的動漫,是一位帥氣漂亮的人物,也許是不經意的一瞥,也許是朋友的強烈推薦, 在許許多多的「也許」中, 唯一不變的是當初看見它的欣喜,彷彿人生因此填滿了色彩, 彷彿天使之門洞開。 曾經看番劇到深夜,催眠自己說看完這集一定睡覺, 曾經為了自己喜歡的人物瘋狂拉票, 曾經省下午飯錢用來氪金和買周邊。 數著到手的日子。 曾經為某個劇情淚目, 為本不關自己的故事泣不成聲, 又曾經為主角的奮起而熱血沸騰, 彷彿和他們一起奮戰在虛幻的時空。 曾經的手機桌布全是某個喜歡的人物,QQ個人簽名都是他們說的話。 曾經一個人窩在被窩裡看著動漫裡的歡笑打鬧,自己一個人跟著無聲地傻笑。 曾經在看完某部番後戀戀不捨, 懷有某種人去樓空的失落之感。 無數個日夜用動漫來陪伴年少, 用二次元的火把來驅散孤獨。 有了它們的陪伴, 我的青春才不至於如此無助和迷茫。 曾經在QQ群裡聊天聊到黎明, 曾經也說著中二病永不散場。 我不知道你們的名字, 不知道你們在現實中扮演什麼樣的角色, 不知道此時的你們是否心情失落, 但此時我們即使是隔著千山萬水, 也如近在咫尺。 我們曾戲謔說,鳴人永遠也當不上火影, 但他也終於披上七代目那火紅的戰袍。 我們曾說,此生無悔入二次元。 但總有人默默離去就此分別。 前行的路中,終究難以殊途同歸。 終有一天我們清空了自己手機裡的動漫圖片,執手忘卻自己的年少。 終有一天,我們也要奔赴人生的戰場, 埋葬過去的孤傲和無奈。 夏目的友人帳還沒有清完, 工藤新一還未能對小蘭說我愛你, 神話般的聖杯之戰還未結束, 司和艾拉也還未能重逢, 立華奏也還未遇見音無結弦, 那個棒球還未能擊破少女的窗, 還未到十年後與面碼再見的那個夏天, 少年還未站在華麗演奏廳上, 用絕世的協奏曲來祭奠那位少女。 英雄們依然為了那遙遠的理想之城廝殺, 在自由的彼岸,人類還未曾突破那座高牆。 ……我們曾光芒萬丈如皇帝般不可一世, 也曾落魄街頭如喪家之犬。 曾擁有兄弟滿門千軍萬馬, 也曾孤軍奮戰暴雪獨行。 只要能在某個夜晚 突然想起當初無助的歲月, 無意間打開了二次元的大門, 找到了前行中唯一的光。 這就,足夠了

2018年12月24日 · 1 min · MoeJue

小米筆記本電腦15.6開箱

學習大佬部落格玩開箱(:- 最近去了詩和遠方,所以沒什麼時間更新部落格了,接下來的一段時間我想也會是這樣,連電腦都沒有更新個屁啊 所以,我就趁亂買了臺筆記型電腦先用用 前段時間剛好有便宜,然後就拿出了畢生的積蓄買下了一臺小米筆記型電腦。(其實我應該是個米粉 然後隔天晚上就到了。(快遞真慢 (:-笑 正面照 預裝正版Windows 10系統,Office 家用及學生版 包得嚴嚴實實的 產品說明書和充電器(好空虛 深空灰,本來是想買銀色的,可惜沒有貨 表面是無Logo設計,可以貼張蘋果的Logo上去(:笑 當然我可不會這麼做,要我的話也是這樣子 配備了七大接口,三合一讀卡機、USB 2.0、千兆網路孔、HDMI 接口、兩個 USB 3.0、耳麥插孔,所以並不能很薄 全程啟用由小愛同學引導你,支援語音輸入 擁有小鍵盤設計 數十分鐘後就進入到桌面了 別的不說,先換張桌布上去再說 開箱就到這裡了吧,時不時上來冒個泡,證明部落格還活著 不說了,還花唄去了

2018年11月25日 · 1 min · MoeJue

萌音雲筆記平臺

官網 | 官方交流群 | 部落格 | GitHub 基於優雅的Laravel + 超難用的MDUI = 萌音雲筆記,一個高效的線上雲筆記、專注技術文件線上創作、閱讀、分享和託管 專案起源 某日,在某社群官方交流群中 群主的RBQ 說了一句: 幫我寫一個雲筆記唄 另外,由於部落客剩下的時間不多了,許多計畫中的功能便割捨了…..無奈╮(╯▽╰)╭ 好吧,一般我不喜歡介紹專案功能,你們自己發掘吧! 這可能是今年寫的最後一個專案了,因為部落客我要追逐夢想去了,就如同部落格副標題寫著。 今年也算是完成了年初的目標,完美啦 安裝需求 LNMP/AMP With PHP5.6.4+ OpenSSL、PDO、Mbstring、Tokenizer、XML、fileinfo Composer 下載 1. Clone 本專案 git clone https://github.com/178146582/note.git 2. composer 安裝擴充套件包 composer install 3. 參考 Laravel 安裝 中間省略一萬步 xx. 完成 給本專案一個 Star~ (注意,這一步尤為重要) 訪問你的網域即可 投餵❤點我

2018年11月6日 · 1 min · MoeJue