使用ruby on Rails进行微信公众平台开发(3)——自定义菜单的创建

基于ruby on rails 微信公众平台自定义菜单的创建

官方文档

http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html

在创建菜单之前,首先得获取access_token,access_token的有效期是7200s,所以,可以在rails中用cache将access_token缓存起来,缓存期小于7200s,每次从cache中获取access_token,这样每次取得的access_token都不会是失效的

1
2
3
4
5
6
7
8
9
10
11
12
13
  def get_access_token
    if Rails.cache.read("access_token").nil?
      uri = URI("https://api.weixin.qq.com/cgi-bin/token")
      params = {:grant_type=>"client_credential",:appid=>"your appid",:secret=>"your appsecret"}
      uri.query = URI.encode_www_form(params)
      res = Net::HTTP.get_response(uri)
      @access_token = JSON.parse(res.body)["access_token"]
      Rails.cache.write("access_token", @access_token, expires_in: 5.minutes)
      @access_token
    else
      @access_token = Rails.cache.read("access_token")
    end
  end

通过提交post请求创建菜单,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
  def addmenu
    post_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=#{get_access_token}"
    post_data = {
      :button=>[{
        :type=>'view',
        :name=>'城市景点',
        :url=> 'http://liuminhan.tunnel.mobi/city/route'},
        {
          :name=>'搜索',
          :sub_button=> [
            {
              :type=>'view',
              :name=> '查询城市',
              :url=> 'http://liuminhan.tunnel.mobi/city/index'
            },
            {
              :type=>'click',
              :name=>'附近酒店',
              :key=>'hotel'
            },
            {
              :type=>'view',
              :name=>'附近影院',
              :url=>'http://v.qq.com/'
            },
            {
              :type=>'click',
              :name=>'我的收藏',
              :key=>'V1001_GOOD'
            }]
        },
        {
          :type=>'click',
          :name=>'天气预报',
          :key=>'V1002_TODAY_WEATHER'
        }]
    }
    Typhoeus::Request.post(post_url, body: post_data.to_json)
    render nothing:true
  end

这样成功之后就会成功添加菜单.发起post请求的gem如下

gem “typhoeus”

Comments