程序员

ruby微信开发介绍

2014-06-16  本文已影响2852人  杜小龙

首先我们要知道微信公众账号分两种,订阅号和服务号,它们的区别如下图:


从上图可以看出订阅号的功能其实很弱的,如果没有认证的话,连自定义菜单都没有,尼玛认证还要出300块,还不包过!!!

不过,这对我们学习微信公众账号开发并没有什么影响,因为微信提供一个测试账号供我们调试。

首先我们先进入开发者模式先,这需要我们有一个独立的服务器。
然后进行配置

url:www.xxx.com/weixin
token: abcd

然后微信服务器将发送GET请求到填写的URL上,GET请求携带四个参数:

signature    微信加密签名
timestamp    时间戳
nonce    随机数
echostr

加密/校验流程如下:

  1. 将token、timestamp、nonce三个参数进行字典序排序

  2. 将三个参数字符串拼接成一个字符串进行sha1加密

  3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
    代码如下:

    def check_weixin_legality
    array = [Rails.configuration.weixin_token, params[:timestamp], params[:nonce]].sort
    render :text => "Forbidden", :status => 403 if params[:signature] != Digest::SHA1.hexdigest(array.join)
    end

然后我们通过这个www.xxx.com/weixin 接口就可以做很多事情了,根据你发送的不同的文字消息可以返回不同的消息。比如你发,新闻,然后就返回一条图文信息,发音乐,然后就返回一首歌,这个在方法里面进行判断就好了。

def text_message
  content = params[:xml][:Content]
  case content
  when "音乐"
    render xml: music_reply_message
  when "新闻"
    render xml: news_reply_message
  end
end

然后自定义菜单的实现,这需要微信提供的APPID 和APPSECRET
接口调用请求说明

http请求方式: GET

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

由于这里的token有个凭证有效时间,然后我们如果每次访问都去获取这个token的话,那实在是太浪费了,而且微信对于token的每天的获取次数是有限的。这个的话用cache来解决。

def get_access_token
  if Rails.cache.read("access_token").nil?
    params = {grant_type: "client_credential", appid:Rails.configuration.weixin_appid, secret: Rails.configuration.weixin_secret}
    response = RestClient.get 'https://api.weixin.qq.com/cgi-bin/token', {params: params}
    errcode = (JSON.parse response)["errcode"]
    @access_token = (JSON.parse response)["access_token"]
    Rails.cache.write("access_token", @access_token, expires_in: 5.minutes)
  else
    @access_token = Rails.cache.read("access_token")
  end
end

未完。。。

上一篇 下一篇

猜你喜欢

热点阅读