微信开发详细教程

一、 准备工作

a) 账号

  1. 在SAE上面注册一个账号。
  2. 在微信公众号开发平台地址 https://mp.weixin.qq.com  注册一个微信公众号。

注意:1、个人只能申请到个人类型的订阅号。

2、微信公众号认证需要300大洋。

  1. 申请公众号测试号地址

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获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。

时间: 2024-10-12 19:43:36

微信开发详细教程的相关文章

微信开发系列教程:(1)订阅号和服务号深入分析

微信开发系列教程,将以一个实际的微信平台项目为案例,深入浅出的讲解微信开发.应用各环节的实现方案和技术细节. 原创内容,欢迎转载,转载请注明出处. 首先在第1章节中,我们先理清什么是订阅号,什么又是服务号,以及两者的关键性区别. 订阅号和服务号统称为微信公众号. 订阅号强调媒体资讯属性,为会员提供信息订阅,适用于新闻传媒类企业.订阅号从某种意义上来讲,是拿来做内容的,如果你没有原创作品,对用户没有任何意义. 服务号强调服务和应用属性,旨在为会员提供服务并与之互动.支持所有微信高级接口,几乎所有的

微信后台开发第一步:nodeJS+express接入微信后台详细教程

博文由  水车  编写 欢迎各位指正,转载请把链接带上! 前期准备工作 1:如果你没有服务器,那你需要一个内网映射工具:我用的是<花生壳>,花生壳在实名认证是需要8RMB的认证费,之后就可以永久使用了,并且支持80端口映射, 注:花生壳在免费申请时要申请内网,不要申请公网. 2:nodeJS 最新版本,安装教程自行上网搜索 3:一个注册号的微信公众号,自行申请,这里不做说明,网上教程已经比较成熟: 花生壳使用教程: 下载地址: http://hsk.oray.com/download/ 安装:

微信开发基础教程

微信开发学习笔记---- 1.正确填写服务器配置信息 其中Url为我们的要接收并处理微信服务器发送的消息的一般处理程序地址,如:http://sadi.qrenlei.cn/WXTest.ashx Token是一个开发者自定义的验证字符串,可任意填写. 点击提交前,需要把咱们的包含一般处理程序的网站发布到服务器上. 2.一般处理程序的编写 if (Request.HttpMethod.ToLower() == "get") { Validate(); } public void Val

微信开发入门教程

转自:http://www.cnblogs.com/txw1958/p/wechat-tutorial.html 本系列教程将引导你完成如下任务: 创建新浪云计算平台应用 启用微信公众平台开发模式 了解数据收发原理及消息格式 开发实现微信天气预报功能 创建新浪云计算应用 申请账号 我们使用SAE新浪云计算平台作为服务器资源,并且申请PHP环境+MySQL数据库作为程序运行环境. 申请地址:http://sae.sina.com.cn/,使用新浪微博账号可以直接登录SAE,登录后SAE将赠送500

微信公众服务号申请、认证(开通支付)-微信开发图文教程

微信公众服务号申请 百度图文教程 http://jingyan.baidu.com/article/e9fb46e190a51a7521f766d7.html 微信服务号认证(开通支付) 百度图文教程 http://jingyan.baidu.com/article/cd4c2979cd8369756e6e60e0.html 比百度更详细的教程 http://www.ivlian.com/index!newsDetail.action?id=40 版权声明:本文为博主原创文章,未经博主允许不得转

iOS 微信开发详细流程

这个文章写的 比较不错 借此转发. SDK下载:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1 APP端开发步骤说明:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_5 SDK接入 服务器签名版本 官方已经是建议使用服务器签名来接入微信支付,实际上从安全上考虑,确实是每个客户端不应该知道RAS密钥,也不需要每个客户端都写一遍签名的算法. 服务端接入流程文档:h

baidu patchrom项目开发详细教程(Being updated)

linux64位android开发环境baidu patchrom项目开发 by: doswhy [百度云ROM官方项目组修订]by: colinchen 学习修改 ************************************************************************************************************************************************************ 1 准备工作 下载所

miui patchrom项目开发详细教程(Being updated)

linux64位android开发环境miui patchrom项目开发 by: colinchen 整合修改[本人正在学习中,一直更新] ************************************************************************************************************************************************************ 1 准备工作 下载所需软件(均为官方原版,只是

微信公众号开发系列教程一(调试环境部署)

原文:微信公众号开发系列教程一(调试环境部署) 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) 微信公众号火了好一阵子了,笔者算是比较早接触微信公众号开发的了,大概做了一年半了,从最开始的到处网上找demo到现在也开发一些公众号.园子里关于微信开发的教程已经数不胜数了,我也准备来凑凑热闹.一是梳理下这段时间开发的经验,二是希望能帮到想做微信开发的小伙伴们,希望大大神们吐槽的时候悠着点,