1. 程式人生 > >微信公眾號開發最全整理

微信公眾號開發最全整理

跳轉URL(點選選單後跳轉的連結)
推送事件(點選選單後推送的內容 PS:和關鍵詞回覆一般)

SELECT * FROM wp_card WHERE id IN (SELECT DISTINCT wp_card.id FROM wp_card ,wp_shop_product WHERE wp_card.pid=wp_shop_product.id AND wp_card.uname LIKE '%1%'
OR wp_shop_product.title LIKE '%1%' OR wp_card.status LIKE '%1%' ORDER BY wp_card.uid)

鑑於廣大微信開發愛好者個人能力有所差別,有些人可能是程式設計老鳥,但是對於微信開發還比較陌生。針對不同水平的開發愛好者,我們整理了一些資料。希望大家能夠互相學習,共同進步,讓每一個人都能輕鬆上手微信開發。
一、熟悉php程式語言
微信開發做的是微信公眾號介面開發,雖然對開發語言並沒有限制,但是我們推薦各位使用php語言進行開發,如果對php語言還不太熟悉的開發者,我們推薦大家先去了解一下php基礎語法與常用函式。
w3school基礎php教程:

http://www.w3school.com.cn/php/index.asp
php從入門到高階教程:http://pan.baidu.com/s/1gdw7THx
二、瞭解微信開發流程,熟悉微信公眾號各項介面
有程式設計基礎(推薦但不限於php)的開發者,我們希望你去了解一下微信開發的具體業務流程以及微信公眾號開放的各項介面,嘗試著用原生的程式語言(推薦但不限於php)寫一個微信介面類,然後申請一個微信公眾號來使用你自己開發的類。
推薦大家去看看樓主當年入門微信開發看的教程:
青龍老賊-微信公眾平臺開發教程:http://pan.baidu.com/s/1c0hfaMW
微信官方開發文件:http://mp.weixin.qq.com/wiki/home/

分享一個我自己開發的微信介面類,基於SAE平臺的,獲取access_token時使用了SAE的memcache服務,大家可以參考一下,只實現了部分功能,諸多功能還在完善之中。

三、瞭解一種微信開發框架
熟悉了php語言和微信介面之後就可以正式開始微信開發了,現在市面上流行的微信開發框架有weiphp、微擎、微動力等,個人推薦weiphp,因為weiphp是基於thinkphp的,且以外掛的形式擴充套件功能,MVC模式比較合理,門檻低、上手快。
想學習weiphp開發的朋友可以去看我的視訊教程:
第一集:weiphp在sae上的使用與第一個外掛的開發:http://www.56.com/u72/v_MTMxNzY2ODYx.html


第二集:weiphp留言板外掛開發詳解(上):http://www.56.com/u66/v_MTMyNTI1MTUx.html
第三集:weiphp留言板外掛開發詳解(下):http://www.56.com/u95/v_MTMyNTI0OTE2.html
或者去看文字版教程《分分鐘上手weiphp外掛開發系列教程》
vol.1~vol..6:http://2013.idoubi.sinaapp.com/?cat=5
四、開發自己的weiphp外掛
經過一系列的學習之後,你應該已經具備獨立開發weiphp外掛的能力,你可以選擇加入我們在Tower上面組建的團隊——艾豆工作室,並且在艾豆工作室任務列表中選擇幾個你能勝任的任務進行開發。從基礎的留言板外掛到高階的訂餐系統、微官網等外掛,我們希望你能在實戰中逐步提升自己的水平。將你自己開發的外掛分享出來,與廣大開發愛好者互助進步。
艾豆工作室Tower地址:https://tower.im/join?t=7971edba272cc8b66f1e42451a0e0a86
艾豆樂園外掛任務列表:https://tower.im/s/3e9pr
艾豆工作室開源專案地址:
https://coding.net/u/idoubi666/p/idouStudio/git

問題:
1.一個外掛可以對應多個關鍵詞
找到keyword資料庫表,在裡面新增其中keyword資料表中keyword是關鍵字,addon是指向的外掛名稱,token為0的時候是所以使用者都可以用

關鍵詞表裡如果加不了的,比如正則匹配的關鍵詞,可以在WeixinController.class.php這裡加!
2.使微信轉發圖文訊息的封面圖片不是正文中的圖片
在編輯的時候,封圖的下面有個選項,預設的是打鉤的,你只要把那個勾去掉,封圖就不會在正文中顯示了。

3.weiphp操作資料庫
①更新

M('myinfo')->data($data)->where("id=".$id)->save();

②新增

M('myinfo')->add($data);

③查詢

$data=M('myinfo')->where($map)->select();
$info = (M ( 'member_public' )->where ( $map )->order ( 'id desc' )->find ());

④查數

$count=M('service')->where(array('openid'=>get_openid(),'date'=>date('Y-m-d',time())))->count();

⑤getField方法
getField方法是ThinkPHP中用來獲取欄位值的方法,區別於select和find方法,通常僅用於獲取個別欄位的值。但是事實上並沒有那麼簡單,現將該方法的用法總結如下:
1.獲取某個欄位值
這個是getField方法最基本的用法,用於獲取符合條件的某個欄位值。

$User= M("User"); // 例項化User物件
 // 獲取ID為3的使用者的暱稱
$nickname= $User->where('id=3')->getField('nickname');

返回的nickname是一個字串結果。也就是說,即使有滿足條件的多個欄位,也只會返回一個結果。
2.獲取某個欄位列
如果希望返回符合要求的欄位列(多個結果),可以使用:
User=M(User);//User//status1nickname= $User->where(‘status=1’)->getField(‘nickname’,true);
第二個引數傳入了true,返回的nickname則是一個數組,包含了所有滿足條件的暱稱列表。
如果需要限制返回結果數量,可以使用:

$nickname= $User->where('status=1')->getField('nickname',8);

或者

$nickname= $User->where('status=1')->limit(8)->getField('nickname',true);

3.獲取2個欄位列表
如果希望獲取滿足條件的id和暱稱列表,則可以User=M("User");//Userstatus1nickname= $User->where(‘status=1’)->getField(‘id,nickname’);etField方法傳入多個欄位名稱的話,預設返回一個關聯陣列,以第一個欄位的值為索引(所以第一個欄位要儘量選擇不會重複的)。
也可以限制返回數量,例如:

$nickname= $User->where('status=1')->getField('id,nickname',8);
或者
$nickname= $User->where('status=1')->limit(8)->getField('id,nickname');

4.獲取多個欄位列表
如果傳入了2個以上的欄位名,則返回一個二維陣列(類似select方法的返回值,區別在於索引是二維陣列的鍵名是第一個欄位的值),例如:

$result= $User->where('status=1')->getField('id,account,nickname');
如果不希望返回二維陣列,可以使用連線符,例如:
$result= $User->where('status=1')->getField('id,account,nickname',':');

⑥select與find的區別:及去除資料

$user=M('admin')->where(array('userid=13'))->field('userid,nickname,profile_image_url,avatar_large,description')->select();
$r=M('admin')->where(array('username'=>$username))->find();

select與find的區別:
select查出來的是多行,即使只有一條資料,也是多行的格式,而find()只取一行,即使返回的是多行,也只取第一行,這就影響到後面的取值問題
select的取值方式是user[0][nickname]find()r[‘password’]

⑦Where 條件表示式格式為:
Where 條件表示式格式為:

$map['欄位名']  = array('表示式', '操作條件');

其中 $map 是一個普通的陣列變數,可以根據自己需求而命名。上述格式中的表示式實際是運算子的意義:
ThinkPHP運算子 與 SQL運算子 對照表
TP運算子 SQL運算子 例子 實際查詢條件

eq  =   $map['id'] = array('eq',100);	等效於:$map['id'] = 100;
neq !=  $map['id'] = array('neq',100); id != 100
gt  >   $map['id'] = array('gt',100);  id > 100
egt >=  $map['id'] = array('egt',100); id >= 100
lt  <   $map['id'] = array('lt',100);  id < 100
elt <=  $map['id'] = array('elt',100); id <= 100
like    like    $map<'username'> = array('like','Admin%'); username like 'Admin%'
between between and $map['id'] = array('between','1,8');   id BETWEEN 1 AND 8
not between not between and $map['id'] = array('not between','1,8');   id NOT BETWEEN 1 AND 8
in  in  $map['id'] = array('in','1,5,8');  id in(1,5,8)
not in  not in  $map['id'] = array('not in','1,5,8');  id not in(1,5,8)
and(預設) and $map['id'] = array(array('gt',1),array('lt',10));  (id > 1) AND (id < 10)
or  or  $map['id'] = array(array('gt',3),array('lt',10), 'or');    (id > 3) OR (id < 10)
xor(異或) xor 兩個輸入中只有一個是true時,結果為true,否則為false,例子略。   1 xor 1 = 0
exp 綜合表示式   $map['id'] = array('exp','in(1,3,8)');	$map['id'] = array('in','1,3,8');

補充說明
同 SQL 一樣,ThinkPHP運算子不區分大小寫,eq 與 EQ 一樣。
between、 in 條件支援字串或者陣列,即下面兩種寫法是等效的:

$map['id']  = array('not in','1,5,8');
$map['id']  = array('not in',array('1','5','8'));

8.

$article = D('Admin/Article');

呼叫
Admin
–Model
– –ArticleModel.class.php(關聯模型)

9.一直關注和取消關注微信公共平臺之後會提示新增失敗

如果短時間之內連續新增20-30個關注,會提示新增失敗,過24小時之後再新增就可以了

10.$this->display();
thinkphp/conf/convention.php目錄下
‘TMPL_TEMPLATE_SUFFIX’=>’.html’可控制預設字尾名

11.多圖文文章的排列順序是根據
wp_custom_reply_news這個表裡的id欄位進行排序的,改變id的排列順序可以實現多圖文的排列順序

12.對於weiphp中發圖文訊息時封面顯示在正文開頭的問題
可以使用萬能頁面將圖文訊息編輯好再將訪問連結新增到自定義回覆圖文訊息的連結中即可。

13.svn: Working copy ‘trunk/src’ locked svn: run ‘svn cleanup’ to remove locks (type ‘svn help cleanup’ for details)
異常操作導致目錄沒有解鎖。
一個簡單的重現方法:在 .svn 目錄下建立空的名為 lock的檔案
使用命令列 “svn cleanup” 或者類似的“清理”動作刪除鎖定

note:
1.微信的redirect_uri引數錯誤原因分析:

我們可以根據微信的開發者文件http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html 網頁授權獲取使用者驗證這一章來排除錯誤原因。如果確定appid等引數值沒有出錯,那麼很大可能就是你的微信公眾號後臺的網頁授權網址沒有填寫或者填寫的不正確。
微信的redirect_uri引數錯誤原因分析

2.自定義選單繫結關鍵字後,關鍵字回覆失效:

這個問題還有訪問自己伺服器內的HTML靜態檔案的問題都是需要一定時間才能生效的(我都是第二天自己就好了)

3.自定義回覆加自定義連結

   官方現提供的自定義回覆外掛沒有自定義連結,在很多時候使用起來並不是很方便。比例,建立一個關鍵詞,想要連結到一個指定頁面的時候,自定義回覆就沒辦法實現。其實只要小小的修改就可以在自定義回覆裡增加一個自定義連結。可以讓這個關鍵詞連結到其他的頁面,如果的微網站覺得不好使的話,可以通過自定義連結把自定義回覆連結到其他的內容管理系統去。。。

1、進入後臺,在“模型管理”的列表中找到自定義回覆的模型“custom_reply_news”-圖文回覆。在這個模型的欄位管理裡增加一個自定義連結的欄位,然後再在“列表定義”中定義一下欄位。
——》 ——》

2、在列表定義中定義欄位後,前臺的新增自定義回覆的列表中就多了一個填寫自定義連結的框,只要在框裡把要連結到的地址,新增時就會把這個自定義連結新增到資料庫中去了。

3、最後要做的就是在組裝使用者在微信裡點選圖文時跳轉的連結時進行判斷一下,如果存在自定義連結則跳到自定義連結,如果不存在自定義連結,跳到預設連結。
修改“Addons\CustomReply\Model”下的“WeixinAddonModel.class.php”,在單條圖文回覆下面組裝使用者在微信裡

點選圖文時跳轉的URL的“$url = addons_url ( 'CustomReply://CustomReply/detail', $param );”
改成“
$gourl=$info['gourl'];
            if(!$gourl){
                $url = addons_url ( 'CustomReply://CustomReply/detail', $param );
            } else{

                $url = $gourl;
                }

”