wechate 0.1.5 → 0.1.7
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/lib/wechate/client.rb +3 -91
- data/lib/wechate/version.rb +1 -1
- data/lib/wechate.rb +2 -2
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: de6b4f8c972f76415dd2d2ec1551db5b9a304873
|
|
4
|
+
data.tar.gz: 92f7891c51d0f26056094619ec449d0cd30c46d5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8bc2fa109b3360a32cca4a7a077489a6358b6f37f3001250d3585ec751365168cc5ebb23985a6e5281fbeea51faba9aaa098f64990dde34ffa03fc438c7380db
|
|
7
|
+
data.tar.gz: 853cc40e380ade2f5d5344b601172500c063c9d0166dc0f9c3de05f70f468e44c2e09aa2a594d6f0549a9c990a1177cc8f6e530f7b681e12300dbc945430caa3
|
data/lib/wechate/client.rb
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
|
+
require 'json'
|
|
1
2
|
require 'nokogiri'
|
|
2
3
|
require_relative 'http'
|
|
3
4
|
require_relative 'aes'
|
|
4
5
|
|
|
5
6
|
module Wechate
|
|
6
|
-
|
|
7
|
+
|
|
7
8
|
class Client
|
|
8
9
|
include Wechate::Http
|
|
9
10
|
include Wechate::Aes
|
|
10
11
|
|
|
11
|
-
def initialize
|
|
12
|
+
def initialize appid,secret
|
|
12
13
|
@host_api = 'https://qyapi.weixin.qq.com'
|
|
13
|
-
@aeskey = aeskey
|
|
14
|
-
@token = token
|
|
15
14
|
@appid = appid
|
|
16
15
|
@secret = secret
|
|
17
16
|
@access_token = nil
|
|
@@ -33,10 +32,6 @@ module Wechate
|
|
|
33
32
|
|
|
34
33
|
end
|
|
35
34
|
|
|
36
|
-
def worker=(worker)
|
|
37
|
-
@worker = worker
|
|
38
|
-
end
|
|
39
|
-
|
|
40
35
|
def department_list
|
|
41
36
|
data = api_get(:department_list)
|
|
42
37
|
data["department"]
|
|
@@ -69,91 +64,8 @@ module Wechate
|
|
|
69
64
|
"articles"=>message
|
|
70
65
|
}
|
|
71
66
|
end
|
|
72
|
-
|
|
73
67
|
api_post(:message_send,params.to_json.gsub(/\\u([0-9a-z]{4})/) {|s| [$1.to_i(16)].pack("U")})
|
|
74
68
|
end
|
|
75
|
-
|
|
76
|
-
def pong params,timestamp,nonce
|
|
77
|
-
message = decode(params[:xml][:Encrypt],params[:timestamp],params[:nonce],params[:msg_signature])
|
|
78
|
-
|
|
79
|
-
xml = Nokogiri::XML(message)
|
|
80
|
-
fromUserName = xml.xpath("//FromUserName").text
|
|
81
|
-
toUserName = xml.xpath("//ToUserName").text
|
|
82
|
-
timestamp = Time.now.to_i.to_s
|
|
83
|
-
response = get_response(xml)
|
|
84
|
-
msg_encrypt = case response
|
|
85
|
-
when String
|
|
86
|
-
build_text(fromUserName,toUserName,timestamp,response)
|
|
87
|
-
when Array
|
|
88
|
-
build_news(fromUserName,toUserName,timestamp,response)
|
|
89
|
-
when URI
|
|
90
|
-
build_image(fromUserName,toUserName,timestamp,response)
|
|
91
|
-
end
|
|
92
|
-
encode(msg_encrypt,timestamp,nonce,toUserName)
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
def get_response xml
|
|
96
|
-
raise "Invalid worker" unless @worker
|
|
97
|
-
create_time = xml.xpath("//CreateTime").text
|
|
98
|
-
msg_type = xml.xpath("//MsgType").text
|
|
99
|
-
fromUserName = xml.xpath("//FromUserName").text
|
|
100
|
-
agent_id = xml.xpath("//AgentID").text
|
|
101
|
-
|
|
102
|
-
ret = case msg_type
|
|
103
|
-
when "event"
|
|
104
|
-
event = xml.xpath("//Event").text
|
|
105
|
-
event_key = xml.xpath("//EventKey").text
|
|
106
|
-
ret = case event
|
|
107
|
-
when "click"
|
|
108
|
-
@worker.click_callback(fromUserName,event_key,create_time)
|
|
109
|
-
when "scancode_push"
|
|
110
|
-
when "scancode_waitmsg"
|
|
111
|
-
@worker.scancode_callback(fromUserName,event_key,xml.xpath("//ScanResult").text)
|
|
112
|
-
when "location_select"
|
|
113
|
-
when "pic_photo_or_album"
|
|
114
|
-
@worker.unknown_event(fromUserName,event_key)
|
|
115
|
-
else
|
|
116
|
-
@worker.unknown_event(fromUserName,event_key)
|
|
117
|
-
end
|
|
118
|
-
else
|
|
119
|
-
msg_id = xml.xpath("//MsgId").text
|
|
120
|
-
case msg_type
|
|
121
|
-
when "text"
|
|
122
|
-
@worker.text_callback(fromUserName,msg_id,xml.xpath("//PicUrl").text)
|
|
123
|
-
when "image"
|
|
124
|
-
args = {:pic=>xml.xpath("//PicUrl").text,
|
|
125
|
-
:media_id=>xml.xpath("//MediaId").text}
|
|
126
|
-
@worker.image_callback(fromUserName,msg_id,args)
|
|
127
|
-
when "location"
|
|
128
|
-
args = {:location=>{:lat=>xml.xpath("//Location_X").text,
|
|
129
|
-
:lng=>xml.xpath("//Location_Y").text},
|
|
130
|
-
:scale=>xml.xpath("//Scale").text,
|
|
131
|
-
:lable=>xml.xpath("//Label").text}
|
|
132
|
-
@worker.location_callback(fromUserName,msg_id,args)
|
|
133
|
-
when "voice"
|
|
134
|
-
args = {:format=>xml.xpath("//Format").text,
|
|
135
|
-
:media_id=>xml.xpath("//MediaId").text}
|
|
136
|
-
@worker.voice_callback(fromUserName,msg_id,args)
|
|
137
|
-
end
|
|
138
|
-
end
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
def build_text fromUserName,toUserName,timestamp,response
|
|
142
|
-
"<xml><ToUserName><![CDATA[#{fromUserName}]]></ToUserName><FromUserName><![CDATA[#{toUserName}]]></FromUserName><CreateTime>#{timestamp}</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[#{response}]]></Content></xml>"
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
def build_image fromUserName,toUserName,timestamp,response
|
|
146
|
-
"<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>12345678</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>2</ArticleCount><Articles><item><Title><![CDATA[title1]]></Title> <Description><![CDATA[description1]]></Description><PicUrl><![CDATA[picurl]]></PicUrl><Url><![CDATA[url]]></Url></item></Articles></xml>"
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
def build_news fromUserName,toUserName,timestamp,response
|
|
150
|
-
items = response.map do |item|
|
|
151
|
-
"<item><Title><![CDATA[#{item.title}]]></Title><Description><![CDATA[#{item.description}]]></Description><PicUrl><![CDATA[#{item.picurl}]]></PicUrl><Url><![CDATA[#{item.url}]]></Url></item>"
|
|
152
|
-
end.join
|
|
153
|
-
|
|
154
|
-
"<xml><ToUserName><![CDATA[#{fromUserName}]]></ToUserName><FromUserName><![CDATA[#{toUserName}]]></FromUserName><CreateTime>#{timestamp}</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>#{response.length}</ArticleCount><Articles>#{items}</Articles></xml>"
|
|
155
|
-
end
|
|
156
|
-
|
|
157
69
|
end
|
|
158
70
|
|
|
159
71
|
end
|
data/lib/wechate/version.rb
CHANGED
data/lib/wechate.rb
CHANGED
|
@@ -4,7 +4,7 @@ require 'digest/sha1'
|
|
|
4
4
|
require 'faraday'
|
|
5
5
|
require 'nokogiri'
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
require "wechate/app"
|
|
8
8
|
require "wechate/client"
|
|
9
9
|
require "wechate/aes"
|
|
10
10
|
require "wechate/http"
|
|
@@ -12,5 +12,5 @@ require "wechate/factory"
|
|
|
12
12
|
require "wechate/worker"
|
|
13
13
|
|
|
14
14
|
module Wechate
|
|
15
|
-
|
|
15
|
+
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
|
|
16
16
|
end
|