wechat_public_api 0.1.1 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bed6ccb358f95e9f869f07ecee7062de0fe186d9
4
- data.tar.gz: 26e0fc2bd8ec03557bd73121292c7b7a761f6163
3
+ metadata.gz: 98dfee4a07d505f15fb5e2b6c8e34d9210f050ee
4
+ data.tar.gz: 9866e3df655cb9cdc1e39a7d8ed33922b012bc9f
5
5
  SHA512:
6
- metadata.gz: 65b6ee27a31430294041f827c3743aeecf00dc629ac742615c0d1a40d832b9424983ca06e6128effc0ba41b59ffc0ca52d1d54bfc090b1b4e0cba5be2b96a1b4
7
- data.tar.gz: 45fbfac8144f482c114a44a43c271fca6782a1bf62251b76868674541b8ba5a9db62ebc1e2521917cb91a9569c497870b956888c56b64d34900310823d01580e
6
+ metadata.gz: 912aa2de176603be919d491a4453561abb531b9aa937cbd77b417d7104337594a9af642a0dce0ad3711b14a1035606494a384b441c3290fb3221c97597dd6094
7
+ data.tar.gz: 7bd5188cc0c6e69832326a5428e3be01afebe1059df2f32738636b4df79880484471409020794c26c4fa8efbcd274a63df0f92097b2f1962152f24bae11d1aef
data/Gemfile.lock ADDED
@@ -0,0 +1,45 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ wechat_public_api (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ domain_name (0.5.20180417)
10
+ unf (>= 0.0.5, < 1.0.0)
11
+ http-cookie (1.0.3)
12
+ domain_name (~> 0.5)
13
+ httparty (0.16.2)
14
+ multi_xml (>= 0.5.2)
15
+ json (2.1.0)
16
+ mime-types (3.1)
17
+ mime-types-data (~> 3.2015)
18
+ mime-types-data (3.2016.0521)
19
+ multi_xml (0.6.0)
20
+ netrc (0.11.0)
21
+ rake (10.5.0)
22
+ redis (4.0.1)
23
+ rest-client (2.0.2)
24
+ http-cookie (>= 1.0.2, < 2.0)
25
+ mime-types (>= 1.16, < 4.0)
26
+ netrc (~> 0.8)
27
+ unf (0.1.4)
28
+ unf_ext
29
+ unf_ext (0.0.7.5)
30
+
31
+ PLATFORMS
32
+ ruby
33
+
34
+ DEPENDENCIES
35
+ bundler (~> 1.16)
36
+ httparty
37
+ json
38
+ rake (~> 10.0)
39
+ redis
40
+ rest-client
41
+ unf_ext (~> 0.0.7.5)
42
+ wechat_public_api!
43
+
44
+ BUNDLED WITH
45
+ 1.16.1
data/README.md CHANGED
@@ -1,43 +1,189 @@
1
- # WechatPublicApi
1
+ # 简介
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/wechat_public_api`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ 基于ruby的微信公众号开发的API,包含对微信公众号菜单栏、客服消息、模板消息、帐号管理等接口的封装。
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ API长期更新维护,建议使用最新版本。
6
6
 
7
- ## Installation
7
+ ## 安装
8
8
 
9
- Add this line to your application's Gemfile:
9
+ 添加 Gemfile:
10
10
 
11
11
  ```ruby
12
12
  gem 'wechat_public_api'
13
13
  ```
14
14
 
15
- And then execute:
15
+ 执行 bundle:
16
16
 
17
- $ bundle
17
+ $ bundle install
18
18
 
19
- Or install it yourself as:
19
+ 或者直接通过 gem 安装:
20
20
 
21
21
  $ gem install wechat_public_api
22
22
 
23
- ## Usage
23
+ ## 三行代码获得 access_token
24
24
 
25
- TODO: Write usage instructions here
25
+ ```ruby
26
+ WechatPublicApi.app_id = 'appid'
27
+ WechatPublicApi.app_secret = 'secret'
28
+ access_token = WechatPublicApi::AccessToken.get() # access_token
29
+ ```
30
+ ## API文档
31
+
32
+ ### WechatPublicApi模块配置,开启你的新项目
33
+
34
+ **参数说明**
35
+
36
+ * @param <String> app_id     # 公众号后台->开发->基本配置提供的AppID
37
+ * @param <String> app_secret # 公众号后台->开发->基本配置提供的AppSecret
38
+ * @param <Boolearn> access_token_cache # 默认false,用于标识是否使用redis缓存查询到的access_token
39
+
40
+ 使用`WechatPublicApi`模块封装的方法之前,需要配置 app_id、app_secret和access_token_cache(可选),具体如下:
26
41
 
27
- ## Development
42
+ ```ruby
43
+ WechatPublicApi.app_id = 'wx440415e4c3b4b8f9'
44
+ WechatPublicApi.app_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
45
+ access_token = WechatPublicApi::AccessToken.get() # access_token
46
+ ```
28
47
 
29
- After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
48
+ **注意:** access_token_cache是一个布尔值,用于判断是否需要缓存access_token_cache,默认可不填,即默认不缓存access_token,如需缓存,请依照下方代码设置参数:
30
49
 
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
50
+ ```ruby
51
+ WechatPublicApi.access_token_cache = true
52
+ ```
32
53
 
33
- ## Contributing
54
+ ### API功能概览
55
+
56
+ * 菜单栏操作
57
+ * 创建菜单栏:`WechatPublicApi::Menu.create(post_data)`
58
+ * 查询菜单栏:`WechatPublicApi::Menu.query()`
59
+ * 删除菜单栏:`WechatPublicApi::Menu.delete()`
60
+ * 客服消息管理
61
+ * 发送文字消息:`WechatPublicApi::Kf.text_message(openid, content)`
62
+ * 发送图片消息:`WechatPublicApi::Kf.image_message(openid, media_id)`
63
+ * 发送图文消息:`WechatPublicApi::Kf.mpnews_message(openid, media_id)`
64
+ * 发送图文消息(点击跳转外链): `WechatPublicApi::Kf.news_message(openid, articles)`
65
+ * 发送语音消息:`WechatPublicApi::Kf.voice_message(openid, media_id)`
66
+ * 模板消息管理
67
+ * 获取模板列表:`WechatPublicApi::Tp.get_all()`
68
+ * 删除模板:`WechatPublicApi::Tp.delete(templet_id)`
69
+ * 发送普通模板消息(不跳转小程序)`WechatPublicApi::Tp.general_message(openid, templet_id, url, data)`
70
+ * 发送跳转小程序的模板消息:`WechatPublicApi::Tp.miniprogram_message(openid, templet_id, url, appid, pagepath, data)`
71
+ * 用户管理
72
+ * 获取用户基本信息: `WechatPublicApi::User.get_userinfo(openid)`
73
+ * 帐号管理
74
+ * 获取临时带参二维码: `WechatPublicApi::Account.qrscene(sceneid)`
75
+ * 获取永久带参二维码: `WechatPublicApi::Account.qrsrtscene(sceneid)`
76
+ * 保存带参二维码到本地: `WechatPublicApi::Account.save_qrcode(path, *filename)`
77
+ * 生成短链接:`WechatPublicApi::Account.shorturl(longurl)`
78
+ * 素材管理
79
+ * 获得临时图片素材的 media_id: `WechatPublicApi::Material.upload_image_media(file_path)`
80
+ * 获得永久图片素材的 media_id: `WechatPublicApi::Material.upload_image_material(file_path)`
81
+ * 消息加密解密
82
+ * 加密: `WechatPublicApi::Aes.encrypt(aes_key, text, app_id)`
83
+ * 解密: `WechatPublicApi::Aes.decrypt(key, dicrypted_string)`
84
+
85
+ ### 菜单栏操作API
86
+
87
+ 1. 自定义菜单查询
34
88
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/wechat_public_api. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
89
+ ```ruby
90
+ # no params
91
+ # @return
92
+ # {
93
+ # "menu": {
94
+ # "button": [
95
+ # {
96
+ # "type": "view",
97
+ # "name": "",
98
+ # "url": "",
99
+ # "sub_button": []
100
+ # },
101
+ # {
102
+ # "type": "click",
103
+ # "name": "",
104
+ # "key": "menu_3",
105
+ # "sub_button": []
106
+ # }
107
+ # ]
108
+ # }
109
+ # }
110
+ #
111
+ menu_list = WechatPublicApi::Menu.query()
112
+ ```
36
113
 
37
- ## License
114
+ 2. 自定义菜单创建
115
+
116
+ ```ruby
117
+ ###
118
+ # create wechat public menu
119
+ # @param <json> post_data
120
+ #
121
+ # => post_data example
122
+ # {
123
+ # "button": [
124
+ # {
125
+ # "type": "view",
126
+ # "name": "",
127
+ # "url": "",
128
+ # "sub_button": []
129
+ # },
130
+ # {
131
+ # "type": "click",
132
+ # "name": "",
133
+ # "key": "menu_3",
134
+ # "sub_button": []
135
+ # }
136
+ # ]
137
+ # }
138
+ #
139
+ # if success
140
+ # @return <JSON> {"errcode"=>0, "errmsg"=>"ok"}
141
+ # if failed
142
+ # @return <JSON> {"errcode"=>40166, "errmsg"=>"...."}
143
+ #
144
+ status = WechatPublicApi::Menu.create(post_data)
145
+ ```
146
+
147
+ 3. 自定义菜单删除
148
+
149
+ ```ruby
150
+ # @return <JSON> {"errcode"=>0, "errmsg"=>"ok"}
151
+ status = WechatPublicApi::Menu.delete()
152
+ ```
153
+
154
+ 菜单栏操作API主要包含以上三个方法,接下来看一个完整示例:
155
+
156
+ ```ruby
157
+ # 创建菜单栏 -> 查询菜单栏列表
158
+ # 初始化配置
159
+ WechatPublicApi.app_id = 'wx440415e4c3b4b8f9'
160
+ WechatPublicApi.app_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
161
+ # 创建菜单栏
162
+ post_data = {
163
+ "button": [
164
+ {
165
+ "type": "view",
166
+ "name": "",
167
+ "url": "",
168
+ "sub_button": []
169
+ },
170
+ {
171
+ "type": "click",
172
+ "name": "",
173
+ "key": "menu_3",
174
+ "sub_button": []
175
+ }
176
+ ]
177
+ }
178
+ status = WechatPublicApi::Menu.create(post_data)
179
+ if status.errcode.to_i == 0 && status.errmsg == 'ok'
180
+ # 返回菜单栏列表
181
+ menu_list = WechatPublicApi::Menu.query()
182
+ end
183
+ ```
38
184
 
39
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
185
+ **注意:** 菜单栏创建和查询的方法包含了查询access_token
40
186
 
41
- ## Code of Conduct
187
+ ### 客服消息管理API
42
188
 
43
- Everyone interacting in the WechatPublicApi project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/wechat_public_api/blob/master/CODE_OF_CONDUCT.md).
189
+ 待更新... 可参考源代码,注释比较详细
@@ -3,6 +3,11 @@ require "wechat_public_api/menu"
3
3
  require "wechat_public_api/kf_message"
4
4
  require "wechat_public_api/templet_message"
5
5
  require "wechat_public_api/access_token"
6
+ require "wechat_public_api/accout"
7
+ require "wechat_public_api/aes"
8
+ require "wechat_public_api/utils"
9
+ require "wechat_public_api/user"
10
+ require "wechat_public_api/material"
6
11
 
7
12
  module WechatPublicApi
8
13
  class << self
@@ -21,6 +21,10 @@ module WechatPublicApi
21
21
  unless access_token_cache
22
22
  response = HTTParty.get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=#{appid}&secret=#{secret}").body
23
23
  response_body = (JSON.parse response)
24
+
25
+ # 抛出异常
26
+ throw response_body['errmsg'] unless response_body['access_token']
27
+
24
28
  return response_body['access_token']
25
29
  end
26
30
 
@@ -29,7 +33,10 @@ module WechatPublicApi
29
33
  if _cached_access_token == nil or _cached_access_token == ''
30
34
  response = HTTParty.get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=#{appid}&secret=#{secret}").body
31
35
  response_body = (JSON.parse response)
32
- Rails.logger.info response_body
36
+
37
+ # 抛出异常
38
+ throw response_body['errmsg'] unless response_body['access_token']
39
+
33
40
  _cached_access_token = response_body['access_token']
34
41
  $redis.set _cache_key, _cached_access_token, ex: 2.minutes
35
42
  end
@@ -0,0 +1,119 @@
1
+ #####################################################
2
+ # 微信公众号帐号管理 (带参二维码获得)
3
+ # Created by zhangmingxin
4
+ # Date: 2018-05-18
5
+ # Wechat number: zmx119966
6
+ ####################################################
7
+
8
+ require "wechat_public_api/access_token"
9
+
10
+ module WechatPublicApi
11
+ module Account
12
+ class << self
13
+
14
+ ###
15
+ # 获取临时场景带惨二维码,30天有效
16
+ # @param <int> sceneid -- 场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1--100000)
17
+ # @return <string> url -- 二维码网址
18
+ #
19
+ def qrscene(sceneid)
20
+ access_token = AccessToken.get()
21
+
22
+ # 获取ticket
23
+ uri = URI.parse("https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=#{access_token}")
24
+ post_data = {
25
+ 'expire_seconds' => 2592000,
26
+ 'action_name' => 'QR_SCENE',
27
+ 'action_info' => {'scene' => {'scene_id' => sceneid}}}
28
+ http = Net::HTTP.new(uri.host, uri.port)
29
+ http.use_ssl = true
30
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
31
+ request = Net::HTTP::Post.new("/cgi-bin/qrcode/create?access_token=#{access_token}")
32
+ request.add_field('Content-Type', 'application/json')
33
+ request.body = post_data.to_json
34
+ response = http.request(request)
35
+ content = JSON.parse(response.body)
36
+ ticket = content['ticket']
37
+
38
+ # 通过ticket换取二维码
39
+ url = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=' + ticket
40
+ url
41
+ end
42
+
43
+ ###
44
+ # 获取永久二维码
45
+ # @param <int> sceneid -- 场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1--100000)
46
+ # @return <string> url -- 二维码网址
47
+ #
48
+ def qrsrtscene(sceneid)
49
+ access_token = AccessToken.get()
50
+
51
+ # 获取ticket
52
+ uri = URI.parse("https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=#{access_token}")
53
+ post_data = {
54
+ 'action_name' => 'QR_LIMIT_STR_SCENE',
55
+ 'action_info' => {'scene' => {'scene_id' => sceneid}}}
56
+ http = Net::HTTP.new(uri.host, uri.port)
57
+ http.use_ssl = true
58
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
59
+ request = Net::HTTP::Post.new("/cgi-bin/qrcode/create?access_token=#{access_token}")
60
+ request.add_field('Content-Type', 'application/json')
61
+ request.body = post_data.to_json
62
+ response = http.request(request)
63
+ content = JSON.parse(response.body)
64
+ ticket = content['ticket']
65
+
66
+ # 通过ticket换取二维码
67
+ url = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=' + ticket
68
+ url
69
+ end
70
+
71
+ ###
72
+ # 保存带参数二维码到指定位置
73
+ # @param <string> path -- 例如: "#{Rails.root}/public/qrcode"
74
+ # @param <string> filename -- 文件名,可选参数,默认不填写则使用时间戳+随机数的方式命名
75
+ #
76
+ # @return <string> path -- 二维码的保存路径
77
+ def save_qrcode(path, *filename)
78
+ # 判断是否需要新建文件
79
+ unless File.exist?(path)
80
+ FileUtils.makedirs(path)
81
+ end
82
+
83
+ if filename
84
+ path = "#{path}/#{filename}"
85
+ else
86
+ path = "#{path}/#{Time.now.to_i.to_s}_#{rand 1000.9999}"
87
+ end
88
+
89
+ File.open(path, 'wb') do |f|
90
+ f.write(HTTParty.get(url).body)
91
+ end
92
+
93
+ path
94
+ end
95
+
96
+ ###
97
+ # @param <string> longurl -- 需要被压缩的url
98
+ #
99
+ # @return <json> shorturl -- 返回短链接 {"errcode":0,"errmsg":"ok","short_url":"http:\/\/w.url.cn\/s\/AvCo6Ih"}
100
+ # if false
101
+ # @return {"errcode":40013,"errmsg":"invalid appid"}
102
+ #
103
+ def shorturl(longurl)
104
+ access_token = AccessToken.get()
105
+ uri = URI.parse("https://api.weixin.qq.com/cgi-bin/shorturl?access_token=#{access_token}")
106
+ post_data = {action: "long2short", long_url: longurl}
107
+ http = Net::HTTP.new(uri.host, uri.port)
108
+ http.use_ssl = true
109
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
110
+ request = Net::HTTP::Post.new("/cgi-bin/shorturl?access_token=#{access_token}")
111
+ request.add_field('Content-Type', 'application/json')
112
+ request.body = post_data.to_json
113
+ response = http.request(request)
114
+
115
+ JSON.parse(response.body)
116
+ end
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,44 @@
1
+ #####################################################
2
+ # 消息加密解密
3
+ # Created by zhangmingxin
4
+ # Date: 2018-05-18
5
+ # Wechat number: zmx119966
6
+ ####################################################
7
+
8
+ require "wechat_public_api/access_token"
9
+ module WechatPublicApi
10
+ module Aes
11
+ class << self
12
+
13
+ # 解密
14
+ def decrypt(key, dicrypted_string)
15
+ cipher = OpenSSL::Cipher::AES.new(256, :CBC)
16
+ cipher.decrypt
17
+ cipher.key = key
18
+ cipher.iv = '0000000000000000'
19
+ cipher.padding = 0
20
+ cipher.update(dicrypted_string) << cipher.final
21
+ end
22
+
23
+ # 加密
24
+ def encrypt(aes_key, text, app_id)
25
+ text = text.force_encoding("ASCII-8BIT")
26
+ random = SecureRandom.hex(8)
27
+ msg_len = [text.length].pack("N")
28
+ text = "#{random}#{msg_len}#{text}#{app_id}"
29
+ text = WxAuth.encode(text)
30
+ text = handle_cipher(:encrypt, aes_key, text)
31
+ Base64.encode64(text)
32
+ end
33
+
34
+ def handle_cipher(action, aes_key, text)
35
+ cipher = OpenSSL::Cipher.new('AES-256-CBC')
36
+ cipher.send(action)
37
+ cipher.padding = 0
38
+ cipher.key = aes_key
39
+ cipher.iv = aes_key[0...16]
40
+ cipher.update(text) + cipher.final
41
+ end
42
+ end
43
+ end
44
+ end
@@ -29,7 +29,7 @@ module WechatPublicApi
29
29
  #
30
30
  # @param <JSON> message
31
31
  #
32
- def self.post_customer_message(message)
32
+ def post_customer_message(message)
33
33
  # get access_token
34
34
  access_token = AccessToken.get()
35
35
 
@@ -49,7 +49,7 @@ module WechatPublicApi
49
49
  # @param <string> content -- 需要发送的客服消息内容
50
50
  #
51
51
  # 发送文字消息
52
- def self.text_message(openid, content)
52
+ def text_message(openid, content)
53
53
 
54
54
  custom_message = {
55
55
  touser: openid,
@@ -68,7 +68,7 @@ module WechatPublicApi
68
68
  # @param <string> media_id -- 发送的图片/语音/视频/图文消息(点击跳转到图文消息页)的媒体ID
69
69
  #
70
70
  # 发送图片消息
71
- def self.image_message(openid, media_id)
71
+ def image_message(openid, media_id)
72
72
 
73
73
  custom_message = {
74
74
  touser: openid,
@@ -116,7 +116,7 @@ module WechatPublicApi
116
116
  # ]
117
117
  #
118
118
  # 发送图文消息(点击跳转到外链)
119
- def self.news_message(openid, articles)
119
+ def news_message(openid, articles)
120
120
  custom_message = {
121
121
  touser: openid,
122
122
  msgtype: 'news',
@@ -132,7 +132,7 @@ module WechatPublicApi
132
132
  end
133
133
 
134
134
  # 发送语音消息
135
- def self.voice_message(openid, media_id)
135
+ def voice_message(openid, media_id)
136
136
 
137
137
  custom_message = {
138
138
  touser: openid,
@@ -0,0 +1,53 @@
1
+ #####################################################
2
+ # 微信公众号素材管理
3
+ # Created by zhangmingxin
4
+ # Date: 2018-05-18
5
+ # Wechat number: zmx119966
6
+ ####################################################
7
+
8
+ require "wechat_public_api/access_token"
9
+
10
+ module WechatPublicApi
11
+ module Material
12
+ class << self
13
+
14
+ ###
15
+ # 获得临时图片素材的 media_id
16
+ # @param <string> file_path -- 图片素材的路径
17
+ #
18
+ # @return <json> {"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789}
19
+ # if false
20
+ # @return <json> {"errcode":40004,"errmsg":"invalid media type"}
21
+ #
22
+ def upload_image_media(file_path)
23
+ # request access_token
24
+ access_token = AccessToken.get()
25
+ response = RestClient.post('https://api.weixin.qq.com/cgi-bin/media/upload',
26
+ {
27
+ access_token: access_token,
28
+ type: 'image',
29
+ media: File.new(file_path, 'rb')})
30
+ JSON.parse(response)
31
+ end
32
+
33
+ ###
34
+ # 新增永久图片素材
35
+ # @param <string> file_path -- 图片素材的路径
36
+ #
37
+ # @return <json> {"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789}
38
+ # if false
39
+ # @return <json> {"errcode":40004,"errmsg":"invalid media type"}
40
+ #
41
+ def upload_image_material(file_path)
42
+ # request access_token
43
+ access_token = AccessToken.get()
44
+ response = RestClient.post('https://api.weixin.qq.com/cgi-bin/material/add_material',
45
+ {
46
+ access_token: access_token,
47
+ type: 'image',
48
+ media: File.new(file_path, 'rb')})
49
+ JSON.parse(response)
50
+ end
51
+ end
52
+ end
53
+ end
@@ -17,7 +17,7 @@ module WechatPublicApi
17
17
  #
18
18
  # => post_data example
19
19
  # {
20
- # "button": [
20
+ # "button": [
21
21
  # {
22
22
  # "type": "view",
23
23
  # "name": "",
@@ -41,9 +41,9 @@ module WechatPublicApi
41
41
  def create(post_data)
42
42
  # request access_token
43
43
  access_token = AccessToken.get()
44
+ post_data = post_data.to_json.gsub(/\\u([0-9a-z]{4})/) {|s| [$1.to_i(16)].pack("U")}
44
45
 
45
46
  uri = URI.parse("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=#{access_token}")
46
- post_data = post_data
47
47
  http = Net::HTTP.new(uri.host, uri.port)
48
48
  http.use_ssl = true
49
49
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
@@ -58,7 +58,7 @@ module WechatPublicApi
58
58
  def query()
59
59
  # request access_token
60
60
  access_token = AccessToken.get()
61
- response = HTTParty.get("https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN=#{access_token}").body
61
+ response = HTTParty.get("https://api.weixin.qq.com/cgi-bin/menu/get?access_token=#{access_token}").body
62
62
  (JSON.parse response)
63
63
  end
64
64
 
@@ -69,7 +69,7 @@ module WechatPublicApi
69
69
  def delete()
70
70
  # request access_token
71
71
  access_token = AccessToken.get()
72
- response = HTTParty.get("https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN=#{access_token}").body
72
+ response = HTTParty.get("https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=#{access_token}").body
73
73
  (JSON.parse response)
74
74
  end
75
75
  end
@@ -8,7 +8,7 @@
8
8
  require "wechat_public_api/access_token"
9
9
 
10
10
  module WechatPublicApi
11
- module TP
11
+ module Tp
12
12
  class << self
13
13
 
14
14
  ###
@@ -0,0 +1,46 @@
1
+ #####################################################
2
+ # 公众号用户管理
3
+ # Created by zhangmingxin
4
+ # Date: 2018-05-18
5
+ # Wechat number: zmx119966
6
+ ####################################################
7
+
8
+ require "wechat_public_api/access_token"
9
+
10
+ module WechatPublicApi
11
+ module User
12
+ class << self
13
+
14
+ # 获取用户信息
15
+ # @return <JSON>
16
+ # {
17
+ # "subscribe": 1,
18
+ # "openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M",
19
+ # "nickname": "Band",
20
+ # "sex": 1,
21
+ # "language": "zh_CN",
22
+ # "city": "广州",
23
+ # "province": "广东",
24
+ # "country": "中国",
25
+ # "headimgurl":"http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
26
+ # "subscribe_time": 1382694957,
27
+ # "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
28
+ # "remark": "",
29
+ # "groupid": 0,
30
+ # "tagid_list":[128,2],
31
+ # "subscribe_scene": "ADD_SCENE_QR_CODE",
32
+ # "qr_scene": 98765,
33
+ # "qr_scene_str": ""
34
+ # }
35
+ #
36
+ # if failed
37
+ # {"errcode":40013,"errmsg":"invalid appid"}
38
+ #
39
+ def get_userinfo(openid)
40
+ # request access_token
41
+ access_token = AccessToken.get()
42
+ JSON.parse HTTParty.get("https://api.weixin.qq.com/cgi-bin/user/info?access_token=#{access_token}&openid=#{openid}&lang=zh_CN").body
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,15 @@
1
+ #####################################################
2
+ # 基于微信公众号的小工具,公用
3
+ # Created by zhangmingxin
4
+ # Date: 2018-05-18
5
+ # Wechat number: zmx119966
6
+ ####################################################
7
+
8
+ require "wechat_public_api/access_token"
9
+ module WechatPublicApi
10
+ module Utils
11
+ class << self
12
+ # Todo
13
+ end
14
+ end
15
+ end
@@ -1,3 +1,3 @@
1
1
  module WechatPublicApi
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.4"
3
3
  end
Binary file
Binary file
@@ -6,10 +6,10 @@ require "wechat_public_api/version"
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "wechat_public_api"
8
8
  spec.version = WechatPublicApi::VERSION
9
- spec.authors = ["张明鑫"]
9
+ spec.authors = ["张明鑫 wechat number: zmx119966"]
10
10
  spec.email = ["mnzmx_z@163.com"]
11
11
 
12
- spec.summary = %q{微信公众号开发API,包含对微信公众号菜单栏、客服消息、模板消息、帐号管理等接口的封装}
12
+ spec.summary = %q{微信公众号开发API,包含对微信公众号菜单栏、客服消息、模板消息、帐号管理等接口的封装,API长期更新维护,建议使用最新版本.}
13
13
  spec.description = %q{}
14
14
  spec.homepage = "https://github.com/Diyilou/wechat_public_api.git"
15
15
  spec.license = "MIT"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wechat_public_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
- - 张明鑫
7
+ - '张明鑫 wechat number: zmx119966'
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-17 00:00:00.000000000 Z
11
+ date: 2018-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -118,6 +118,7 @@ files:
118
118
  - ".gitignore"
119
119
  - CODE_OF_CONDUCT.md
120
120
  - Gemfile
121
+ - Gemfile.lock
121
122
  - LICENSE.txt
122
123
  - README.md
123
124
  - Rakefile
@@ -125,10 +126,17 @@ files:
125
126
  - bin/setup
126
127
  - lib/wechat_public_api.rb
127
128
  - lib/wechat_public_api/access_token.rb
129
+ - lib/wechat_public_api/account.rb
130
+ - lib/wechat_public_api/aes.rb
128
131
  - lib/wechat_public_api/kf_message.rb
132
+ - lib/wechat_public_api/material.rb
129
133
  - lib/wechat_public_api/menu.rb
130
134
  - lib/wechat_public_api/templet_message.rb
135
+ - lib/wechat_public_api/user.rb
136
+ - lib/wechat_public_api/utils.rb
131
137
  - lib/wechat_public_api/version.rb
138
+ - wechat_public_api-0.1.1.gem
139
+ - wechat_public_api-0.1.2.gem
132
140
  - wechat_public_api.gemspec
133
141
  homepage: https://github.com/Diyilou/wechat_public_api.git
134
142
  licenses:
@@ -153,5 +161,5 @@ rubyforge_project:
153
161
  rubygems_version: 2.5.2.1
154
162
  signing_key:
155
163
  specification_version: 4
156
- summary: 微信公众号开发API,包含对微信公众号菜单栏、客服消息、模板消息、帐号管理等接口的封装
164
+ summary: 微信公众号开发API,包含对微信公众号菜单栏、客服消息、模板消息、帐号管理等接口的封装,API长期更新维护,建议使用最新版本.
157
165
  test_files: []