network.swift
14.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
//
// network.swift
// XSTLive
//
// Created by 葛建军 on 16/11/10.
// Copyright © 2016年 HANGZHOUTEAM. All rights reserved.
//
import Foundation
extension JSON{
func isSuccess()->Bool{
return self["status"].intValue==1
}
func contentData()->JSON{
return self["data"]
}
static func fromString(jsonString:String?)->JSON?{
if let dataFromString = jsonString?.data(using: String.Encoding.utf8, allowLossyConversion: false) {
let json = JSON(data: dataFromString)
return json
}
return nil
}
}
//http工具
final class KHttp{
private static func http(method:HTTPMethod,url:String,parameters: [String: AnyObject]? = nil,encoding: ParameterEncoding = URLEncoding.default,headers:[String: String]?=nil,completionHandler: @escaping (String?, NSError?) -> ()){
//认证相关设置
// let manager = Manager.sharedInstance
// manager.delegate.sessionDidReceiveChallenge = { session, challenge in
// //认证服务器证书
// if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
// let serverTrust:SecTrustRef = challenge.protectionSpace.serverTrust!
// let certificate = SecTrustGetCertificateAtIndex(serverTrust, 0)!
// let remoteCertificateData = CFBridgingRetain(SecCertificateCopyData(certificate))!
// let cerPath = NSBundle.mainBundle().pathForResource("pub",ofType: "cer")!
// let localCertificateData = NSData(contentsOfFile:cerPath)!
// if (remoteCertificateData.isEqualToData(localCertificateData) == true) {
// let credential = NSURLCredential(forTrust: serverTrust)
// challenge.sender?.useCredential(credential,
// forAuthenticationChallenge: challenge)
// return (NSURLSessionAuthChallengeDisposition.UseCredential,
// NSURLCredential(forTrust: challenge.protectionSpace.serverTrust!))
// }else{
// return (.CancelAuthenticationChallenge, nil)
// }
// }else{
// return (.CancelAuthenticationChallenge, nil)
// }
// }
request(url, method: method, parameters: parameters, encoding: encoding, headers: headers).responseString { (response) -> Void in
let error=response.result.error
let str=response.result.value
if let er=error{
AppDelegate.instance().window?.makeToast("加载失败:\(er.localizedDescription)", duration: 1, position: CSToastPositionBottom)
}
completionHandler(str,error as NSError?)
}
}
static func POST(url:String,parameters: [String: AnyObject]? = nil,encoding: ParameterEncoding = URLEncoding.default,headers:[String: String]?=nil,completionHandler: @escaping (String?, NSError?) -> ()){
var header:[String: String]
if let hd=headers {
header=hd
header.updateValue(getSign(), forKey: "sign")
}else{
header=["sign":getSign()]
}
KHttp.http(method: .post, url: url, parameters: parameters,encoding:encoding,headers:header,completionHandler:completionHandler)
}
static func GET(url:String,parameters: [String: AnyObject]? = nil,headers:[String: String]?=nil,completionHandler: @escaping (String?, NSError?) -> Void){
var header:[String: String]
if let hd=headers {
header=hd
header.updateValue(getSign(), forKey: "sign")
}else{
header=["sign":getSign()]
}
KHttp.http(method: .get, url: url, parameters: parameters,headers:header,completionHandler:completionHandler)
}
static func getSign()->String{
let timeFormatter=DateFormatter()
timeFormatter.dateFormat="yyyy-MM-dd-HH:mm:ss:sss"
let time=timeFormatter.string(from: Date())+"\(arc4random()%10000)"// let appKey="1e5b32490ad2e41ecc817849ea1310c6"
let appSecret="5d744518ac1c"
return (time.md5()+"/"+time.md5()+appSecret).md5().data(using: .ascii)?.base64EncodedString(options: []) ?? ""
}
}
final class HTTPServer{
static let HOST="http://60.190.202.49:8096/swagger/ui/index#"//"https://zbapi.myjxt.com"//"http://60.190.202.49:8096/swagger/ui/index#"
static let URL_OAUTH_TOKEN=HOST+"/OAuth/Token" //登录
static let URL_ACCOUNTPHONECAPTCHA=HOST+"/api/Account/PhoneCaptcha" //获取验证码
static let URL_ACCOUNTCREATEUSER=HOST+"/api/Account/CreateUser" //游客注册
static let URL_ACCOUNTUPDATEPASSWORD=HOST+"/api/Account/UpdatePassword" //重设密码
static let URL_ACCOUNTCURRENTINFO=HOST+"/api/Account/CurrentInfo" //获取当前登陆用户的信息
static let URL_ACCOUNTACTIVATEACCOUNT=HOST+"/api/Account/ActivateAccount"//激活账号
static let URL_ACCOUNTUPDATEUSER=HOST+"/api/Account/Updateuser" //修改用户信息
static let URL_ACCOUNTADDUSER=HOST+"/api/Account/AddUser" //
static let URL_COMMONGETCOURSEWAREVERSIONS=HOST+"/api/Common/GetCourseWareVersions" //获取所有的教材版本
static let URL_COMMONGETSUBJECTS=HOST+"/api/Common/GetSubjects" //获取学科
static let URL_COMMONGETSCHOOLTYPES=HOST+"/api/Common/GetSchoolTypes" //获取学段
static let URL_COMMONGETLUNBOLIST=HOST+"/api/Common/GetLunboList" //获取轮播图
static let URL_COMMONGETGRADES=HOST+"/api/Common/GetGrades" //根据学段获取年级
static let URL_COMMONGETCOURSEWAVES=HOST+"/api/Common/GetCourseWaves" //获取教材
static let URL_UPLOAD_FILE=HOST+"/api/Common/UploadFile" //文件上传接口,接受图片(gif,jpg,jpeg,png,bmp)、视频(flv,mp4)、音频(mp3,aac)
static let URL_COURSEGETHOTRESCOURSE=HOST+"/api/Course/GetHotRescourse" //获取热门微课/课件/电视台节目
static let URL_COMMONGETSUBJECTS=HOST+"/api/Course/GetResourceCount" //获取微课/课件/电视台节目的总数量
static let URL_COMMONGETSCHOOLTYPES=HOST+"/api/Course/GetTopTenSchool" //获取十佳校园电视台
static let URL_COMMONGETLUNBOLIST=HOST+"/api/Course/GetExcellentSchool" //获取优秀电视台
static let URL_COMMONGETGRADES=HOST+"/api/Course/GetExcellentProgram" //获取校园电视节目
static let URL_COMMONGETCOURSEWAVES=HOST+"/api/Course/GetResourceModel" //获取单个课程
static let URL_UPLOAD_FILE=HOST+"/api/Course/GetResourceList" //根据知识点/教材等各种条件来分页获取资源/课件
static let URL_COMMONGETLUNBOLIST=HOST+"/api/Course/GetWaveCatagory" //获取教材目录(已初始化成ztree所要求的格式)
static let URL_COMMONGETGRADES=HOST+"/api/Course/GetTopicCatagory" //获取知识点目录(已初始化成ztree所要求的格式)
static let URL_COMMONGETCOURSEWAVES=HOST+"/api/Course/GetTestCatagory" //获取考点目录(已初始化成ztree所要求的格式)
static let URL_UPLOAD_FILE=HOST+"/api/Course/GetTelevisionStationCatagory" //获取电视台目录
var token:String?{
return accountManager.token
}
var accountManager:AccountManager!
//上传图片
func uploadFile(file:NSURL,progress:((Int64, Int64, Int64) -> Void)? = nil,completionHandler: @escaping (String?, NSError?) -> Void){
upload(multipartFormData: { (multipartFormData) in
multipartFormData.append(file as URL, withName: "file")
}, usingThreshold: SessionManager.multipartFormDataEncodingMemoryThreshold, to: HTTPServer.URL_UPLOAD_FILE, method: .post, headers: nil) { (encodingResult) in
switch encodingResult {
case .success(let upload, _, _):
upload.responseString(completionHandler: { (response) in
completionHandler(response.result.value,response.result.error as NSError?)
})
case .failure(let encodingError):
completionHandler(nil,encodingError as NSError?)
}
}
}
//MARK:-Account个人信息有关
//登录
func login(parameters: [String : AnyObject]?,completionHandler:@escaping (String?, NSError?) -> ()){
let timeFormatter=DateFormatter()
timeFormatter.dateFormat="yyyy-MM-dd-HH:mm:ss:sss"
let time=timeFormatter.string(from: Date())+"\(arc4random()%10000)"
let appSecret="5d744518ac1c"
let authorization=(time.md5()+":"+(time.md5()+appSecret).md5()).data(using: String.Encoding.ascii)?.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0)) ?? ""
KHttp.POST(url: HTTPServer.URL_OAUTH_TOKEN, parameters: parameters,headers:["Authorization":"Basic "+authorization], completionHandler: completionHandler)
}
//更新token
func refreshToken(completionHandler:@escaping (String?, NSError?) -> Void,token refresh_token:String){
let timeFormatter=DateFormatter()
timeFormatter.dateFormat="yyyy-MM-dd-HH:mm:ss:sss"
let time=timeFormatter.string(from: Date())+"\(arc4random()%10000)"
let appSecret="5d744518ac1c"
let authorization=(time.md5()+":"+(time.md5()+appSecret).md5()).data(using: String.Encoding.ascii)?.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0)) ?? ""
KHttp.POST(url: HTTPServer.URL_OAUTH_TOKEN, parameters:["grant_type":"refresh_token" as AnyObject,"refresh_token":refresh_token as AnyObject], headers:["Authorization":"Basic "+authorization],completionHandler: completionHandler)
}
//获取验证码
func getChangePhoneCaptcha(mobile:String,completionHandler:@escaping (String?, NSError?) -> Void){
KHttp.GET(url: HTTPServer.URL_ACCOUNTPHONECAPTCHA,parameters:["mobile":mobile as AnyObject],headers:["Authorization":token!], completionHandler: completionHandler)
}
//游客注册
func getCreateUser(parameters: [String : AnyObject]?,completionHandler:@escaping (String?, NSError?) -> ()){
KHttp.POST(url: HTTPServer.URL_ACCOUNTCREATEUSER, parameters: parameters,headers:["Authorization":token!], completionHandler: completionHandler)
}
//重设密码
func getUpdatePassword(parameters: [String : AnyObject]?,completionHandler:@escaping (String?, NSError?) -> ()){
KHttp.GET(url: HTTPServer.URL_ACCOUNTUPDATEPASSWORD, parameters: parameters,headers:["Authorization":token!], completionHandler: completionHandler)
}
//获取当前登陆用户的信息
func getCurrentInfo(parameters: [String : AnyObject]?,completionHandler:@escaping (String?, NSError?) -> ()){
KHttp.GET(url: HTTPServer.URL_ACCOUNTCURRENTINFO, parameters: parameters,headers:["Authorization":token!], completionHandler: completionHandler)
}
//激活账号
func postActivateAccount(parameters: [String : AnyObject]?,completionHandler:@escaping (String?, NSError?) -> ()){
KHttp.POST(url: HTTPServer.URL_ACCOUNTACTIVATEACCOUNT, parameters: parameters,headers:["Authorization":token!], completionHandler: completionHandler)
}
//修改用户信息
func postUpdateUser(parameters: [String : AnyObject]?,completionHandler:@escaping (String?, NSError?) -> ()){
KHttp.POST(url: HTTPServer.URL_ACCOUNTUPDATEUSER, parameters: parameters,headers:["Authorization":token!], completionHandler: completionHandler)
}
//
func getAddUser(parameters: [String : AnyObject]?,completionHandler:@escaping (String?, NSError?) -> ()){
KHttp.GET(url: HTTPServer.URL_ACCOUNTADDUSER, parameters: parameters,headers:["Authorization":token!], completionHandler: completionHandler)
}
//MARK:-Common
//获取所有的教材版本
func getCourseWareVersions(parameters: [String : AnyObject]?,completionHandler:@escaping (String?, NSError?) -> ()){
KHttp.GET(url: HTTPServer.URL_COMMONGETCOURSEWAREVERSIONS, parameters: parameters,headers:["Authorization":token!], completionHandler: completionHandler)
}
//获取学科
func getSubjects(parameters: [String : AnyObject]?,completionHandler:@escaping (String?, NSError?) -> ()){
KHttp.GET(url: HTTPServer.URL_COMMONGETSUBJECTS, parameters: parameters,headers:["Authorization":token!], completionHandler: completionHandler)
}
//获取学段
func getSchoolTypes(parameters: [String : AnyObject]?,completionHandler:@escaping (String?, NSError?) -> ()){
KHttp.GET(url: HTTPServer.URL_COMMONGETSCHOOLTYPES, parameters: parameters,headers:["Authorization":token!], completionHandler: completionHandler)
}
//获取轮播图 type:0-视频云前端轮播图 1-校园电视台轮播图
func getLunboList(parameters: [String : AnyObject]?,completionHandler:@escaping (String?, NSError?) -> ()){
KHttp.GET(url: HTTPServer.URL_COMMONGETLUNBOLIST, parameters: parameters,headers:["Authorization":token!], completionHandler: completionHandler)
}
//根据学段获取年级
func getGrades(parameters: [String : AnyObject]?,completionHandler:@escaping (String?, NSError?) -> ()){
KHttp.GET(url: HTTPServer.URL_COMMONGETGRADES, parameters: parameters,headers:["Authorization":token!], completionHandler: completionHandler)
}
//获取教材
func getCourseWaves(parameters: [String : AnyObject]?,completionHandler:@escaping (String?, NSError?) -> ()){
KHttp.GET(url: HTTPServer.URL_COMMONGETCOURSEWAVES, parameters: parameters,headers:["Authorization":token!], completionHandler: completionHandler)
}
//MARK:-Course
//MARK:-DataStatistics
//MARK:-UserCenter
}
let SERVER_MESSAGE=393939
func httpJsonResule(jsonString:String?,error:NSError?,successHandler:(JSON)->Void,failHandler:(NSError)->Void){
let json=JSON.fromString(jsonString: jsonString)
if let info=json{
if info.isSuccess(){
successHandler(info)
}else{
failHandler(NSError(domain: "shunzhi.net",
code: SERVER_MESSAGE,
userInfo: [NSLocalizedDescriptionKey:info["message"].stringValue]))
}
}else{
if let e=error{
failHandler(e)
}else{
failHandler(NSError(domain: "shunzhi.net",
code: 0,
userInfo: [NSLocalizedDescriptionKey:"not a json!!"]))
}
}
}