weixin_authorize Ruby 下訪問微信高級 API

weixin_authorize封裝了微信的高級 API,供各位 Rubist 享用。php

安裝

在你的 Gemfile加入:git

gem 'weixin_authorize'

或者github

gem 'weixin_authorize', git: "https://github.com/lanrion/weixin_authorize.git"

而後 bundle 便可。redis

基本使用

初始化 WeixinAuthorize::Client 的實例,傳入公衆帳號的app_id跟app_secret便可。數據庫

# 建立一個實例
$client ||= WeixinAuthorize::Client.new(ENV["APPID"], ENV["APPSECRET"])

爲了不用戶填寫app_id和app_secret出錯,請務必在保存或者更新操做時,對其作驗證。segmentfault

$client.is_valid? # return true or false

高級API調用

獲取用戶管理信息

分組管理接口

  • 建立分組:

    group = $client.create_group("test")

  • 查詢全部分組:

    groups = $client.groups

  • 查詢用戶所在分組:

    group = $client.get_group_for(ENV["OPENID"])

  • 修改分組名:

    group = $client.update_group_name(ENV["OPENID"], "new_group_name")

  • 移動用戶分組:

    group = $client.update_group_for_openid(ENV["OPENID"], "to_groupid")

自定義菜單

發送客服信息

  • 發送文本信息:

    $client.send_text_custom(to_user, content)

  • 發送圖片信息:

    $client.send_image_custom(to_user, media_id)

  • 發送語音消息:

    $client.send_voice_custom(to_user, media_id)

  • 發送視頻消息:

    $client.send_video_custom(to_user, media_id, options)

  • 發送音樂消息:

    $client.send_music_custom(to_user, media_id, musicurl, hqmusicurl, options)

  • 發送圖文消息:

    $client.send_news_custom(to_user, articles=[])

生成帶參數的二維碼

  • 建立臨時二維碼

    $client.create_qr_scene("123")

  • 建立永久二維碼

    $client.create_qr_limit_scene("1234")

  • 經過ticket換取二維碼, 直接訪問返回的連接便可顯示!

    $client.qr_code_url("ticket_example_value")

上傳下載多媒體文件

上傳多媒體文件

上傳的多媒體文件有格式和大小限制,以下:

  • 圖片(image): 128K,支持JPG格式
  • 語音(voice):256K,播放長度不超過60s,支持AMR\MP3格式
  • 視頻(video):1MB,支持MP4格式
  • 縮略圖(thumb):64KB,支持JPG格式

媒體文件在後臺保存時間爲3天,即3天后media_id失效。

$client.upload_media(image_file_or_path, "input_media_type")

目前1.5.9(包括1.5.9)之後, 支持任何格式與任何URL形式的圖片上傳. 你能夠指定本地圖片或者遠程圖片, 也能夠使用不一樣格式的好比png, ico 等格式, 或者直接本身 File.new 出來的圖片.

下載多媒體文件

注意:媒體文件在後臺保存時間爲3天,即3天后media_id失效。

$client.download_media_url(media_id)

返回一個Media遠程下載連接,注意:包含access_token值,請務必在action層作好安全性,下載請第三方開發者自行根據Paperclip或者Carrierwave來保存。

**多個公衆帳號狀況下強烈建議使用 Redis來保存access_token***

在微信官網中,http://mp.weixin.qq.com/wiki/index.php?title=獲取access_token

access_token是公衆號的全局惟一票據,公衆號調用各接口時都需使用access_token。正常狀況下access_token有效期爲7200秒,重複獲取將致使上次獲取的access_token失效。因爲獲取access_token的api調用次數很是有限,建議開發者全局存儲與更新access_token,頻繁刷新access_token會致使api調用受限,影響自身業務。

緣由:爲了不 多公衆帳號狀況下 請求次數過多以及在請求中浪費沒必要要的資源(從新發起http請求獲取),咱們使用RedisHash 結構,並使用appid加密後做爲key來存儲access_token,默認的生命週期爲7200-10=6180 秒,詳見:https://github.com/lanrion/weixin_authorize/blob/master/lib/weixin_authorize/client.rb#L71

添加 redis-namespace 到你的 Gemfile

# Adds a Redis::Namespace class which can be used to namespace calls to Redis. This is useful when using a single instance of Redis with multiple, different applications.
# http://github.com/resque/redis-namespace
gem "redis-namespace", "~> 1.4.1"

添加被始化文件:config/initializers/weixin_authorize.rb


# 這裏修改爲你的的命名空間。 namespace = "app_name_weixin:weixin_authorize" redis = Redis.new(:host => "127.0.0.1", :port => "6379", :db => 15) # 每次重啓時,會把當前的命令空間全部的access_token 清除掉。 exist_keys = redis.keys("#{namespace}:*") exist_keys.each{|key|redis.del(key)} # Give a special namespace as prefix for Redis key, when your have more than one project used weixin_authorize, this config will make them work fine. redis = Redis::Namespace.new("#{namespace}", :redis => redis) WeixinAuthorize.configure do |config| config.redis = redis end

注意,若是不作上述的redis配置,則不會使用Redis來存放access_token,直接存在當前實例中

另一個可選項是,你能夠指定存儲access_token的key值,多個公衆帳號,建議最好用id值便可(插件會進行加密轉換),保持惟一性。

沒有特別的需求,不建議使用。

$client ||= WeixinAuthorize::Client.new(ENV["APPID"], ENV["APPSECRET"], "your_store_key")

特別注意事項

access_token 每次請求後,上一次的access_token會失效。因此若是存儲在Redis中,但同時又在另外一邊從新跑了一次請求access_token的操做,那麼保存在Redis的access_token會失效,在開發環境下,restart你的Rails Server便可,清除全部access_token的代碼以下:

# 每次重啓時,會把當前的命令空間全部的access_token 清除掉。
exist_keys = redis.keys("#{namespace}:*")
exist_keys.each{|key|redis.del(key)}

因此 強烈建議在微信的沙盒測試環境下進行開發並測試 :

微信沙盒測試平臺地址: http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index

一個微信號對應一個測試帳號,申請後,app_id和app_secret_key, 一年內不會發生改變。

項目主頁

https://github.com/lanrion/weixin_authorize

做者介紹

做者 lanrion,目前專一於雲計算中,Paas 平臺 Cloud Foundry,分佈式架構,數據庫。少許業餘時間會嘗試作一些產品。

喜歡鑽牛角尖的傢伙,喜歡研究亂七八糟的東西。有任何有關 Ruby and Rails、微信開發、PHP、Java、Nodejs的問題,均可以發郵件一塊兒探討。微信號:dht_ruby


編輯 SegmentFault

相關文章
相關標籤/搜索