微信公众号开发简要

微信公众号

参考微信公众号开发文档

使用内网穿透工具创建测试号,提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,将参数字典排序再SHA1加密后,与传来的签名对比即可验证是否来自于微信官方。注意:公众号接口必须满足:http+80或https+443。用户关注,扫码,发消息等都是通过对以上URL发送POST请求进行的,开发者通过返回值可以回复内容,为XML格式

准备工作

创建一个HttpUtils类,用来发送不同的请求并返回JSONObject类型。

创建一个官方接口类,把每个需要用到的接口封装为一个方法,出参为JSONObject类型,入参根据请求类型决定。

获取access_token

接口为https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

封装成方法,调用获取access_token后设定过期时间并存入缓存,过期时间:7200s。

创建菜单

接口为https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

该接口为post请求,需要传JSON结构的字符串,则可以先用面向对象的方式创建JSONObject,再转成字符串传入即可。

最外一层属性名为button,属性值为json数组(即为菜单数组),二级菜单需要放在名为sub_button的属性下。

消息接收与回复

使用XML文本来和用户进行交流。XML中包含了发送人,收件人,创建时间,事件,事件类型和内容等等标签,获取相应标签的内容便可以对消息进行处理,进行一些业务操作。为了更快捷的接收和生成XML字符串,创建一个消息类,属性与XML标签对应,并包含不同类型的XML字符串生成方法(为了使对象功能尽量单一化,可能需要创建一些其他类来与消息类进行互动)。

用户通过微信服务器发来互动时,首先利用SAXBuilder将得到的XML字符串转化成DOM对象,再转化成消息类,然后就可以调用消息类的get方法进行各种判断了。首先进行类型判断,若是event类型,则对eventType进行判断,进入关注和取消关注事件;若是text,则获取内容,等等。return可以将XML字符串返回,微信服务器解析后将把内容发给相应的用户,return空字符串则无事件。

//text类型
<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>12345678</CreateTime>
  <MsgType><![CDATA[text]]></MsgType>
  <Content><![CDATA[你好]]></Content>
</xml>
//常用的图文消息
<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>12345678</CreateTime>
  <MsgType><![CDATA[news]]></MsgType>
  <ArticleCount>1</ArticleCount>
  <Articles>
    <item>
      <Title><![CDATA[title1]]></Title>
      <Description><![CDATA[description1]]></Description>
      <PicUrl><![CDATA[picurl]]></PicUrl>
      <Url><![CDATA[url]]></Url>
    </item>
  </Articles>
</xml>

获取用户基本信息

获取接口为GET请求:

https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

其中的OPENID即为用户通过微信服务器与公众号互动时发来的XML中的FromUserName值,因此,通过消息互动即可获取用户的一般信息并存入数据库

用户网页授权

用户进入公众号后点击链接进入网页时,若需要获取用户信息,则该网址需要官方接口进行重定向,同时指定scope参数,将决定只获取用户openid还是更多信息(用户授权后将可以通过openid获取更多信息)。获取详细信息的接口如下:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

其中的redirect_uri需要用URLEncoder进行处理。用户同意授权后,页面跳转至指定地址并附带code参数,再通过以下接口获取临时token,接口如下:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

返回如下:

{ 
  "access_token":"ACCESS_TOKEN",
  "expires_in":7200,
  "refresh_token":"REFRESH_TOKEN",
  "openid":"OPENID",
  "scope":"SCOPE" 
}

此时若scope为snsapi_userinfo,便可以通过以下接口获取更多用户信息了

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

使用JS-SDK

引入js文件:http://res.wx.qq.com/open/js/jweixin-1.6.0.js

稳定版:http://res2.wx.qq.com/open/js/jweixin-1.6.0.js

所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用。首先获取jspapi_ticket,接口如下:

https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

此处的access_token为全局唯一调用凭据,区别于用户授权时的token。返回:

{
  "errcode":0,
  "errmsg":"ok",
  "ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
  "expires_in":7200
}

拿到ticket后,再获取一个随机字符串,一个时间戳以及当前网页url(由前端传来,去除#后面内容),字段名按字典序(如下)排列:

jsapi_ticket=ticket&noncestr=Wm3WZYTPz0wzccnW&timestamp=1414587457&url=http://mp.weixin.qq.com?params=value

对该字符串进行SHA1加密得到签名,并将签名,随机字符串,APPID和时间戳传递给前端注入配置信息。方法如下:

wx.config({
  debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过				log打出,仅在pc端时才会打印。
  appId: '', // 必填,公众号的唯一标识
  timestamp: , // 必填,生成签名的时间戳
  nonceStr: '', // 必填,生成签名的随机串
  signature: '',// 必填,签名
  jsApiList: [] // 必填,需要使用的JS接口列表
});
分享接口

常用的如下

updateAppMessageShareData:分享给朋友或QQ

updateTimelineShareData:分享到朋友圈

以分享给朋友为例,自定义“分享给朋友”及“分享到QQ”按钮的分享内容:

wx.ready(function () {   //需在用户可能点击分享按钮前就先调用
  wx.updateAppMessageShareData({ 
    title: '', // 分享标题
    desc: '', // 分享描述
    link: '', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
    imgUrl: '', // 分享图标
    success: function () {
      // 设置成功
    }
  })
});

若某网页的JS中有这段代码,则该网页被分享时生效

生成带参数的二维码

临时二维码获取接口为:

https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN

此接口为POST请求,需附带参数(actionname可以指定二维码参数为数字类型或字符串类型)

{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}

{"expire_seconds": 604800, "action_name": "QR_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}

若把以上的scene_*的值设为转发者id,当该码被扫时通过扫码事件可以绑定被扫码者与扫码者的关系。

返回:

{
 "ticket":"gQH47joAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2taZ2Z3TVRtNzJXV1Brb3ZhYmJJAAIEZ23sUwMEmm",
 "expire_seconds":60,
 "url":"http://weixin.qq.com/q/kZgfwMTm72WWPkovabbI"
}

拿到ticket,即可获取对应二维码图片:

https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET,ticket需要进行URLEncode

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值