先上效果图:
作者博客:http://blog.csdn.net/stationxp
作者微博:http://weibo.com/liuhailong2008
转载请取得作者允许
一 基础篇
1、新手接入:http://mp.weixin.qq.com/wiki/index.php?title=接入指南须要注意的是URL必须是公网能訪问的,必须是80port。
刚才被80port郁闷了好久。文档中也没明白写。
文档最以下写着:“此外请注意。微信公众号接口仅仅支持80接口”。好吧,是我人品问题。
2、典型案例介绍
http://mp.weixin.qq.com/wiki/index.php?
title=典型案例介绍
自己定义菜单非常酷,假设没有自己定义菜单。纯靠敲代码响应客户输入,那须要深厚的自然语言处理能力。
须要绑定客户身份,可能是手机号,可能跳转到一个页面绑定。
问题:每次得到的OpenID一样吗?
假设跳转到还有一个页面,能够把OpenID隐藏在get中传过去。然后存在隐藏表单域中。你懂的。
3、开发人员规范
http://mp.weixin.qq.com/wiki/index.php?title=开发人员规范
模板消息和用户数据方面的规范。
“请勿为不论什么用户自己主动登录到微信公众平台提供代理身份验证凭据”意思是让每一个人用自己的身份凭据。
能够为他人提供身份凭据吗?
“请勿自己主动将浏览器窗体定向到其它网页”哪个浏览器窗体?
“完整的开发人员规范和接口限制。请详见开发人员接口文档”
开发人员接口文档在哪里?
4、调用接口频率限制
http://mp.weixin.qq.com/wiki/index.php?title=接口频率限制说明
5、调试接口
https://mp.weixin.qq.com/debug/
6、access_token
调用接口时。server须要知道调用者身份。
但每次都提交AppID和AppSecret是不是有点傻。
server也麻烦。每次都要验证。
干脆server发良民证,检查AppID和AppSecret没问题就发一个,能够用12分钟。
在这12分钟内,仅仅要检查良民证就能够了。
200 OK
Server: nginx/1.4.4
ConDate: Wed, 07
Content-Type
{
"access_token": "35r3_cicy-CtwRrK0RoPmt13OIX_WXSxJI1Yd_s5wPghVJ7RU2V8STmH7fcAmD6S",
"expires_in": 7200
}
7、上传下载多媒体文件
http://mp.weixin.qq.com/wiki/index.php?title=上传下载多媒体文件
200 OK
Content-Length: 118
Date: Wed,
{
"type": "image",
"media_id": "DPlBG0Txb3HYzwI4OfJCj9G9ozURJOTVd2W4qAMt5LNMGSc5vy07b2qAHvj_-wJx",
"created_at": 1399478362
}
请求地址:
http://file.api.weixin.qq.com/cgi-bin/media/upload?
access_token=35r3_cicy-CtwRrK0RoPmt13OIX_WXSxJI1Yd_s5wPghVJ7RU2V8STmH7fcAmD6S&type=image
"media_id": "Gmr7w0G_4uMxH0PgLF2yQDRjiQSHSFlpWxeuCxIgY9wGf5giBbqemqBX2V9Gddqi"
要自己写Web管理界面?
curl是什么工具?
下载文件。在线调试没通过。报错JSON数据格式不对。
8、验证消息真实性
http://mp.weixin.qq.com/wiki/index.php?title=验证消息真实性
怎么知道消息是从微信server传过来的呢?
和验证成开发人员时候一样的。
每次微信server请求url都会带signature、timestamp、nonce參数。
url所指向的web程序能够将timestamp、nonce加上token(保存在用户自己server上)算出一个字符串,和signature比較。
学习一下微信API的设计,还是不错的。
二、自己定义菜单
1、常识"眼下自己定义菜单最多包括3个一级菜单,每一个一级菜单最多包括5个二级菜单。一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”取代。请注意。创建自定
义菜单后,因为微信client缓存,须要24小时微信client才会展现出来。建议測试时能够尝试取消关注公众账号后再次关注,则能够看到创建后的效果。"
2、菜单对应类型
有click和view两种。定义菜单时,click的同一时候定义key,view的同一时候定义url。
3、怎样创建菜单
{
"button":[
{"type":"click", "name":"关于我","key":"BTN_ABOUT_USER" },
{"name":"我的伙伴", "sub_button":[
{"type":"view","name":"胡磊磊", "url":"http://chaoshi.cgdmc.com/wx/person/hulei.php" },
{"type":"view","name":"魏超超", "url":"http://chaoshi.cgdmc.com/wx/person/weichao.php" },
{"type":"view","name":"雷达达","url":"http://chaoshi.cgdmc.com/wx/person/leida.php"}
]
},
{"type":"click","name":"关于作者", "key":"BTN_ABOUT_ME"}
]
}
请求地址:
https://api.weixin.qq.com/cgi-bin/menu/create?
access_token=xx
返回结果:
200 OK
Content-Length: 27
Date: Wed, 07
Content-Typ
{
"errcode": 0,
"errmsg": "ok"
}
4、怎样查询现有菜单:(这个有意义吗?自己做一个管理平台?)
200 OK
chaoshi.cgdmc.com: nginx/1.4.4
Con
Date: Wed, 07
Content-Typ
{
"menu": {
"button": [
{
"type": "click",
"name": "关于我",
"key": "BTN_ABOUT_USER",
"sub_button": [ ]
},
{
"name": "我的伙伴",
"sub_button": [
{
"type": "view",
"name": "胡磊磊",
"url": "http://chaoshi.cgdmc.com/wx/person/hulei.php",
"sub_button": [ ]
},
{
"type": "view",
"name": "魏超超",
"url": "http://chaoshi.cgdmc.com/wx/person/weichao.php",
"sub_button": [ ]
},
{
"type": "view",
"name": "雷达达",
"url": "http://chaoshi.cgdmc.com/wx/person/leida.php",
"sub_button": [ ]
}
]
},
{
"type": "click",
"name": "关于作者",
"key": "BTN_ABOUT_ME",
"sub_button": [ ]
}
]
}
}
5、自己定义菜单删除的话,仅仅能全删
已有的情况下,再次加入,是否就是更新?
试了一下,是的。
6、菜单事件的处理
http://mp.weixin.qq.com/wiki/index.php?title=自己定义菜单事件推送
type为view的不须要写代码支持。
仅仅来看type为click的。
须要得到Event和EventKey。
分别点了“关于我”和“关于作者”,自己server代码收到的消息是:
gh_xxxxxxxxx(公共平台微信号)
xxxx-0 (用户OpenID)
1399481134
event
CLICK
BTN_ABOUT_USER
和
gh_xxxxxxxxx(公共平台微信号)
xxxx-0 (用户OpenID)
1399481140
event
CLICK
BTN_ABOUT_ME
程序代码里,
if( 'BTN_ABOUT_ME'.equals(eventKey) ){
response.setMsgType("text");
response.setContent("我是刘海龙。围脖地址:\nweibo.com/liuhailong2008\n亲。加关注呦。");
}
依照规矩。处理消息前,应该先验证一下。记得不,亲,签名就是干这个用的。
三、 获取用户信息
1、获取用户信息https://api.weixin.qq.com/cgi-bin/user/info?access_token=tP2ttoAfStr8-1j2QzmNVcuw0wCy_bv5ZPVw2gygKptiwAVm2JN_eo0CpdH1EMeh&openid=oai_Ejvay12_FjT0fWWwc4gSe7-0
返回结果:
200 OK
Server: nginx/1.4.4
Con
Date: Wed, 07
Content-Typ
{
"subscribe": 1,
"openid": "oai_xxxe7-0",
"nickname": "刘海龙",
"sex": 1,
"language": "zh_CN",
"city": "保定",
"province": "河北",
"country": "中国",
"headimgurl": "http://wx.qlogo.cn/mmopen/ezjZug0fpibxah7nkiaYLMgg7RnS0NPHFlt7Yg6BbPTTmq1B1rfI4DCIPofibTcYHnyqMAcr2cyp76A79MCoKicpbQ/0",
"subscribe_time": 1399480903
}
程序调用返回:
1
oai_EjvxxxWWwc4gSe7-0
刘海龙
1
zh_CN
保定
河北
中国
http://wx.qlogo.cn/mmopen/ezjZug0fpibxah7nkiaYLMgg7RnS0NPHFlt7Yg6BbPTTmq1B1rfI4DCIPofibTcYHnyqMAcr2cyp76A79MCoKicpbQ/0
1399480903
oai_Ejvay12_FjT0fWWwc4gSe7-0
gh_3d3203deb07d
1399482736
完事儿收工!