wechate 0.1.7 → 0.1.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: de6b4f8c972f76415dd2d2ec1551db5b9a304873
4
- data.tar.gz: 92f7891c51d0f26056094619ec449d0cd30c46d5
3
+ metadata.gz: af38687448ec64a52ba30b799abec8ca6772e204
4
+ data.tar.gz: e07d936749eb45c1476e6f653db18bd8f0d95090
5
5
  SHA512:
6
- metadata.gz: 8bc2fa109b3360a32cca4a7a077489a6358b6f37f3001250d3585ec751365168cc5ebb23985a6e5281fbeea51faba9aaa098f64990dde34ffa03fc438c7380db
7
- data.tar.gz: 853cc40e380ade2f5d5344b601172500c063c9d0166dc0f9c3de05f70f468e44c2e09aa2a594d6f0549a9c990a1177cc8f6e530f7b681e12300dbc945430caa3
6
+ metadata.gz: 5af352bcf9c455d125f9ecd5d4091cfe079b3ae16f04989a7963f64e48935fafd35ec689816f5723bb10184099f25305d2ece0a3a8548bb121acf0a4d99d214b
7
+ data.tar.gz: 37604356f2af53f6d3cec2e63fa01b29e728e7f0a73e7a06ffbb38f7af124da41976e483297b5de80f6d6e1efc13f66ccaf48eab2cf34d2ead4e605feb25b817
@@ -0,0 +1,119 @@
1
+ require 'nokogiri'
2
+ require_relative 'http'
3
+ require_relative 'aes'
4
+
5
+ module Wechate
6
+ class App
7
+ include Wechate::Aes
8
+
9
+ def initialize aeskey,token,appid=nil
10
+ @host_api = 'https://qyapi.weixin.qq.com'
11
+ @aeskey = aeskey
12
+ @token = token
13
+ @appid = appid
14
+ @worker = nil
15
+
16
+ @urls = {
17
+ :user_info => "/cgi-bin/user/info",
18
+ :menu => "/cgi-bin/menu/create",
19
+ :menu_get => "/cgi-bin/menu/get",
20
+ :user_list => "/cgi-bin/user/get",
21
+ :group_list => "/cgi-bin/groups/get",
22
+ :user_change_group => "/cgi-bin/groups/members/update",
23
+ :send => "/cgi-bin/message/custom/send",
24
+ :media => "/cgi-bin/media/get",
25
+ :message_send => "/cgi-bin/message/send",
26
+ :token => "/cgi-bin/gettoken",
27
+ :department_list => "/cgi-bin/department/list",
28
+ }
29
+
30
+ end
31
+
32
+ def worker=(worker)
33
+ @worker = worker
34
+ end
35
+
36
+ def pong params,timestamp,nonce
37
+ message = decode(params[:xml][:Encrypt],params[:timestamp],params[:nonce],params[:msg_signature])
38
+
39
+ xml = Nokogiri::XML(message)
40
+ fromUserName = xml.xpath("//FromUserName").text
41
+ toUserName = xml.xpath("//ToUserName").text
42
+ timestamp = Time.now.to_i.to_s
43
+ response = get_response(xml)
44
+ msg_encrypt = case response
45
+ when String
46
+ build_text(fromUserName,toUserName,timestamp,response)
47
+ when Array
48
+ build_news(fromUserName,toUserName,timestamp,response)
49
+ when URI
50
+ build_image(fromUserName,toUserName,timestamp,response)
51
+ end
52
+ encode(msg_encrypt,timestamp,nonce,toUserName)
53
+ end
54
+
55
+ def get_response xml
56
+ raise "Invalid worker" unless @worker
57
+ create_time = xml.xpath("//CreateTime").text
58
+ msg_type = xml.xpath("//MsgType").text
59
+ fromUserName = xml.xpath("//FromUserName").text
60
+ agent_id = xml.xpath("//AgentID").text
61
+
62
+ ret = case msg_type
63
+ when "event"
64
+ event = xml.xpath("//Event").text
65
+ event_key = xml.xpath("//EventKey").text
66
+ ret = case event
67
+ when "click"
68
+ @worker.click_callback(fromUserName,event_key,create_time)
69
+ when "scancode_push"
70
+ when "scancode_waitmsg"
71
+ @worker.scancode_callback(fromUserName,event_key,xml.xpath("//ScanResult").text)
72
+ when "location_select"
73
+ when "pic_photo_or_album"
74
+ @worker.unknown_event(fromUserName,event_key)
75
+ else
76
+ @worker.unknown_event(fromUserName,event_key)
77
+ end
78
+ else
79
+ msg_id = xml.xpath("//MsgId").text
80
+ case msg_type
81
+ when "text"
82
+ @worker.text_callback(fromUserName,msg_id,xml.xpath("//PicUrl").text)
83
+ when "image"
84
+ args = {:pic=>xml.xpath("//PicUrl").text,
85
+ :media_id=>xml.xpath("//MediaId").text}
86
+ @worker.image_callback(fromUserName,msg_id,args)
87
+ when "location"
88
+ args = {:location=>{:lat=>xml.xpath("//Location_X").text,
89
+ :lng=>xml.xpath("//Location_Y").text},
90
+ :scale=>xml.xpath("//Scale").text,
91
+ :lable=>xml.xpath("//Label").text}
92
+ @worker.location_callback(fromUserName,msg_id,args)
93
+ when "voice"
94
+ args = {:format=>xml.xpath("//Format").text,
95
+ :media_id=>xml.xpath("//MediaId").text}
96
+ @worker.voice_callback(fromUserName,msg_id,args)
97
+ end
98
+ end
99
+ end
100
+
101
+ def build_text fromUserName,toUserName,timestamp,response
102
+ "<xml><ToUserName><![CDATA[#{fromUserName}]]></ToUserName><FromUserName><![CDATA[#{toUserName}]]></FromUserName><CreateTime>#{timestamp}</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[#{response}]]></Content></xml>"
103
+ end
104
+
105
+ def build_image fromUserName,toUserName,timestamp,response
106
+ "<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>"
107
+ end
108
+
109
+ def build_news fromUserName,toUserName,timestamp,response
110
+ items = response.map do |item|
111
+ "<item><Title><![CDATA[#{item.title}]]></Title><Description><![CDATA[#{item.description}]]></Description><PicUrl><![CDATA[#{item.picurl}]]></PicUrl><Url><![CDATA[#{item.url}]]></Url></item>"
112
+ end.join
113
+
114
+ "<xml><ToUserName><![CDATA[#{fromUserName}]]></ToUserName><FromUserName><![CDATA[#{toUserName}]]></FromUserName><CreateTime>#{timestamp}</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>#{response.length}</ArticleCount><Articles>#{items}</Articles></xml>"
115
+ end
116
+
117
+ end
118
+
119
+ end
@@ -1,3 +1,3 @@
1
1
  module Wechate
2
- VERSION = "0.1.7"
2
+ VERSION = "0.1.8"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wechate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - goxplanet
@@ -76,6 +76,7 @@ files:
76
76
  - Gemfile
77
77
  - lib/wechate.rb
78
78
  - lib/wechate/aes.rb
79
+ - lib/wechate/app.rb
79
80
  - lib/wechate/client.rb
80
81
  - lib/wechate/factory.rb
81
82
  - lib/wechate/http.rb