blob: b226af8d8b84668c7096eb524b4721de5b5435e9 [file] [log] [blame]
zongqiang.zhangb8ab9b42015-07-10 17:45:20 +08001package main
2
3//swwebservice
4
5import (
6 "bytes"
7 "crypto/hmac"
8 "crypto/sha1"
9 "encoding/json"
10 "fmt"
11 log "github.com/Sirupsen/logrus"
12 "net"
13 "net/http"
14 "net/url"
15 "time"
16)
Tang Cheng32e32562015-07-08 17:08:03 +080017
18func dailTimeout(network, addr string) (net.Conn, error) {
zongqiang.zhangb8ab9b42015-07-10 17:45:20 +080019 // default_timeout := time.Duration(theSession.DefaultTimeout) * time.Second
20 default_timeout := time.Duration(3) * time.Second
Tang Cheng32e32562015-07-08 17:08:03 +080021 return net.DialTimeout(network, addr, default_timeout)
22}
23
24type WebSession struct {
25 AppId string
zongqiang.zhangb8ab9b42015-07-10 17:45:20 +080026 TermId string
27 Appsecret string
28 AccessToken string
Tang Cheng32e32562015-07-08 17:08:03 +080029 BaseUrl string
30 DefaultTimeout int
31 session_key string
32}
33
zongqiang.zhangb8ab9b42015-07-10 17:45:20 +080034type MessageReader struct {
35 FuncNo int
36 ColumnNames []string
37 ColumnDescs []string
38 RowData [][]interface{}
39}
40
41type MessageWriter struct {
42 FuncNo int
43 Attributes map[string]string
44 ColumnNames []string
45 ColumnDescs []string
46 RowData [][]interface{}
47}
48
49func NewMessageWriter(funcno int) *MessageWriter {
50 return &MessageWriter{
51 FuncNo: funcno,
52 Attributes: make(map[string]string),
53 ColumnNames: make([]string, 0),
54 ColumnDescs: make([]string, 0)}
55}
56func (m *MessageWriter) SetAttr(name, value string) {
57 m.Attributes[name] = value
58}
59func (m *MessageWriter) AddCol(name, desc string) {
60 m.ColumnNames = append(m.ColumnNames, name)
61 m.ColumnDescs = append(m.ColumnDescs, desc)
62}
63func (m *MessageWriter) AddRow(data []string) {
64 // m.RowData[] = append(m.RowData)
65}
66
Tang Cheng32e32562015-07-08 17:08:03 +080067func (w *WebSession) DoGet(uri string, params map[string]string) (*http.Response, error) {
68 transport := http.Transport{Dial: dailTimeout}
69
70 client := http.Client{Transport: &transport}
71
72 full_url := w.BaseUrl + uri
73
74 vl := url.Values{}
zongqiang.zhangb8ab9b42015-07-10 17:45:20 +080075 // vl.Add("app_id", w.AppId)
76 // ts := w.GetTimestamp()
77 // vl.Add("timestamp", ts)
Tang Cheng32e32562015-07-08 17:08:03 +080078
79 if params != nil {
80 for k, v := range params {
81 vl.Add(k, v)
82 }
83 }
zongqiang.zhangb8ab9b42015-07-10 17:45:20 +080084 // vl.Add("sign", w.Sign(ts, vl.Encode()))
Tang Cheng32e32562015-07-08 17:08:03 +080085 full_url = full_url + "?" + vl.Encode()
86 return client.Get(full_url)
87}
88
89func (w *WebSession) GetTimestamp() string {
90 t := time.Now()
91 return fmt.Sprintf("%04d%02d%02d%02d%02d%02d", t.Year(), t.Month(), t.Day(),
92 t.Hour(), t.Minute(), t.Second())
93}
94
zongqiang.zhangb8ab9b42015-07-10 17:45:20 +080095func (w *WebSession) Sign(message string) string {
96 // pridata := accesstoken + timestamp
97 mac := hmac.New(sha1.New, []byte(w.session_key))
98 mac.Write([]byte(message))
99 res := mac.Sum(nil)
100 // res := sha1.Sum([]byte(pridata))
101 return string(res[0:])
Tang Cheng32e32562015-07-08 17:08:03 +0800102}
103
104func (w *WebSession) DoPost(uri string, param map[string]string, json_data []byte) (*http.Response, error) {
105 transport := http.Transport{Dial: dailTimeout}
106 client := &http.Client{Transport: &transport}
107 vl := url.Values{}
108 vl.Add("app_id", w.AppId)
109 ts := w.GetTimestamp()
110 vl.Add("timestamp", ts)
zongqiang.zhangb8ab9b42015-07-10 17:45:20 +0800111 vl.Add("sign", w.Sign(ts+vl.Encode()))
Tang Cheng32e32562015-07-08 17:08:03 +0800112 if param != nil {
113 for k, v := range param {
114 vl.Add(k, v)
115 }
116 }
117 if json_data != nil {
118 vl.Add("request_data", string(json_data))
119 }
zongqiang.zhangb8ab9b42015-07-10 17:45:20 +0800120
Tang Cheng32e32562015-07-08 17:08:03 +0800121 full_url := w.BaseUrl + uri
122 log.Debugf("Url=%v", full_url)
123 r, err := client.Post(full_url, "application/x-www-form-urlencoded", bytes.NewReader([]byte(vl.Encode())))
124 if err != nil || r.StatusCode != 200 {
125 log.Errorf("Status=%v, err=%v", r, err)
126 }
127 return r, err
128}
129
130func (w *WebSession) Auth() error {
zongqiang.zhangb8ab9b42015-07-10 17:45:20 +0800131
132 // now := time.Now()
Tang Cheng32e32562015-07-08 17:08:03 +0800133 return nil
134}
zongqiang.zhangb8ab9b42015-07-10 17:45:20 +0800135
136func NewSession(appid, appsecret, termid, baseurl string, timeout int) *WebSession {
137 return &WebSession{
138 AppId: appid,
139 Appsecret: appsecret,
140 TermId: termid,
141 BaseUrl: baseurl,
142 DefaultTimeout: timeout,
143 }
144}
145
146func (w *WebSession) GetAuthToken() {
147 type FormJson struct {
148 AppId string `json:"app_id"`
149 TermId string `json:"term_id"`
150 AccessToken string `json:"access_token"`
151 }
152
153 uri := fmt.Sprintf("/yktapi/services/authservice/getauth/%06d/getaccesstoken", w.AppId)
154
155 params := make(map[string]string)
156 params["term_id"] = w.TermId
157 r, err := w.DoGet(uri, params)
158
159 if err != nil || r.StatusCode != 200 {
160 fmt.Println("here")
161 // log.Errorf("Status = %v, err = %v\n", r.StatusCode, err)
162 return
163 }
164
165 if r.ContentLength == -1 {
166 log.Error("no response")
167 return
168 }
169 contents := make([]byte, r.ContentLength)
170 r.Body.Read(contents)
171
172 var s FormJson
173 err = json.Unmarshal(contents, &s)
174 if err != nil {
175 log.Errorf("json unmarshal err %v", err)
176 }
177
178 w.AccessToken = s.AccessToken
179
180 return
181}
182func (w *WebSession) GetAppAccessKey() {
183 type FormJson struct {
184 AppId string `json:"app_id"`
185 TermId string `json:"term_id"`
186 session_key string `json:"session_key"`
187 card_key string `json:"card_key"`
188 }
189
190 uri := fmt.Sprintf("/yktapi/services/authservice/getauth/%06d", w.AppId)
191
192 params := make(map[string]string)
193 params["term_id"] = w.TermId
194 params["access_token"] = w.AccessToken
195 params["timestamp"] = w.GetTimestamp()
196 params["v"] = "1"
197 params["sign"] = w.Sign(w.AccessToken + params["timestamp"])
198 params["sign_method"] = "HMAC-SHA1"
199
200 r, err := w.DoPost(uri, params, nil)
201 if err != nil || r.StatusCode != 200 {
202 log.Errorf("Status = %v, err = %v\n", r.StatusCode, err)
203 }
204 if r.ContentLength == -1 {
205 log.Error("no response")
206 }
207 contents := make([]byte, r.ContentLength)
208 r.Body.Read(contents)
209
210 var s FormJson
211 err = json.Unmarshal(contents, &s)
212 if err != nil {
213 log.Errorf("json unmarshal err %v", err)
214 }
215 w.session_key = s.session_key
216 //keep card_keyl
217 return
218}
219func (w *WebSession) PushTransdtl(msg MessageWriter) {
220 type FormJson struct {
221 }
zongqiang.zhang1b2d6482015-07-10 17:57:03 +0800222 // uri := fmt.Sprintf("/yktapi/services/ecardservice")
zongqiang.zhangb8ab9b42015-07-10 17:45:20 +0800223
zongqiang.zhang1b2d6482015-07-10 17:57:03 +0800224 // params := make(map[string]string)
225 // params["term_id"] = w.TermId
226 // params["access_token"] = w.AccessToken
227 // params["timestamp"] = w.GetTimestamp()
228 // signMsg := w.AppId + w.TermId + w.session_key + params["timestamp"]
229 // params["sign"] = w.Sign(signMsg)
230 // params["sign_method"] = "HMAC-SHA1"
231 // temp := json.Marshal(msg)
232 // params["funcdata"] = string(temp[0:])
233
234 // r, err := w.DoPost(uri, params, nil)
235 // if err != nil || r.StatusCode != 200 {
236 // log.Errorf("Status = %v, err = %v\n", r.StatusCode, err)
237 // return
238 // }
239 // if r.ContentLength == -1 {
240 // log.Error("no response")
241 // return
242 // }
243 // contents := make([]byte, r.ContentLength)
244 // r.Body.Read(contents)
245
246 // var s FormJson
247 // err = json.Unmarshal(contents, &s)
248 // if err != nil {
249 // log.Errorf("json unmarshal err %v", err)
250 // return
251 // }
252 // temp = s.
zongqiang.zhangb8ab9b42015-07-10 17:45:20 +0800253}
254
255func main() {
256 websession := NewSession("10001", "", "100", "172.28.200.122:8080", 3)
257 fmt.Println(websession.AppId)
258 websession.GetAuthToken()
259 // websession.GetAppAccessKey()
260
261}