wechat 0.11.6 → 0.11.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CHANGELOG.md +23 -0
- data/README-CN.md +4 -2
- data/README.md +4 -2
- data/bin/wechat +13 -3
- data/lib/action_controller/wechat_responder.rb +4 -2
- data/lib/wechat.rb +2 -1
- data/lib/wechat/api_base.rb +1 -1
- data/lib/wechat/cipher.rb +4 -4
- data/lib/wechat/concern/common.rb +15 -1
- data/lib/wechat/corp_api.rb +16 -1
- data/lib/wechat/http_client.rb +7 -7
- data/lib/wechat/message.rb +1 -0
- data/lib/wechat/mp_api.rb +4 -0
- data/lib/wechat/responder.rb +3 -2
- metadata +30 -30
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f0bb39391f507bdd4855e02eb9d56a1e7b110c6c9fd8c16b65a984af1d376f1
|
4
|
+
data.tar.gz: 673b26d9e77bf7d652fd0bfa30fdddf9516fc7b0a15bdf8b53e471fdb4db606c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 841297efa8f80c68801a9348c253b7666b501f0cec535f39e42d268d6e5188c9c0f551c3d1af72282194cc97e9c65bcb1e30a9359b208d345a8a5e237c46858e
|
7
|
+
data.tar.gz: 31a0a90843b8ca7357563fc9cbf53cf795a1ef58d7292bae725caaf4b5868997975176b0cf26b9b2259c5378d04eee28053d3e91d6d26a057bdab5aaf29b39f9
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,28 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## v0.11.11 (released at 09/13/2020)
|
4
|
+
|
5
|
+
* FIX: fix_load_controller_wechat not support MP type, by @Msms-NJ #281
|
6
|
+
|
7
|
+
## v0.11.10 (released at 09/02/2020)
|
8
|
+
|
9
|
+
* ADD: Wechat::MpApi.wxa_msg_sec_check.
|
10
|
+
|
11
|
+
## v0.11.9 (released at 04/29/2020)
|
12
|
+
|
13
|
+
* CHG: upgrade ssl_version to 1.2 by @paicha #276
|
14
|
+
|
15
|
+
## v0.11.8 (released at 03/09/2020)
|
16
|
+
|
17
|
+
* ADD: Wechat::CorpApi.news_message_send
|
18
|
+
* FIX: Wechat API Change material/get_material. reported by @0000sir #275
|
19
|
+
|
20
|
+
## v0.11.7 (released at 11/15/2019)
|
21
|
+
|
22
|
+
* ADD: Wechat::MpApi.subscribe_message_send. by @paicha #271
|
23
|
+
* FIX: FrozenError: can't modify frozen String. by @paicha #272
|
24
|
+
* New translatecontent support.
|
25
|
+
|
3
26
|
## v0.11.6 (released at 09/02/2019)
|
4
27
|
|
5
28
|
* Fix private method `next_migration_number` introduced at #267, by @zpdsky #270
|
data/README-CN.md
CHANGED
@@ -3,7 +3,7 @@ WeChat [![Gem Version](https://badge.fury.io/rb/wechat.svg)](https://rubygems.or
|
|
3
3
|
|
4
4
|
[![Join the chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Eric-Guo/wechat?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
5
5
|
|
6
|
-
WeChat gem帮助开发者方便地在Rails环境中集成[微信公众平台](https://
|
6
|
+
WeChat gem帮助开发者方便地在Rails环境中集成[微信公众平台](https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html)、[企业微信](https://work.weixin.qq.com/api/doc)和[小程序](https://developers.weixin.qq.com/miniprogram/dev/framework/),包括功能:
|
7
7
|
|
8
8
|
- 微信公众平台/企业微信[发送消息](http://qydev.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E9%80%81%E6%B6%88%E6%81%AF)API(命令行和Web环境都可以使用)
|
9
9
|
- [接收消息](http://qydev.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E6%94%B6%E6%B6%88%E6%81%AF%E4%B8%8E%E4%BA%8B%E4%BB%B6)(必须运行Web服务器)
|
@@ -360,7 +360,7 @@ Wechat Public Account commands:
|
|
360
360
|
wechat group_delete [GROUP_ID] # 删除分组
|
361
361
|
wechat group_update [GROUP_ID, NEW_GROUP_NAME] # 修改分组名
|
362
362
|
wechat groups # 查询所有分组
|
363
|
-
wechat
|
363
|
+
wechat material_get [MEDIA_ID, PATH] # 永久媒体下载
|
364
364
|
wechat material_add [MEDIA_TYPE, PATH] # 永久媒体上传
|
365
365
|
wechat material_count # 获取永久素材总数
|
366
366
|
wechat material_delete [MEDIA_ID] # 删除永久素材
|
@@ -392,12 +392,14 @@ Wechat Public Account commands:
|
|
392
392
|
wechat tag_update [TAG_ID, TAGNAME] # 更新标签名字
|
393
393
|
wechat tags # 获取所有标签
|
394
394
|
wechat template_message [OPENID, TEMPLATE_YAML_PATH] # 模板消息接口
|
395
|
+
wechat translatecontent [CONTENT] # AI开放接口-微信翻译
|
395
396
|
wechat user [OPEN_ID] # 获取用户基本信息
|
396
397
|
wechat user_batchget [OPEN_ID_LIST] # 批量获取用户基本信息
|
397
398
|
wechat user_change_group [OPEN_ID, TO_GROUP_ID] # 移动用户分组
|
398
399
|
wechat user_group [OPEN_ID] # 查询用户所在分组
|
399
400
|
wechat user_update_remark [OPEN_ID, REMARK] # 设置备注名
|
400
401
|
wechat users # 关注者列表
|
402
|
+
wechat wxa_msg_sec_check [CONTENT] # 检查一段文本是否含有违法违规内容。
|
401
403
|
wechat wxacode_download [WXA_CODE_PIC_PATH, PATH, WIDTH] # 下载小程序码
|
402
404
|
```
|
403
405
|
|
data/README.md
CHANGED
@@ -7,7 +7,7 @@ WeChat [![Gem Version](https://badge.fury.io/rb/wechat.svg)](https://rubygems.or
|
|
7
7
|
|
8
8
|
[Wechat](http://www.wechat.com/) is a Chinese multi-purpose messaging, social media and mobile payment app developed by Tencent. It was first released in 2011, and by 2018 it was one of the world's largest standalone mobile apps by monthly active users, with over 1 billion monthly active users (902 million daily active users). (According to [wiki](https://en.wikipedia.org/wiki/WeChat))
|
9
9
|
|
10
|
-
WeChat gem helps Rails developers integrate [WeChat Official Accounts Platform](https://
|
10
|
+
WeChat gem helps Rails developers integrate [WeChat Official Accounts Platform](https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html) or [Wechat mini program](https://developers.weixin.qq.com/miniprogram/dev/framework/) easily, including features:
|
11
11
|
|
12
12
|
- [Sending message](http://qydev.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E9%80%81%E6%B6%88%E6%81%AF) API(can be both accessed via console or rails server)
|
13
13
|
- [Receiving message](http://qydev.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E6%94%B6%E6%B6%88%E6%81%AF%E4%B8%8E%E4%BA%8B%E4%BB%B6)(rails server is required to be running)
|
@@ -391,7 +391,7 @@ Wechat Public Account commands:
|
|
391
391
|
wechat group_delete [GROUP_ID] # 删除分组
|
392
392
|
wechat group_update [GROUP_ID, NEW_GROUP_NAME] # 修改分组名
|
393
393
|
wechat groups # 查询所有分组
|
394
|
-
wechat
|
394
|
+
wechat material_get [MEDIA_ID, PATH] # 永久媒体下载
|
395
395
|
wechat material_add [MEDIA_TYPE, PATH] # 永久媒体上传
|
396
396
|
wechat material_count # 获取永久素材总数
|
397
397
|
wechat material_delete [MEDIA_ID] # 删除永久素材
|
@@ -423,12 +423,14 @@ Wechat Public Account commands:
|
|
423
423
|
wechat tag_update [TAG_ID, TAGNAME] # 更新标签名字
|
424
424
|
wechat tags # 获取所有标签
|
425
425
|
wechat template_message [OPENID, TEMPLATE_YAML_PATH] # 模板消息接口
|
426
|
+
wechat translatecontent [CONTENT] # AI开放接口-微信翻译
|
426
427
|
wechat user [OPEN_ID] # 获取用户基本信息
|
427
428
|
wechat user_batchget [OPEN_ID_LIST] # 批量获取用户基本信息
|
428
429
|
wechat user_change_group [OPEN_ID, TO_GROUP_ID] # 移动用户分组
|
429
430
|
wechat user_group [OPEN_ID] # 查询用户所在分组
|
430
431
|
wechat user_update_remark [OPEN_ID, REMARK] # 设置备注名
|
431
432
|
wechat users # 关注者列表
|
433
|
+
wechat wxa_msg_sec_check [CONTENT] # 检查一段文本是否含有违法违规内容。
|
432
434
|
wechat wxacode_download [WXA_CODE_PIC_PATH, PATH, WIDTH] # 下载小程序码
|
433
435
|
wechat clear_quota # 接口调用次数清零
|
434
436
|
```
|
data/bin/wechat
CHANGED
@@ -225,6 +225,11 @@ class App < Thor
|
|
225
225
|
puts 'WXA Code File downloaded'
|
226
226
|
end
|
227
227
|
|
228
|
+
desc 'wxa_msg_sec_check [CONTENT]', '检查一段文本是否含有违法违规内容。'
|
229
|
+
def wxa_msg_sec_check(content)
|
230
|
+
puts wechat_api.wxa_msg_sec_check(content)
|
231
|
+
end
|
232
|
+
|
228
233
|
desc 'media_uploadnews [MPNEWS_YAML_PATH]', '上传图文消息素材'
|
229
234
|
def media_uploadnews(mpnews_yaml_path)
|
230
235
|
mpnew = YAML.load(File.read(mpnews_yaml_path))
|
@@ -315,6 +320,11 @@ class App < Thor
|
|
315
320
|
def queryrecoresultfortext(voice_id)
|
316
321
|
puts wechat_api.queryrecoresultfortext(voice_id)
|
317
322
|
end
|
323
|
+
|
324
|
+
desc 'translatecontent [CONTENT]', 'AI开放接口-微信翻译'
|
325
|
+
def translatecontent(content)
|
326
|
+
puts wechat_api.translatecontent(content)
|
327
|
+
end
|
318
328
|
end
|
319
329
|
|
320
330
|
desc 'user [OPEN_ID]', '获取用户基本信息'
|
@@ -384,9 +394,9 @@ class App < Thor
|
|
384
394
|
puts wechat_api.media_uploadimg(image_path)
|
385
395
|
end
|
386
396
|
|
387
|
-
desc '
|
388
|
-
def
|
389
|
-
tmp_file = wechat_api.
|
397
|
+
desc 'material_get [MEDIA_ID, PATH]', '永久媒体下载'
|
398
|
+
def material_get(media_id, path)
|
399
|
+
tmp_file = wechat_api.get_material(media_id)
|
390
400
|
FileUtils.mv(tmp_file.path, path)
|
391
401
|
puts 'File downloaded'
|
392
402
|
end
|
@@ -54,9 +54,11 @@ module ActionController
|
|
54
54
|
Wechat::CorpApi.new(corpid, corpsecret, access_token, \
|
55
55
|
agentid, timeout, skip_verify_ssl, jsapi_ticket)
|
56
56
|
else
|
57
|
+
type = opts[:type] || cfg.type
|
57
58
|
secret = opts[:secret] || cfg.secret
|
58
|
-
Wechat::
|
59
|
-
|
59
|
+
wechat_api_class = (type && type.to_sym == :mp ? Wechat::MpApi : Wechat::Api)
|
60
|
+
wechat_api_class.new(appid, secret, access_token, \
|
61
|
+
timeout, skip_verify_ssl, jsapi_ticket)
|
60
62
|
end
|
61
63
|
end
|
62
64
|
end
|
data/lib/wechat.rb
CHANGED
@@ -19,6 +19,7 @@ module Wechat
|
|
19
19
|
class InvalidCredentialError < StandardError; end
|
20
20
|
class ResponseError < StandardError
|
21
21
|
attr_reader :error_code
|
22
|
+
|
22
23
|
def initialize(errcode, errmsg)
|
23
24
|
@error_code = errcode
|
24
25
|
super "#{errmsg}(#{error_code})"
|
@@ -51,4 +52,4 @@ module Wechat
|
|
51
52
|
end
|
52
53
|
end
|
53
54
|
|
54
|
-
ActionView::Base.
|
55
|
+
ActionView::Base.include Wechat::Helpers if defined? ActionView::Base
|
data/lib/wechat/api_base.rb
CHANGED
@@ -6,7 +6,7 @@ module Wechat
|
|
6
6
|
|
7
7
|
API_BASE = 'https://api.weixin.qq.com/cgi-bin/'
|
8
8
|
MP_BASE = 'https://mp.weixin.qq.com/cgi-bin/'
|
9
|
-
WXA_BASE
|
9
|
+
WXA_BASE = 'https://api.weixin.qq.com/wxa/'
|
10
10
|
OAUTH2_BASE = 'https://api.weixin.qq.com/sns/'
|
11
11
|
DATACUBE_BASE = 'https://api.weixin.qq.com/datacube/'
|
12
12
|
QYAPI_BASE = 'https://qyapi.weixin.qq.com/cgi-bin/'
|
data/lib/wechat/cipher.rb
CHANGED
@@ -10,7 +10,7 @@ module Wechat
|
|
10
10
|
cipher.encrypt
|
11
11
|
|
12
12
|
cipher.padding = 0
|
13
|
-
key_data = Base64.decode64(encoding_aes_key
|
13
|
+
key_data = Base64.decode64("#{encoding_aes_key}=")
|
14
14
|
cipher.key = key_data
|
15
15
|
cipher.iv = [key_data].pack('H*')
|
16
16
|
|
@@ -22,7 +22,7 @@ module Wechat
|
|
22
22
|
cipher.decrypt
|
23
23
|
|
24
24
|
cipher.padding = 0
|
25
|
-
key_data = Base64.decode64(encoding_aes_key
|
25
|
+
key_data = Base64.decode64("#{encoding_aes_key}=")
|
26
26
|
cipher.key = key_data
|
27
27
|
cipher.iv = [key_data].pack('H*')
|
28
28
|
|
@@ -33,7 +33,7 @@ module Wechat
|
|
33
33
|
# app_id or corp_id
|
34
34
|
def pack(content, app_id)
|
35
35
|
random = SecureRandom.hex(8)
|
36
|
-
text = content.force_encoding('ASCII-8BIT')
|
36
|
+
text = content.dup.force_encoding('ASCII-8BIT')
|
37
37
|
msg_len = [text.length].pack('N')
|
38
38
|
|
39
39
|
encode_padding("#{random}#{msg_len}#{text}#{app_id}")
|
@@ -41,7 +41,7 @@ module Wechat
|
|
41
41
|
|
42
42
|
def unpack(msg)
|
43
43
|
msg = decode_padding(msg)
|
44
|
-
msg_len = msg[16, 4].reverse.
|
44
|
+
msg_len = msg[16, 4].reverse.unpack1('V')
|
45
45
|
content = msg[20, msg_len]
|
46
46
|
app_id = msg[(20 + msg_len)..-1]
|
47
47
|
|
@@ -106,6 +106,10 @@ module Wechat
|
|
106
106
|
post 'wxaapp/createwxaqrcode', JSON.generate(path: path, width: width)
|
107
107
|
end
|
108
108
|
|
109
|
+
def wxa_msg_sec_check(content)
|
110
|
+
post 'msg_sec_check', JSON.generate(content: content), base: Wechat::Api::WXA_BASE
|
111
|
+
end
|
112
|
+
|
109
113
|
def menu
|
110
114
|
get 'menu/get'
|
111
115
|
end
|
@@ -133,7 +137,13 @@ module Wechat
|
|
133
137
|
end
|
134
138
|
|
135
139
|
def material(media_id)
|
136
|
-
|
140
|
+
ActiveSupport::Deprecation.warn('material is deprecated. use get_material instead.')
|
141
|
+
|
142
|
+
post 'material/get_material', JSON.generate(media_id: media_id), as: :file
|
143
|
+
end
|
144
|
+
|
145
|
+
def get_material(media_id)
|
146
|
+
post 'material/get_material', JSON.generate(media_id: media_id), as: :file
|
137
147
|
end
|
138
148
|
|
139
149
|
def material_count
|
@@ -204,6 +214,10 @@ module Wechat
|
|
204
214
|
post 'media/voice/queryrecoresultfortext', nil, params: { voice_id: voice_id, lang: lang }
|
205
215
|
end
|
206
216
|
|
217
|
+
def translatecontent(from_content, lfrom = 'zh_CN', lto = 'en_US')
|
218
|
+
post 'media/voice/translatecontent', from_content, params: { lfrom: lfrom, lto: lto }
|
219
|
+
end
|
220
|
+
|
207
221
|
def web_access_token(code)
|
208
222
|
params = {
|
209
223
|
appid: access_token.appid,
|
data/lib/wechat/corp_api.rb
CHANGED
@@ -10,6 +10,7 @@ module Wechat
|
|
10
10
|
attr_reader :agentid
|
11
11
|
|
12
12
|
def initialize(appid, secret, token_file, agentid, timeout, skip_verify_ssl, jsapi_ticket_file)
|
13
|
+
super()
|
13
14
|
@client = HttpClient.new(QYAPI_BASE, timeout, skip_verify_ssl)
|
14
15
|
@access_token = Token::CorpAccessToken.new(@client, appid, secret, token_file)
|
15
16
|
@agentid = agentid
|
@@ -155,7 +156,13 @@ module Wechat
|
|
155
156
|
end
|
156
157
|
|
157
158
|
def material(media_id)
|
158
|
-
|
159
|
+
ActiveSupport::Deprecation.warn('material is deprecated. use get_material instead.')
|
160
|
+
|
161
|
+
post 'material/get_material', JSON.generate(media_id: media_id), params: { agentid: agentid }, as: :file
|
162
|
+
end
|
163
|
+
|
164
|
+
def get_material(media_id)
|
165
|
+
post 'material/get_material', JSON.generate(media_id: media_id), params: { agentid: agentid }, as: :file
|
159
166
|
end
|
160
167
|
|
161
168
|
def material_add(type, file)
|
@@ -170,6 +177,14 @@ module Wechat
|
|
170
177
|
post 'message/send', Message.to(userid).text(message).agent_id(agentid).to_json, content_type: :json
|
171
178
|
end
|
172
179
|
|
180
|
+
def news_message_send(userid, title, description, link_url, pic_url)
|
181
|
+
post 'message/send', Message.to(userid).news([{ title: title,
|
182
|
+
description: description,
|
183
|
+
url: link_url,
|
184
|
+
pic_url: pic_url }])
|
185
|
+
.agent_id(agentid).to_json, content_type: :json
|
186
|
+
end
|
187
|
+
|
173
188
|
def custom_message_send(message)
|
174
189
|
post 'message/send', message.is_a?(Wechat::Message) ? message.agent_id(agentid).to_json : JSON.generate(message.merge(agent_id: agentid)), content_type: :json
|
175
190
|
end
|
data/lib/wechat/http_client.rb
CHANGED
@@ -14,7 +14,7 @@ module Wechat
|
|
14
14
|
HTTP.timeout(:global, write: timeout, connect: timeout, read: timeout)
|
15
15
|
end
|
16
16
|
@ssl_context = OpenSSL::SSL::SSLContext.new
|
17
|
-
@ssl_context.ssl_version = :
|
17
|
+
@ssl_context.ssl_version = :TLSv1_2
|
18
18
|
@ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE if skip_verify_ssl
|
19
19
|
end
|
20
20
|
|
@@ -77,12 +77,12 @@ module Wechat
|
|
77
77
|
def parse_response(response, as_type)
|
78
78
|
content_type = response.headers[:content_type]
|
79
79
|
parse_as = {
|
80
|
-
%r{^application
|
81
|
-
%r{^image
|
82
|
-
%r{^audio
|
83
|
-
%r{^voice
|
84
|
-
%r{^text
|
85
|
-
%r{^text
|
80
|
+
%r{^application/json} => :json,
|
81
|
+
%r{^image/.*} => :file,
|
82
|
+
%r{^audio/.*} => :file,
|
83
|
+
%r{^voice/.*} => :file,
|
84
|
+
%r{^text/html} => :xml,
|
85
|
+
%r{^text/plain} => :probably_json
|
86
86
|
}.each_with_object([]) { |match, memo| memo << match[1] if content_type =~ match[0] }.first || as_type || :text
|
87
87
|
|
88
88
|
# try to parse response as json, fallback to user-specified format or text if failed
|
data/lib/wechat/message.rb
CHANGED
data/lib/wechat/mp_api.rb
CHANGED
@@ -34,6 +34,10 @@ module Wechat
|
|
34
34
|
post 'wxopen/template/del', JSON.generate(template_id: template_id)
|
35
35
|
end
|
36
36
|
|
37
|
+
def subscribe_message_send(message)
|
38
|
+
post 'message/subscribe/send', message.to_json
|
39
|
+
end
|
40
|
+
|
37
41
|
def jscode2session(code)
|
38
42
|
params = {
|
39
43
|
appid: access_token.appid,
|
data/lib/wechat/responder.rb
CHANGED
@@ -145,9 +145,10 @@ module Wechat
|
|
145
145
|
next
|
146
146
|
end
|
147
147
|
|
148
|
-
|
148
|
+
case condition
|
149
|
+
when Regexp
|
149
150
|
memo[:scoped] ||= [responder] + $LAST_MATCH_INFO.captures if value =~ condition
|
150
|
-
|
151
|
+
when value
|
151
152
|
memo[:scoped] ||= [responder, value]
|
152
153
|
end
|
153
154
|
end
|
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wechat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Skinnyworm
|
8
8
|
- Eric Guo
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain:
|
12
12
|
- |
|
13
13
|
-----BEGIN CERTIFICATE-----
|
14
14
|
MIIEQDCCAqigAwIBAgIBATANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBplcmlj
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
15
|
+
Lmd1b2N6L0RDPWdtYWlsL0RDPWNvbTAeFw0yMDA5MDIwNDUzMjFaFw0yMTA5MDIw
|
16
|
+
NDUzMjFaMCUxIzAhBgNVBAMMGmVyaWMuZ3VvY3ovREM9Z21haWwvREM9Y29tMIIB
|
17
|
+
ojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAwSfWr5RlUBlv9OuNgmxjPwhU
|
18
|
+
7eoT/m7K5h0PzUaue+dtno4WqjodoCPHF6r9hh8Ys0h1VAPu3sobH2gNaL18M0CY
|
19
|
+
bmq+ik6LgH5tX2E6c2BmhMuURt2y1YvIwvx0dDOlEXll9J8ZVqGyo3Rm9AIblA3/
|
20
|
+
w/V5VJGCj3XY6iipNkHHDlSWSYeD2mNr0wJW8EAUFFcyRddpotxR9Es8JwUpXdj8
|
21
|
+
Bc5a/OWxKvzqLVlu76zYRYuZ41+3gWNxYF9OPnp55sNtsboGh5LJSdXZOs5+gMw9
|
22
|
+
gEW/KsP4GSMlqBT7SQEO5EH3qjp3aatHaMT8Fq9h3AnNESQMubMWtlPqEYyrYkli
|
23
|
+
wr8A8SGiX3rCkNG0cc4zVsagtXm4csbSeaIjLV57LA2sKngI4/kw55UYlloAtGPh
|
24
|
+
qNEqsPLbN/RkyS1zQjf14mQBpBt3SdxnT7YDSPIYiAPTtLuThcy3Flgh6cDX1RH7
|
25
|
+
FQPZJzQ7pSb/3Edj+VBaYhpo+y4ySLxx9DOLfm6lAgMBAAGjezB5MAkGA1UdEwQC
|
26
|
+
MAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBRWBfZurpq8AmvpfBq7eSA0ivhotDAf
|
27
27
|
BgNVHREEGDAWgRRlcmljLmd1b2N6QGdtYWlsLmNvbTAfBgNVHRIEGDAWgRRlcmlj
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
28
|
+
Lmd1b2N6QGdtYWlsLmNvbTANBgkqhkiG9w0BAQsFAAOCAYEAJ1tLpEqCXma9fFeU
|
29
|
+
l6N4tEDrwYVxdbkXgOScUZBsagNlEM9vvskygivKu8AV8ffdtsg9OAuhdfAjPjX+
|
30
|
+
GvGnmuoweHFTsIrOhNryqFDgvkufBczmFLOskjRuzt4NoBNgge8+xoNo+N9o/0jz
|
31
|
+
GZi69Dth2i92rffuEzyFbfA9xzkjL+uSqJRJVDP5UbIWGnQ99M4GfplJZWRkmoX9
|
32
|
+
5Ek/ZVhzEz6kdZuZErloYKqjWWvFHUFAYmJd3fqKpb468yTIaL4bl4aUl2+xLdyK
|
33
|
+
fPI/ZWGy2uNjffzbrhJ+Ti6qAdubkJoMIqrfbrFV1ew2Bxkp/93etXVNjAgHNmu1
|
34
|
+
o3VAf3sbhnj33jAri7JYx/1MhAcJXlvpKxX9QnYouxU/RgzBF7oqcT0dJ2jWUnAI
|
35
|
+
spvOK5/LPXWX6ZGc2SR8SH/s7ftYH2EkeM1VUbtemow08NdgCwJ4IG+fRQ9dcrJ+
|
36
|
+
L9TbpLHvVrCe1w8duMqNeUmqj+M1iC/5Zst2vIe14QcOTuAh
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
38
|
+
date: 2020-09-13 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: activesupport
|
@@ -139,14 +139,14 @@ dependencies:
|
|
139
139
|
requirements:
|
140
140
|
- - "~>"
|
141
141
|
- !ruby/object:Gem::Version
|
142
|
-
version: '
|
142
|
+
version: '4.0'
|
143
143
|
type: :development
|
144
144
|
prerelease: false
|
145
145
|
version_requirements: !ruby/object:Gem::Requirement
|
146
146
|
requirements:
|
147
147
|
- - "~>"
|
148
148
|
- !ruby/object:Gem::Version
|
149
|
-
version: '
|
149
|
+
version: '4.0'
|
150
150
|
- !ruby/object:Gem::Dependency
|
151
151
|
name: sqlite3
|
152
152
|
requirement: !ruby/object:Gem::Requirement
|
@@ -213,7 +213,7 @@ homepage: https://github.com/Eric-Guo/wechat
|
|
213
213
|
licenses:
|
214
214
|
- MIT
|
215
215
|
metadata: {}
|
216
|
-
post_install_message:
|
216
|
+
post_install_message:
|
217
217
|
rdoc_options: []
|
218
218
|
require_paths:
|
219
219
|
- lib
|
@@ -221,15 +221,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
221
221
|
requirements:
|
222
222
|
- - "~>"
|
223
223
|
- !ruby/object:Gem::Version
|
224
|
-
version: '2.
|
224
|
+
version: '2.4'
|
225
225
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
226
226
|
requirements:
|
227
227
|
- - ">="
|
228
228
|
- !ruby/object:Gem::Version
|
229
229
|
version: '0'
|
230
230
|
requirements: []
|
231
|
-
rubygems_version: 3.
|
232
|
-
signing_key:
|
231
|
+
rubygems_version: 3.1.4
|
232
|
+
signing_key:
|
233
233
|
specification_version: 4
|
234
234
|
summary: DSL for wechat message handling and API
|
235
235
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|