微信开发(准备工作简版)


1.准备工作

1.1 首先需要一个url地址,用来接收相关的数据
1.2 注册开发者账号进行开发(可用公众平台测试账号)

1.3 appid,第三方用户唯一凭证(你的AppID)

1.4 secret,第三方用户唯一凭证密钥,Appsecret

1.3 需要access_token,access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_tokenaccess_token的存储至少要保留512个字符空间。access_token的有效期为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
2.获取相关数据、配置、验证状态
  2.1获取access_token:通过

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的AppID&secret=你的Appsecret 来获取

2.2 验证服务器地址的有效性(确保信息来源为微信服务器)

2.2.1tokentimestampnonce进行字典序排序

2.2.2将三个参数拼成一个字符串,并进行sha1加密

2.2.3开发者获得加密后的字符串可与signature对比,进行验证该请求来源于微信,如果验证结果为相等,则请返回echostr字符串、

3.相关的下载地址

3.1多媒体文件下载地址

http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID

1)ACCESS_TOKE:你获取的access_token

2)MEDIA_ID:媒体文件ID

4.开始开发——用户通过post请求发送XMl数据包到Url地址

通用XML参数:

参数

描述

ToUserName

开发者微信号

FromUserName

发送方帐号(一个OpenID)

CreateTime

消息创建时间 (整型)

MsgType

消息类型(text、image、voice)

MsgId

消息id,64位整型

4.1获取文本信息

XML格式:

 

 

 

 1348831860

 

 

 1234567890123456

 

参数

描述

MsgType

text

Content

为用户所发送的消息

4.2获取图片信息

XML数据格式:

  

 

 

 1348831860

 

 

 

 1234567890123456

 

参数

描述

MsgType

image

PicUrl

可根据该图片地址查看该图片

MediaId

图片消息媒体id,可以调用多媒体文件下载接口拉取数据。

4.3获取语音消息

XML数据格式:

1357290913

1234567890123456

参数

描述

MsgType

语音为voice

MediaId

语音消息媒体id,可以调用多媒体文件下载接口拉取数据。

Format

语音格式,如amr,speex等

4.4获取视频消息

XML数据格式:

1357290913

1234567890123456

参数

描述

MsgType

语音为video

MediaId

视频消息媒体id,可以调用多媒体文件下载接口拉取数据。

ThumbMediaId

视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据.

4.5获取小视频的消息

XML数据格式:

1357290913

1234567890123456

参数

描述

MsgType

小视频为shortvideo,

MediaId

视频消息媒体id,可以调用多媒体文件下载接口拉取数据。

ThumbMediaId

视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。

4.6获取地理位置消息

XML数据格式:

1351776360

23.134521

113.358803

20

1234567890123456

 

参数

描述

MsgType

location

Location_X

地理位置维度

Location_Y

地理位置经度

Scale

地图缩放大小

Label

地理位置信息

4.7获取连接消息

XML数据格式:

1351776360

<![CDATA[<span style="font-family: 宋体">公众平台官网链接</span><span style="font-family: Calibri">]]></</span>Title></p> <p><Description><![CDATA[<span style="font-family: 宋体">公众平台官网链接</span><span style="font-family: Calibri">]]></</span>Description></p> <p><Url><![CDATA[url]]></Url></p> <p><MsgId>1234567890123456</MsgId></p> <p></xml> </p> <h3><strong> </strong></h3> <table align="center"> <tbody> <tr> <td valign="center" width="179"> <p align="center"><strong>参数</strong></p> </td> <td valign="center" width="381"> <p align="center"><strong>描述</strong></p> </td> </tr> <tr> <td valign="center" width="179"> <p>MsgType</p> </td> <td valign="center" width="381"> <p>消息类型,link</p> </td> </tr> <tr> <td valign="center" width="179"> <p>Title</p> </td> <td valign="center" width="381"> <p>消息标题</p> </td> </tr> <tr> <td valign="center" width="179"> <p>Description</p> </td> <td valign="center" width="381"> <p>消息描述</p> </td> </tr> <tr> <td valign="center" width="179"> <p>Url</p> </td> <td valign="center" width="381"> <p>消息链接</p> </td> </tr> </tbody> </table> <p>5.消息排重(响应微信服务器)</p> <p><span style="font-family: 宋体">微信在转发消息到我们后台服务的时候,如果</span>5<span style="font-family: 宋体">秒钟之内没有返回数据,微信就会立即重新转发消息,如此三次。如果三次过后仍然没有返回数据,则微信公众号会出现“该公众号暂时无法提供服务,请稍后再试的错误”</span><span style="font-family: Calibri">,</span><span style="font-family: 宋体">为了避免微信重复发起消息,也为了避免数据重复导致数据混乱,对微信转发的消息进行排重处理:</span></p> <p>1.<span style="font-family: 宋体">新建类</span><span style="font-family: Calibri">BaseMsg</span><span style="font-family: 宋体">,有三个属性分别是</span><span style="font-family: Calibri">FromUser</span><span style="font-family: 宋体">,</span><span style="font-family: Calibri">MsgFlag</span><span style="font-family: 宋体">,</span><span style="font-family: Calibri">CreateTime</span><span style="font-family: 宋体">。</span></p> <p>2.<span style="font-family: 宋体">创建个静态列表</span><span style="font-family: Calibri">_queue</span><span style="font-family: 宋体">,用来存储消息列表,列表的类型是</span><span style="font-family: Calibri">List<BaseMsg>.</span></p> <p>3.<span style="font-family: 宋体">在处理微信消息体前,首先判断列表是否实例化,如果没有实例化则实例化,否则判断列表的长度是否大于或等于</span>50<span style="font-family: 宋体">(这个可以自定义,用处就是微信并发的消息量),如果大于或等于</span><span style="font-family: Calibri">50</span><span style="font-family: 宋体">,则保留</span><span style="font-family: Calibri">20</span><span style="font-family: 宋体">秒内未响应的消息(</span><span style="font-family: Calibri">5</span><span style="font-family: 宋体">秒重试一次,总共重试</span><span style="font-family: Calibri">3</span><span style="font-family: 宋体">次,就是</span><span style="font-family: Calibri">15</span><span style="font-family: 宋体">秒,保险起见写</span><span style="font-family: Calibri">20</span><span style="font-family: 宋体">秒)。</span></p> <p>4.<span style="font-family: 宋体">获取当前消息体的消息类型,并根据</span>_queue<span style="font-family: 宋体">判断当前消息是否已经请求了。如果是事件</span>则返回空字符串<span style="font-family: 宋体">。如果是普通消息则保存</span>MsgFlag<span style="font-family: 宋体">。</span></p> </div> <!--conend--> <div class="p-2"></div> <div class="arcinfo my-3 fs-7 text-center"> </div> <div class="p-2"></div> </div> <div class="p-2"></div> <!--xg--> <div class="lbox p-4 shadow-sm rounded-3"> <div class="boxtitle"><h2 class="fs-4">相关</h2></div> <hr> <!----> <!----> </div> <!--xgend--> </div> <div class="col-lg-3 col-12 p-0 ps-lg-2"> <!--box--> <!--boxend--> <!--<div class="p-2"></div>--> <!--box--> <div class="lbox p-4 shadow-sm rounded-3"> <div class="boxtitle pb-2"><h2 class="fs-4"><a href="#">标签</a></h2></div> <div class="clearfix"></div> <ul class="m-0 p-0 fs-7 r-tag"> </ul> <div class="clearfix"></div> </div> <!--box end--> </div> </div> </div> </main> <div class="p-2"></div> <footer> <div class="container-fluid p-0 bg-black"> <div class="container p-0 fs-8"> <p class="text-center m-0 py-2 text-white-50">一品网 <a class="text-white-50" href="https://beian.miit.gov.cn/" target="_blank">冀ICP备14022925号-6</a></p> </div> </div> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?6e3dd49b5f14d985cc4c6bdb9248f52b"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </footer> <script src="/skin/bootstrap.bundle.js"></script> </body> </html>