微信开发(微信公众号)
一、 准备工作
a) 账号
- 在SAE上面注册一个账号。
- 在微信公众号开发平台地址 https://mp.weixin.qq.com 注册一个微信公众号。
注意:1、个人只能申请到个人类型的订阅号。
2、微信公众号认证需要300大洋。
- 申请公众号测试号地址
http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
二、 微信公众账号介绍
服务号、订阅号、企业号的介绍(区别)
1、订阅号:主要偏于为用户传达资讯(类似报纸杂志),认证前后都是每天只可以群发一条消息;
2、服务号:主要偏于服务交互(类似银行,114,提供服务查询),认证前后都是每个月可群发4条消息;
3、企业号:主要用于公司内部通讯使用,需要先有成员的通讯信息验证才可以关注成功企业号;
温馨提示:
1、如果想简单的发送消息,达到宣传效果,建议可选择订阅号;
2、如果想进行商品销售,进行商品售卖,建议可申请服务号;
3、如果想用来管理内部企业员工、团队,对内使用,可申请企业号。
三、 微信数据收发原理以及消息数据格式
3、1 开发者模式成为开发者时的消息校验原理
开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,并且带上四个参数(signature、timestamp、nonce、echostr),开发者通过对签名(signature)的检验,来判断此条信息的真实性。
验证成功之后,开发者接受用户消息的时候,微信也都会带上前面三个参数(signature、timestamp、nonce)访问开发者设置的URL,开发者依然通过签名的校验判断消息的真实性。
加密/校验流程如下:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
3、2 成为开发者后消息收发的原理
微信消息收发原理图:
其实,我们需要做的事情,就是对HTTP请求,做出响应。也就是拿到微信服务器给我们的数据,然后处理后再返回去。
上图的消息收发过程是这样的:用户用手机发送一个?给微信公众号,微信服务器接受到? 然后组装一个消息发送给我们自己的服务器,我们的服务器回复一个时间,并且将时间也按照一定的规则组装,回复给公众号,公众号所在的服务器再回复给用户。
四、 接入指南
接入微信公众号平台开发,需要按照如下步骤:
1、 填写服务器配置
2、 验证服务器地址的有效性
3、 依据接口文档实现业务逻辑
第一步:填写服务器配置
进入微信公众平台https://mp.weixin.qq.com
在左侧列表中最下方,找到基本配置,点击进入
点击启用,如果编辑模式开启了。那就先把编辑模式关闭。
点击“修改配置”按钮,按照要求填写。
参数说明:
其中URL是开发者用来接收微信消息和事件的接口URL。
Token是开发者任意填写的,但是填写的要与代码中的一致。Token是用作签名(填写的Token会和接口URL中包含的Token进行对比,从而验证安全性),Token是为了用来验证发送我们的信息是否来自微信服务器。
第二步:验证服务器地址的有效性
开发者提供信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:
开发者通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,需要原样返回echostr参数的内容。这样就接入成功了,否则接入失败。
接入的代码如下:
//获得参数 signature nonce token timestamp echostr
$nonce = $_GET['nonce'];$token = 'imooc';$timestamp = $_GET['timestamp'];$echostr = $_GET['echostr'];$signature = $_GET['signature'];
//第一步:形成数组,然后按字典序排序
$array = array();$tmpArr= array($nonce, $timestamp, $token);sort($tmpArr,SORT_STRING);
//第二步:拼接成字符串,sha1加密 ,然后与signature进行校验
$str = sha1( implode( $tmpArr ) );
//第三步:获得加密后的字符串与signature对比
if( $str == $signature && $echostr ){//第一次接入weixin api接口的时候echo $echostr;exit;}
第三部:依据接口文档实现业务逻辑
验证URL有效性后即接入生效,成为开发者。
经历过第一次验证后,此后用户每次向公众号发送消息、或者产生自定义菜单点击事件时,开发者填写的服务器配置URL将得到微信服务器推送过来的消息和事件,然后开发者可以依据自身业务逻辑进行相应,例如回复消息等。
其他需要知道的:
1、 用户向公众号发送消息时,公众号收到的消息发送者是一个OpenID,每个用户对每个公众号有一个唯一的OpenID。
2、 微信公众号接口只支持80端口
五、 接受普通消息
当普通微信用户向微信公众账号发消息时,微信服务器将POST消息的XML数据发送到我们自己的服务器上,也就是我们在微信公众平台填写的URL
普通消息有:文本消息、图片消息、语言消息、视频消息、地理位置消息。
接受文本消息的XML格式
<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1348831860</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[this is a test]]></Content><MsgId>1234567890123456</MsgId></xml>
当微信服务器接受到用户发送的消息,微信服务器再把这条消息通过XML格式组装后,发送给我们的服务器。那么,如果我们想要回复文本消息。我们也需要把消息通过XML格式组装好发送给微信服务器,微信服务器再发送给用户。
回复文本消息的XML格式:
<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>12345678</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[你好]]></Content></xml>
实例代码:
注意,$toUser 是指将这个消息返回给谁。因为我们是将消息回复给用户的,所以
$toUser = $this->postObj->FromUserName;//获取到发送消息给微信公众号的用户openId
素材管理
新增临时素材
公众号经常需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是通过media_id来进行的。素材管理接口对所有认证的订阅号和服务号开发。通过本接口,公众号可以新增一些临时素材(即上传临时多媒体文件)。
请注意:
1、对于临时素材,每个素材(media_id)会在开发者上传或粉丝发送到微信服务器3天后自动删除(所以用户发送给开发者的素材,若开发者需要,应尽快下载到本地),以节省服务器资源。2、media_id是可复用的。3、素材的格式大小等要求与公众平台官网一致。具体是,图片大小不超过2M,支持bmp/png/jpeg/jpg/gif格式,语音大小不超过2M,长度不超过60秒(公众平台官网可以在文章中插入小于30分钟的语音,但这些语音不能用于群发等场景,只能放在文章内,这方面接口暂不支持),支持mp3/wma/wav/amr格式4、需使用https调用本接口。
调用接口地址
https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE
其他需要注意的问题:
1、 文件上传时通过CURL POST方式提交的,POST内容需要是数组格式。
2、 上传的文件必须先在你的服务器,然后获取到上传文件所在服务器的绝对路径。并且需要在绝对路径前面加上@以示区分。
3、 在Window服务上,路径分隔符为斜杠\,例子:@D:\soft\logo.jpg
而在Linux服务器上,路径分隔符为反斜杠/ 例子:@/tmp/logo.jpg
代码示例:
获取临时素材
公众号可以使用本接口从微信服务器下载临时的多媒体素材。
接口调用URL
http请求方式: GET,https调用
https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID
参数说明
参数 |
是否必须 |
说明 |
access_token |
是 |
调用接口凭证 |
media_id |
是 |
媒体文件ID |
返回说明
正确情况下的返回HTTP头如下:
HTTP/1.1 200 OK
Connection: close
Content-Type: image/jpeg
Content-disposition: attachment; filename="MEDIA_ID.jpg"
Date: Sun, 06 Jan 2013 10:20:18 GMT
Cache-Control: no-cache, must-revalidate
Content-Length: 339721
curl -G "https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID"
发送消息
发送客服消息
当用户主动发消息给公众号的时候(包括发送信息、点击自定义菜单、订阅事件、扫描二维码事件),微信将会把消息数据推送给开发者,开发者在一段时间内可以调用客服消息接口,通过POST一个JSON数据包来发送消息给普通用户,在48小时内不限制发送次数。此接口主要用于客服等有人工消息处理环节的功能,方便开发者为用户提供更加优质的服务。
调用的接口URL
https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN
具体参考文档http://mp.weixin.qq.com/wiki/7/12a5a320ae96fecdf0e15cb06123de9f.html
至于为什么需要客服接口呢?
因为微信公众平台一直没有推出手机客服端,除了程序的自动应答,运营者还需要一些人工回复,而人工回复目前一般都是通过电脑端操作,有了客服接口可以使运营者使用手机回复。
获取用户基本信息
在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号,同一用户的openid不同)。公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。
转自:http://www.cnblogs.com/sushaolian/p/5786698.html
微信开发(微信公众号)相关推荐
- php公众号获取code,微信开发系列——公众号内嵌H5页面获取code,拿到openID
如果在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 我们要进行授权,先要经过用户授权(静默授权和授权页弹出授权两种,具体看文档中scope解析)拿 ...
- 【微信开发】---- 公众号支付
公众号支付就是在微信里面的H5页面唤起微信支付,不用扫码即可付款的功能.做这个功能首先要明确的就是,只有和商户号mch_id匹配的appid才能成功支付.商户号在注册成功的时候就会将相关信息发送到邮箱 ...
- 微信开发:公众号屏蔽分享功能
前言 目前就用到啥更新啥..今天更新的是如何使用 JS 屏蔽分享和复制连接功能,这个算是比较常用的功能了,谨防敏感信息泄露,杠精别给我说截图,我不听! 概况 先大致的了解一下,所用到函数都是代 ...
- 微信开发 该公众号暂时无法提供服务,请稍候再试 解决办法
一.原因 1.网络中断 2.关注和取消过多 3.微信转发url服务器中的web项目异常 二.解决办法 1.正常连接网络 2.过一会再试 3.检查web项目,建议预留一个测试过的项目作为检查使用.
- 微信开放平台 公众号第三方平台开发 教程一 平台介绍
教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 ...
- java微信公众号支付开发平台_Java微信公众平台开发之公众号支付(微信内H5调起支付)...
官方文档 准备工作:已通过微信认证的公众号,必须通过ICP备案域名(否则会报支付失败) 借鉴了很多大神的文章,在此先谢过了 整个支付流程,看懂就很好写了 一.设置支付目录 在微信公众平台设置您的公众号 ...
- 如何找到靠谱的微信小程序,公众号H5开发外包,定制开发公司?
只要经营公司企业或多或少会有一些互联网开发外包项目,需要有长期稳定的靠谱开发外包公司来未公司提供长期软件的定制开发服务. 易企达作为H5.小程序开发公司站在一个专业开发小程序.公众号H5的角度上,为大 ...
- Java微信支付开发之公众号支付(微信内H5调起支付)
官方文档 准备工作:已通过微信认证的公众号,必须通过ICP备案域名(否则会报支付失败) 借鉴了很多大神的文章,在此先谢过了 整个支付流程,看懂就很好写了 一.设置支付目录 在微信公众平台设置您的公众号 ...
- jqueyr开发实现公众号上传永久视频页面--微信开发素材管理4
微信素材管理中, 上传永久视频素材时, 需要把视频的标题和介绍都填写完整, 为了与上一节课的表单结合, 需要实现当选择为永久视频时, 表单中需要出现视频标题,介绍的输入框, 无没有选择时, 需要隐藏上 ...
- 微信小程序公众号开发
微信小程序&公众号开发 一.什么是微信开发 二.微信开放平台 三.微信公众平台 四.小程序与公众号的区别 1. 用途不同 2. 运营方式不同 3. 操作方法不同 4. 用户体验不同(公众号操作 ...
最新文章
- p40 升级鸿蒙,等了这么久,我的P40终于可以升级鸿蒙系统了
- 模拟生态系统-自己编写生命
- PMBOK(第六版) PMP笔记——《十一》第十一章(项目风险管理)
- 吴恩达深度学习笔记(四)—— 正则化
- 仿Drinkspiration App的menu
- 内核终端判断,微信?QQ?ipad?IE?移动?Google?opera……
- idea项目application.properties文件注释显示unicode编码
- php任务奖励体系,phpwind7.5完备的积分体系
- MySQL之增删改查(以查为主)
- 用JSLint+Ant检验HTML代码
- html制作dnf,dnf怎么制作img文件 时装拼合教程
- 计算机辅助设计与制造实习周记,计算机辅助设计与制造专业毕业实习周记范文原创全套.pdf...
- openfoam学习心得---牛顿流体相关公式理解、转换与整理
- “学习金字塔理论”--了解,认知与实践
- 简单用python求平均值标准差
- Linux 查看显卡型号
- BokTalk块说全球首款基于区块链技术的即时通讯系统
- 照片上传分辨率低怎么改?图片分辨率dpi怎么调?
- RunApi在发送请求的时候添加Token
- Android 判断是否安装应用宝,并跳到应用中去