// // 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!!"])) } } }