微信API学习笔记

一:开发者必读
1-1.开发者必读-》接入指南
    填写服务器配置中的URL是开发者用来接收微信消息和事件的接口URL,
    Token由开发者任意填写,用作生成签名,与URL中的Token进行对比,验证安全性
    EncodingAESKey由开发者手动/随机生成,用作消息体加解密密钥
    加密方式有明文(默认),兼容,安全,如果是兼容和安全需要加入关加密代码
    验证服务器地址有效性:提交信息后,微信服务器会发送GET请求到URL(所以,验证有效性只需要GET请求),GET请求带四个参数
        signature是一个加密签名,包含token,timestamp,nonce
        timestamp是一个十位数的时间戳(我从后台数据看到的...)
        nonce是一个随机数...
        echostr是随机字符串,也是一堆数字...
GET /XXX?signature=bff2ed90ee718d5bc3ed93cec30880c075de25ad&echostr=8615966149839945653&tamp=1440727061&nonce=342668184 200 7.732 ms - 19
GET /XXX?signature=ce456b24e4172937aece193df42dcb522bfbbf3b&echostr=649118341828428333&tamp=1440727085&nonce=942045358 200 2.910 ms - 18
GET /xxx?signature=b234183a6a37ead31ec9bce4044221c54786e9ef&echostr=3458202256967459986&timestamp=1440727186&nonce=1862388428 200 1.056 ms - 19
    接入的时候要对signature进行校验,准确就返回echost的内容,校验规则就是 ,把token,timestamp,nonce进行字典序排序,拼接起来后进行sha1加密,再与signature比对
    成为开发者以后,只有认证后才能拥有更多接口的权限,用户向公众号发生交互的时候(暂时觉得都是POST请求),微信服务器会把请求封装成XML推送到自己的URL上,这个XML中包含一个发送者的OpenID(其实就是FromUserName),是微信号加密后的结果。微信只支持80端口....
    
    微信开放平台:    为移动应用,网站,公众账号提供以跨平台的统一登陆账号,提供微信的接口
        移动应用:分享收藏,支付,登陆,智能接口(图像识别,语音识别,语音合成,语音理解)
        网站应用:网站登陆,智能接口(语义接口)
        公众账号:自身公众号平台的接口
        公众号第三方平台开发:(研究中....)
    
  1-2.开发者必读-》开发者规范
    开发公众账号时,需要注意每个接口的规范限制,调用频率,还需要注意敏感信息的使用规范
   其他的没啥,就是要在用户同意的情况下,获取数据,并且保密,不能超出运营以及功能实现范围,不能传播剩下自己看吧,最后是腾讯是最NB的
    
1-3报警排查(内容比较多,这个后面再整理因为还处在开发期,调用次数不算多..)
    
二:开发者工具
    2-1    接口测试号申请:就是申请一个接口的测试号,配置RUL等相关东西,然后先开发,到时候再转回公众号
    2-2    接口在线调试:就是模拟用户的操作,向服务器交互

三:获取接口调用凭证
    3-1:获取access token:
            access_token是公众号全局唯一票据,调用(某些功能接口)接口都需要用到,存储至少要512个字符,有效期2小时,需要定时刷新,重复获取会替代上次获取的..关于如何获取access_token可以参考开发文档,保持access_token可以参考柳峰前辈的 http://blog.csdn.net/lyq8479/article/details/25076223
     3-2:获取微信的ip地址:(暂时想到,用来限定当前请求必须是来至微信,否则就不响应)
 
四:接收消息:
     4-1:公众号接收用户发送的消息过程是:客户--》微信服务器--》开发者服务器-->>微信服务器---》客户,
            传递的格式是:POST消息的XML数据包
            微信服务器5秒内收不到开发者服务器返回的响应,就会重新发请求,一共三次,开发者可以通过返回空字符串,告诉微信服务器不做处理(YY一下场景是 黑名单,不鸟这个人...嘿嘿!),这样微信服务器就不会再发请求          
            推送到公众号的数据包类型有:文本,图片,语音,视频,小视频,地理位置,连接消息
     4-2:    接收事件推送
              用户的某些操作会使用事件推送的形式通知URL中,并且这些事件有的是可以回复,有的是不可以
              类型:
                    关注/取消关注:就是POSt一个xml到URL,判断Event的类型是subscribe(订阅)、unsubscribe(取消订阅),然后触发某些操作
                    扫描带参数二维码:(已经关注和未关注,开发者接收到的XML是不一样的...)
                            未关注用户会变成关注,然后发送关注事件给开发者,关注后就继续发二维码的参数值给开发者
                             已关注,就直接带值给开发者
                    上报地理位置:当开发者提出需要用户的位置信息,用户同意后,每次进入公众号都会上报地理位置,或者每五秒上报,推送给开发者
                     点击自定义菜单:直接把点击事件推送给开发者 详细分类:http://mp.weixin.qq.com/wiki/9/981d772286d10d153a3dc4286c1ee5b5.html
 

五:发送消息
    5-1:被动回复消息:  
        从XML中解析出相应的数据,然后返回特定的xml格式给微信服务器,微信服务器会推送给客户;
        消息响应支持有:文本,图片,图文,语音,视频,音乐
        如果5秒内不能处理并且回复,必须做出处理:返回""或者success
        如果5秒内没有任何内容回复,或者回复异常数据,微信服务器就会推送“无法提供服务”给用户

    5-2:客服接口:(这个有点意思)
            就是用户主动发消息给公众号的时候,微信将会吧消息数据推送给开发者,开发者在一段时间内可以调用客服消息接口,通过POST一个JSON数据包无限次发送消息给客户,管理员可以通过一些接口对客服进行管理
    
    5-3:群发接口
        接口调用限制是100次,但是群发的话,订阅号每天只有一次,服务号每月4次,企业号无限制,所以这个调用限然卵
        具体调用方式看文档..
    5-4: 模板消息接口 :
            调用方式看文档就好
            总结一下消息:
            目前允许发的模板消息:
                1.服务即时通知类消息模板
                2. 未服务即时通知类消息模板
                        2.1 每月推送频率固定的模板消息
                        2.2 推送频率不固定的消息模板消息
                3.服务后未即时推送消息模板
            目前不允许发的模板消息:
                 1.涉嫌广告行销类消息模板
                 2.发送频率过高,有骚扰用户倾向消息模板
                 3.涉及红包,卡券,优惠券,代金券,会员卡消息模板

六:消息加解
    6-1.方案概述:
            公众账号主动调用API是不会影响的,被动回复用户消息时,才需要进行消息加解密。
            包括:
                新增消息体签名,用于公众平台和公众账号消息体的正确性
                微信公众号与设备之间消息加密
                公众账号对密文消息回复也要加密
           
            启用加密功能后,URL会新增两个参数(加密类型和消息体签名),加密的算法采用AES
            加解密模式:
                明文:你懂得...就是没做任何处理,直接收发
                兼容:同时包括明文和密文,消息包长度增加;公众号可以回复明文或密文
                安全:收发都加密
    EncodingAESKey:就是加解密用到的密钥

七:素材管理
        7-1:新增临时素材
                临时素材只会保存在微信服务三天,三天后会删除
                临时素材在格式,大小上面有限制,微信文档上有两处说明但是感觉有冲突;
                需要使用https调用


        7-2:获取临时素材(这个没啥说的)
        7-3: 新增永久素材
                  就是长时间保存的素材,素材被新增后,将URL返回给开发者,该URL只能在腾讯系域名内使用
                  永久素材的数量,格式类型,大小都有限制           
        7-4:获取永久素材(自己看啦...)
        7-5 :删除素材
                    通过media_id来删除,不能删除临时素材
        7-6 :更新素材 (调接口...)
        7-7~7-8(获取素材总数,素材列表) 没啥的...
                       

八:用户管理
        8-1:用户分组管理
                一个公众账号,最多支持创建100个分组,其他的看文档
        8-2:设置用户备注名(调接口)
        8-3:获取用户基本信息
                一个公众号中的每个用户(openid)都是唯一的,一个用户对于不同的公众号(openid)是不同的,每个用户对每个公众号的OpenId是唯一的
                批量获取用户信息,只能获取100条
        8-4:获取用户列表:
                用于获取账号的关注者列表,由一串OpenID组成。一次性最多拉去10000各关注者的OpenID
        8-5:获取用户地理位置:(自己看吧)
        8-6:网页授权获取用户基本信息
                在微信客户端访问第三方页面,通过微信网页授权机制获取用户基本信息,进而实现业务逻辑
                网页授权回调域名的说明:
                    1.在请求网页授权之前,开发者需要先到公众平台官网中的开发者中心配置授权回调域名(仅仅是字符串,不需要协议头)。
                    2.授权回调域名配置规范为全域名
                网页授权的两种scope的区别说明:
                    1.以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页面。
                    2.snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息。但这种授权需要用户手动同音,并且由于用户同意过,所以无需关注,就可在授权后获取该用户的基本信息。
                    3.用户管理类--》获取用户基本信息接口 是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户openId来获取用户基本信息。这个接口,包括其他微信接口,都需要用户关注后,才能调用
                关于网页授权access_token和普通access_token的区别
                    1.微信网页授权是通过OAuth2.0机制实现的,在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证(网页授权access_token),必须通过授权后,才可以进行授权接口调用
                关于UnionID机制
                    1、请注意,网页授权获取用户基本信息也遵循UnionID机制。即如果开发者有在多个公众号,或在公众号、移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。
        2、UnionID机制的作用说明:如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为同一用户,对同一个微信开放平台下的不同应用(移动应用、网站应用和公众帐号),unionid是相同的。
        关于特殊场景下的静默授权
        1.以snsapi_base为scope的网页授权,就静默授权,用户无感知,
        2.对于已关注公众号的用户,如果用户从公众号的会话或自定义菜单进入公众号的网页授权页,即使scope为snsapi_userinfo,也是静默授权,用户无感知

      网页授权流程:
        1.引导用户进入授权页面授权,获取code
        2.通过code换取网页授权access_token,可以刷新网页授权access_token
        3.通过网页授权access_token和openid获取用户基本信息
                   
九:自定义菜单管理
    9-1:自定义菜单创建
                最多3个1级菜单,二级菜单最多5个,一级菜单最多4各汉字,二级菜单最多7个汉字,多出来以...代替,取消关注再关注能快速看到效果
                菜单类型:
                    click: 点击事件 会推送一个event结构给开发者,开发者可以通过key值与用户进行交互
                    view:跳转url   微信将会打开开发者按钮填写的网页url
                    scancode_push:扫码事件 会打开扫一扫工具,完成扫码操作,并发送结果给开发者
                    pic_sysphoto: 弹出系统拍照,拍摄完毕会把结果传送给开发者
                    pic_photo_or_album:弹出拍照和相册发图 (在下一个页面二选一)                    
                    pic_weixin:弹出微信相册发图器,选择后发给开发者
                    localtion_select:弹出地理位置选择器
                    media_id:下发消息 将开发者填写的素材下发给用户
                    view_limited:跳转图文消息URL:将打开开发者按钮中填写的永久素材ID对应的图文消息URL

    9-2~9-3 : 查询和删除就自己看咯
    9-4:自定义菜单事件推送: 就是用户点击菜单后, 开发者可以获取到消息推送
    9-5:获取新自定义菜单配置接口:自己看咯

十:账号管理
        10-1生成带参数的二维码:
               二维码的类型:
                    临时二维码:保存7天,会过期,主要用于账号绑定等不要求二维码永久保存的业务场景
                    永久二维码:是不会过期的,主要用于账号绑定,用户来源统计等场景

        10-2 长链接转段连接接口
                开发者用于生成二维码的原连接太长导致扫码速度和成功率下降,将原长连接通过此接口转成段连接在生成二维码将提高扫码速度和成功率

    十一:微信JS-SDK说明文档(就是在网页通过微信调用拍照,选图,语音等手机系统功能,同时还可以直接使用微信分享,扫一扫,卡券,支付等微信特有的能力)   
                这个东西太多了,后面补一张
        
           
















                
                







    

    

微信API学习笔记

上一篇:一款基于微客服的仿微信的聊天软件


下一篇:生成微信公众号关注二维码