跳转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服务,大家可以参考一下,只实现了部分功能,诸多功能还在完善之中。
https://coding.net/u/idoubi666/p/idoubi/git/blob/master/idouWechat.class.php
三、了解一种微信开发框架
熟悉了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对象//获取status为1的用户的昵称列表 nickname= $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");//实例化User对象获取status为1的用户的昵 nickname= $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;}”
4.多客服插件
多客服系统插件,免费
http://bbs.weiphp.cn/forum.php?mod=viewthread&tid=1269&fromuid=20095
(出处: WeiPHP官方论坛——免费开源公众平台开发框架)
5.消息管理插件
http://bbs.weiphp.cn/forum.php?mod=viewthread&tid=1108&highlight=%E6%8F%92%E4%BB%B6
6.砸金蛋插件
http://bbs.weiphp.cn/forum.php?mod=viewthread&tid=1859&highlight=%E6%8F%92%E4%BB%B6
7.微客服插件
http://bbs.weiphp.cn/forum.php?mod=viewthread&tid=2309&fromuid=11089