zoukankan      html  css  js  c++  java
  • 微信开发(微信公众号)

    一、 准备工作

    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:softlogo.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

  • 相关阅读:
    链表--判断一个链表是否为回文结构
    矩阵--“之”字形打印矩阵
    二叉树——平衡二叉树,二叉搜索树,完全二叉树
    链表--反转单向和双向链表
    codeforces 490C. Hacking Cypher 解题报告
    codeforces 490B.Queue 解题报告
    BestCoder19 1001.Alexandra and Prime Numbers(hdu 5108) 解题报告
    codeforces 488A. Giga Tower 解题报告
    codeforces 489C.Given Length and Sum of Digits... 解题报告
    codeforces 489B. BerSU Ball 解题报告
  • 原文地址:https://www.cnblogs.com/crazycode2/p/6805336.html
Copyright © 2011-2022 走看看