ruby微信开发介绍

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


从上图可以看出订阅号的功能其实很弱的,如果没有认证的话,连自定义菜单都没有,尼玛认证还要出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

未完。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,947评论 18 139
  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,224评论 22 257
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,152评论 6 13
  • 开发前首先我们要知道一些概念 各公众号区别:1、订阅号:为媒体和个人提供一种信息传播方式,主要偏于为用户传达资讯(...
    CoderZS阅读 3,227评论 1 19
  • 利刃刻画出来的脸庞 始终不带笑容 你看不到血色和温度 把心解剖 混合在泥土里搅拌后 送给狗 它闻一闻 摇尾不回头
    关山克阅读 199评论 0 3