mini_program 1.1.3 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/mini_program/wechat_controller.rb +7 -4
- data/lib/mini_program/client.rb +91 -46
- data/lib/mini_program/version.rb +1 -1
- data/lib/service_result.rb +9 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c820c7145603d0921958756bc171bf3f7fdf61d381846e762dd348c8c09e9e52
|
4
|
+
data.tar.gz: be8fd4bffb209a7dbf2b756398cacae660a01baa97ba70a648faf03177069d14
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 03617d731ece40bc764c8c49eea0c45958b0a4b276ceb4c8494c7a88175efe93b33ccf1fa49d65048e17ea042dace3f4d4b3d61e2ce8302dd27122ce426aaf14
|
7
|
+
data.tar.gz: 2868ba04a6f66676d9e78d3c93db54ff52785b11fd31ef1251f9ef84987317f9afb13da809745c393be6ffc78fdf7604df4d9c54a2bd1bd5b4bb0ee0cc51f28f
|
@@ -15,9 +15,12 @@ module MiniProgram
|
|
15
15
|
|
16
16
|
after_mp_login if respond_to? :after_mp_login
|
17
17
|
|
18
|
-
render json:
|
18
|
+
render json: ServiceResult.new(success: true,
|
19
|
+
data: { current_user: current_mp_user },
|
20
|
+
message: "登录成功",
|
21
|
+
message_kind: :login_success)
|
19
22
|
else
|
20
|
-
render json:
|
23
|
+
render json: result, status: 500
|
21
24
|
end
|
22
25
|
end
|
23
26
|
|
@@ -29,9 +32,9 @@ module MiniProgram
|
|
29
32
|
if result.success?
|
30
33
|
cookies.signed[:phone_num] = result.data[:phone_num]
|
31
34
|
|
32
|
-
render json: result
|
35
|
+
render json: result
|
33
36
|
else
|
34
|
-
render json:
|
37
|
+
render json: result, status: 500
|
35
38
|
end
|
36
39
|
end
|
37
40
|
end
|
data/lib/mini_program/client.rb
CHANGED
@@ -23,17 +23,22 @@ module MiniProgram
|
|
23
23
|
access_token = Rails.cache.read(access_token_store_key)
|
24
24
|
|
25
25
|
if access_token.present? && !fresh
|
26
|
-
return MiniProgram::ServiceResult.new(success: true,
|
26
|
+
return MiniProgram::ServiceResult.new(success: true,
|
27
|
+
data: { access_token: access_token },
|
28
|
+
message: "获取 access token 成功",
|
29
|
+
message_kind: :get_access_token_success)
|
27
30
|
end
|
28
31
|
|
29
32
|
result = request_access_token
|
30
33
|
|
31
34
|
if result.success?
|
32
|
-
# redis.setex access_token_store_key, 1.5.hours.to_i, result.data["access_token"]
|
33
35
|
Rails.cache.write(access_token_store_key,
|
34
36
|
result.data["access_token"],
|
35
37
|
expires_in: 1.5.hours.to_i,
|
36
38
|
race_condition_ttl: 10)
|
39
|
+
|
40
|
+
result.message = "获取 access token 成功"
|
41
|
+
result.message_kind = :get_access_token_success
|
37
42
|
end
|
38
43
|
|
39
44
|
yield result if block_given?
|
@@ -58,14 +63,21 @@ module MiniProgram
|
|
58
63
|
|
59
64
|
if result["errcode"] && result["errcode"].to_s != "0"
|
60
65
|
logger.error <<~ERROR
|
61
|
-
|
62
|
-
|
63
|
-
|
66
|
+
Get access token failed.
|
67
|
+
api: #{api}
|
68
|
+
error: #{result}
|
64
69
|
ERROR
|
65
|
-
return MiniProgram::ServiceResult.new(success: false, error: result, message: result["errmsg"])
|
66
|
-
end
|
67
70
|
|
68
|
-
|
71
|
+
MiniProgram::ServiceResult.new(success: false,
|
72
|
+
error: result,
|
73
|
+
message: result["errmsg"],
|
74
|
+
message_kind: :request_access_token_failed)
|
75
|
+
else
|
76
|
+
MiniProgram::ServiceResult.new(success: true,
|
77
|
+
data: { access_token: result["access_token"] },
|
78
|
+
message: "请求 access token 成功",
|
79
|
+
message_kind: :request_access_token_success)
|
80
|
+
end
|
69
81
|
end
|
70
82
|
|
71
83
|
# 调用微信授权登录 api
|
@@ -86,20 +98,29 @@ module MiniProgram
|
|
86
98
|
|
87
99
|
if result["errcode"] && result["errcode"].to_s != "0"
|
88
100
|
logger.error <<~ERROR
|
89
|
-
|
90
|
-
|
91
|
-
|
101
|
+
Get session key failed.
|
102
|
+
api: #{api}
|
103
|
+
result: #{result}
|
92
104
|
ERROR
|
93
|
-
|
105
|
+
|
106
|
+
MiniProgram::ServiceResult.new(success: false,
|
107
|
+
error: result,
|
108
|
+
message: result["errmsg"],
|
109
|
+
message_kind: :login_failed)
|
110
|
+
|
111
|
+
else
|
112
|
+
MiniProgram::ServiceResult.new(success: true,
|
113
|
+
data: result,
|
114
|
+
message: "小程序登录成功",
|
115
|
+
message_kind: :login_success)
|
94
116
|
end
|
95
117
|
|
96
|
-
MiniProgram::ServiceResult.new(success: true, data: result)
|
97
118
|
end
|
98
119
|
|
99
120
|
# 发送订阅消息
|
100
121
|
# @param [MiniProgram::Msg] msg
|
101
122
|
# @param [String] to 用户的openid
|
102
|
-
def send_msg(msg, to:
|
123
|
+
def send_msg(msg, to:)
|
103
124
|
openid = to.try(:openid) || to
|
104
125
|
|
105
126
|
payload = msg.as_json.merge!(touser: openid)
|
@@ -114,19 +135,26 @@ module MiniProgram
|
|
114
135
|
result = post(api, payload)
|
115
136
|
|
116
137
|
if result["errcode"].to_s != "0"
|
117
|
-
msg_logger.error {"{params: #{payload}, response: #{result}}"}
|
118
|
-
|
138
|
+
msg_logger.error { "{params: #{payload}, response: #{result}}" }
|
139
|
+
MiniProgram::ServiceResult.new(success: false,
|
140
|
+
error: result,
|
141
|
+
message: "发送订阅消息成功",
|
142
|
+
message_kind: :send_subscribed_message_success)
|
143
|
+
else
|
144
|
+
msg_logger.info { "{params: #{payload}, response: #{result}}" }
|
145
|
+
MiniProgram::ServiceResult.new(success: true,
|
146
|
+
data: result,
|
147
|
+
message: "发送订阅消息失败",
|
148
|
+
message_kind: :send_subscribed_message_failed)
|
119
149
|
end
|
120
150
|
|
121
|
-
msg_logger.info {"{params: #{payload}, response: #{result}}"}
|
122
|
-
MiniProgram::ServiceResult.new(success: true, data: result)
|
123
151
|
end
|
124
152
|
|
125
153
|
# 「发送统一服务消息」
|
126
154
|
# 统一服务消息原本是可以从调用小程序的 api ,通过用户小程序的 openid 发送模板消息到小程序和公众号那里去,
|
127
155
|
# 现在小程序的模板消息功能关闭了,就只剩下发送模板消息到公众号这个功能了
|
128
156
|
#
|
129
|
-
def send_uniform_msg(msg, to:
|
157
|
+
def send_uniform_msg(msg, to:)
|
130
158
|
openid = to.try(:openid) || to
|
131
159
|
|
132
160
|
payload = msg.as_json
|
@@ -143,12 +171,19 @@ module MiniProgram
|
|
143
171
|
})
|
144
172
|
|
145
173
|
if result["errcode"].to_s != "0"
|
146
|
-
msg_logger.error {"{params: #{payload}, response: #{result}}"}
|
147
|
-
|
174
|
+
msg_logger.error { "{params: #{payload}, response: #{result}}" }
|
175
|
+
MiniProgram::ServiceResult.new(success: false,
|
176
|
+
error: result["errmsg"],
|
177
|
+
message: "发送统一服务消息失败",
|
178
|
+
message_kind: :send_uniform_message_failed)
|
179
|
+
else
|
180
|
+
msg_logger.info { "{params: #{payload}, response: #{result}}" }
|
181
|
+
MiniProgram::ServiceResult.new(success: true,
|
182
|
+
data: result,
|
183
|
+
message: "发送统一服务消息成功",
|
184
|
+
message_kind: :send_uniform_message_success)
|
148
185
|
end
|
149
186
|
|
150
|
-
msg_logger.info { "{params: #{payload}, response: #{result}}"}
|
151
|
-
MiniProgram::ServiceResult.new(success: true, data: result)
|
152
187
|
end
|
153
188
|
|
154
189
|
# 获取用户手机号
|
@@ -165,17 +200,19 @@ module MiniProgram
|
|
165
200
|
|
166
201
|
MiniProgram::ServiceResult.new(
|
167
202
|
success: true,
|
203
|
+
message: "获取手机号成功",
|
204
|
+
message_kind: :get_phone_number_success,
|
168
205
|
data: {
|
169
206
|
openid: openid,
|
170
207
|
phone_num: phone_num
|
171
|
-
|
208
|
+
})
|
172
209
|
end
|
173
210
|
|
174
211
|
def config
|
175
212
|
appid, app_secret = if MiniProgram.appid && MiniProgram.app_secret
|
176
213
|
[MiniProgram.appid, MiniProgram.app_secret]
|
177
214
|
|
178
|
-
|
215
|
+
# 如果有挂载 WechatPayment 的 engine 时,使用里边的小程序配置
|
179
216
|
elsif Object.const_defined? "WechatPayment"
|
180
217
|
[WechatPayment.sub_appid || WechatPayment.appid, WechatPayment.sub_app_secret || WechatPayment.app_secret]
|
181
218
|
else
|
@@ -186,32 +223,38 @@ module MiniProgram
|
|
186
223
|
end
|
187
224
|
|
188
225
|
#获取小程序二维码
|
189
|
-
def qrcode_unlimited(scene:, page:, width: 280, check_path: true, env_version: "release")
|
226
|
+
def qrcode_unlimited(scene:, page:, width: 280, check_path: true, env_version: "release")
|
190
227
|
get_token_result = get_access_token
|
191
|
-
if get_access_token.failure?
|
228
|
+
if get_access_token.failure?
|
192
229
|
return get_token_result
|
193
230
|
end
|
194
|
-
|
231
|
+
|
195
232
|
api = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=#{get_token_result["access_token"]}"
|
196
|
-
|
197
|
-
params = {
|
233
|
+
|
234
|
+
params = {
|
198
235
|
scene:,
|
199
|
-
page:,
|
236
|
+
page:,
|
200
237
|
width:,
|
201
238
|
check_path:,
|
202
239
|
env_version:
|
203
240
|
}
|
204
|
-
|
205
|
-
result = post(api, params)
|
206
241
|
|
207
|
-
|
208
|
-
|
209
|
-
|
242
|
+
result = post(api, params)
|
243
|
+
|
244
|
+
if result["errcode"]
|
245
|
+
msg_logger.error { "{params: #{params}, response: #{result}}" }
|
246
|
+
MiniProgram::ServiceResult.new(success: false,
|
247
|
+
error: result,
|
248
|
+
message: "获取二维码失败",
|
249
|
+
message_kind: :get_unlimited_qrcode_failed)
|
250
|
+
else
|
251
|
+
MiniProgram::ServiceResult.new(success: true,
|
252
|
+
data: { image: result },
|
253
|
+
message: "获取二维码成功",
|
254
|
+
message_kind: :get_unlimited_qrcode_success)
|
210
255
|
end
|
211
|
-
|
212
|
-
MiniProgram::ServiceResult.new(success: true, data: { image: result })
|
213
256
|
end
|
214
|
-
|
257
|
+
|
215
258
|
private
|
216
259
|
|
217
260
|
def get(api, payload = {})
|
@@ -222,7 +265,7 @@ module MiniProgram
|
|
222
265
|
end
|
223
266
|
|
224
267
|
Net::HTTP.get(uri)
|
225
|
-
end
|
268
|
+
end
|
226
269
|
|
227
270
|
def post(api, payload = {}, options = {})
|
228
271
|
uri = URI(api)
|
@@ -232,14 +275,16 @@ module MiniProgram
|
|
232
275
|
options = {
|
233
276
|
use_ssl: true
|
234
277
|
}.merge(options)
|
235
|
-
|
278
|
+
|
236
279
|
res = Net::HTTP.start(uri.host, uri.port, **options) do |http|
|
237
280
|
http.request(req, payload.to_json)
|
238
|
-
end
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
281
|
+
end
|
282
|
+
|
283
|
+
image_content_types = ["image/jpeg", "image/jpg", "image/gif", "image/png"]
|
284
|
+
|
285
|
+
return res.body if res["Content-Type"].in? image_content_types
|
286
|
+
|
287
|
+
JSON.parse(res.body)
|
243
288
|
end
|
244
289
|
|
245
290
|
def decrypt_phone_data(encrypted_data, iv, session_key)
|
data/lib/mini_program/version.rb
CHANGED
data/lib/service_result.rb
CHANGED
@@ -2,9 +2,9 @@ module MiniProgram
|
|
2
2
|
class ServiceResult
|
3
3
|
attr_accessor :success,
|
4
4
|
:error,
|
5
|
-
:error_type,
|
6
5
|
:data,
|
7
6
|
:message,
|
7
|
+
:message_kind,
|
8
8
|
:message_type
|
9
9
|
|
10
10
|
delegate :[], :[]=, to: :data
|
@@ -13,12 +13,15 @@ module MiniProgram
|
|
13
13
|
error: nil,
|
14
14
|
message: nil,
|
15
15
|
message_type: nil,
|
16
|
+
message_kind: nil,
|
16
17
|
data: {})
|
18
|
+
|
17
19
|
self.success = success
|
18
20
|
self.data = (data.presence || {}).with_indifferent_access
|
19
21
|
self.error = error
|
20
22
|
self.message = message
|
21
23
|
self.message_type = message_type
|
24
|
+
self.message_kind = message_kind
|
22
25
|
end
|
23
26
|
|
24
27
|
alias success? :success
|
@@ -49,12 +52,12 @@ module MiniProgram
|
|
49
52
|
|
50
53
|
def as_json(options = nil)
|
51
54
|
{
|
52
|
-
success
|
53
|
-
data
|
54
|
-
message
|
55
|
+
success:,
|
56
|
+
data:,
|
57
|
+
message:,
|
55
58
|
message_type: get_message_type,
|
56
|
-
|
57
|
-
|
59
|
+
message_kind:,
|
60
|
+
error:,
|
58
61
|
}
|
59
62
|
end
|
60
63
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mini_program
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ian
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-02-
|
11
|
+
date: 2022-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|