123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890 |
- //
- // KMMemberCenterManager.swift
- // PDF Reader Pro
- //
- // Created by wanjun on 2024/10/21.
- //
- import Cocoa
- enum KMMemberCenterErrorCodeType: Int, CaseIterable {
- case UNKNOWN = 0 //未知
- case SUCCESS = 200 //正确
- case EXCEPTION_MSG_TOKEN_IS_INVALID = 304 // 无效的token或者token已过期
- case EXCEPTION_MSG_DEVICE_NUM_MAX = 305 // 您的登录设备已达上限,请退出其他设备重新登录
- case EXCEPTION_MSG_USER_NOT_LOGIN = 306 // 用户没有登录,请登录后再访问
- case EMAIL_VERIFY_CODE_KEY_ERROR = 309 // email code error!
- case EMAIL_REGISTER_ERROR = 310 // Register error!
- case EXCEPTION_MSG_PASSWORD_ERROR = 311 // 密码错误,您可以检查大小写状态
- case EXCEPTION_MSG_CODE_ACTION_ERROR = 312 // code action error
- case EXCEPTION_MSG_CODE_SEND_ERROR = 313 // code send error
- case EXCEPTION_MAIL_CODE_SEND_ERROR = 314 // mail send error
- case VERIFY_CODE_SEND_TOO_QUICKLY = 315 // code send too quickly
- case EXCEPTION_MSG_EMAIL_EXIST = 316 // 该邮箱已有账号,请前往登录
- case EXCEPTION_MSG_EMAIL_NOT_REGISTER = 317 // 当前账号未注册,点击下一步我们将为您注册账号
- case EXCEPTION_MSG_EMAIL_LOGOUT_ING = 318 // 注销中,无法登录,若有问题可联系客服
- case EXCEPTION_MSG_EMAIL_INVALID = 319 // 请输入正确的邮箱格式
- case EXCEPTION_MSG_PASSWORD_NOT_INCONSISTENT = 320 // 密码不一致,请重新输入
- case EXCEPTION_MSG_PASSWORD_SIZE_MIN = 321 // 密码请包含6~24个字符
- case EXCEPTION_MSG_PASSWORD_SIZE_MAX = 322 // 密码请包含6~24个字符
- case EXCEPTION_MSG_PLEASE_ADD_AUTH_CONFIG = 323 // please add auth config
- case EXCEPTION_MSG_USER_SUBSCRIPTION_IN_PROGRESS = 324 // 您目前还在订阅期内,暂时无法注销,请订阅期结束后再点击注销账号
- case EXCEPTION_TIME_TRANSFER_ERROR = 326 // 时间转换失败
- case EXCEPTION_MSG_PASSWORD_CONTAIN_EMPTY = 327 // 密码不能包含空格
-
- case EXCEPTION_MSG_CREATE_ORDER_PARAMETER = 328 // 支付方式异常
-
- case EXCEPTION_MSG_EVENT_IS_CURRENTLY_NOT_SUPPORTED = 329 // 当前事件暂不支持
- case EXCEPTION_MSG_THE_ACCOUNT_IS_ALREADY_LOGGED_IN_ON_OTHER_DEVICES = 330 // 账号已在其他设备登录
- case EXCEPTION_MSG_ABNORMAL_USER_STATUS = 331 // 当前邮箱已被停用或者处于注销中状态
- case EXCEPTION_MSG_APP_STORE_TICKET_VALIDATION_FAILED = 332 // Appstore票据验证失败"
- case EXCEPTION_MSG_APP_STORE_TICKET_VALIDATION_NEED_TO_RETRY = 333 //Appstore票据验证需要重试
- case EXCEPTION_MSG_REPEAT_SUBSCRIPTION = 334 // 用户已订阅该产品
- case EXCEPTION_MSG_RESTORING_PURCHASES_IS_NOT_CURRENTLY_SUPPORTED = 335 // 恢复购买暂不支持
- case EXCEPTION_MSG_USER_TRANSACTION_CANCELED_OR_FAILED = 336 // 用户交易取消或失败
- case EXCEPTION_MSG_CURRENT_ORDER_NOT_RECORDED = 337 // 当前订单末记录,请稍后重试
- case EXCEPTION_MSG_THE_SAME_USER = 338 //同一用户,无需处理
- case EXCEPTION_MSG_THIRD_PAY_ID_ILLEGAL = 339 //thirdPayld非法
- case EXCEPTION_MSG_ORDER_DOES_NOT_EXIST = 340 //订单不存在
-
- case EXCEPTION_MSG_THE_ORDER_STATUS_IS_ABNORMAL = 341 // 订单状态异常
- case EXCEPTION_MSG_TRANSACTION_ID_REPEAT = 342 // transactionld重复
- case EXCEPTION_TICKET_HAS_BEEN_BLOCKED = 343 // The ticket has been blocked
- case EXCEPTION_TICKET_HAS_BEEN_CREATED = 344 // 当前票据已创建订单
- case EXCEPTION_USER_IS_NOT_EDUCATION_USER = 345 // 用户不是教育用户
- case EXCEPTION_USER_HAS_EDUCATION = 346 // 用户近一年有教育购买订单
- case EXCEPTION_USER_CANNOT_BUY_PREMIUM = 347 // 用户已有标准版订阅,无法购买高级版
- case EXCEPTION_USER_CANNOT_BUY_VIP = 348 // 用户已有高级版订阅,无法购买标准版
- case EXCEPTION_USER_CANNOT_UPGRADE_VIP = 349 // 买断用户无法升级为标准版
- case EXCEPTION_COUPON_NOT_EXISTS = 350 // 优惠券不存在
- case EXCEPTION_COUPONTYPE_ERROR = 351 // 优惠券类型错误
- case EXCEPTION_COUPON_PRODUCT_ERROR = 352 // 优惠券关联产品错误
- case EXCEPTION_COUPON_INVALID = 353 // 优惠券已失效
- case EXCEPTION_PRODUCT_NOT_EXIST = 354 // 产品不存在
- case EXCEPTION_MSG_CONTACT_US = 355 //请联系我们获取最新折扣
- case EXCEPTION_MSG_APP_STORE_TRANSACTION_ID_VALIDATION_FAILED = 356 // 验证苹果交易失败
- case EXCEPTION_MSG_GOOGLE_STORE_TRANSACTION_ID_VALIDATION_FAILED = 357 // 验证谷歌交易失败
- case EXCEPTION_PRICE_ERROR = 358 // 价格错误
- case EXCEPTION_MSG_ORDER_CREATE_FAILED = 359 // 订单创建失败
- case USER_ALREADY_SUBSCRIBED_PLAN = 360 // 该用户已经是PDF Reader Pro订阅版会员,确定再赠送吗
- case USER_ALREADY_SUBSCRIBED_PACKAGE = 361 // 该用户已经是PDF Reader Pro永久版会员,无需再赠送哦
- case EXCEPTION_MSG_USER_NOT_EXIST = 400 //用户不存在
- case EXCEPTION_USER_ALREADY_LOTTERY = 364 // 用户已经抽过奖啦
- }
- @objc enum KMVerificationCodeType : Int {
- case login = 0 // 登录验证码
- case reset // 重置密码验证码
- case logout // 注销验证码
- }
- @objc enum KMBuyPlatformType : Int {
- case web = 0 // 官网
- case dmg // 重置密码验证码
- case macLite // Mac store免费版
- case exe
- case macPro // Mac store付费版
- case iOSLite // iOS免费版
- case iOSPro // iOS付费版
- case Android
- }
- typealias KMMemberCenterComplete = (_ success: Bool, _ result: KMMemberCenterResult?) -> Void
- typealias KMMemberProductComplete = (_ success: Bool, _ result: KMMemberProductResult?) -> Void
- typealias KMMemberRequestInfoComplete = (_ success: Bool, _ info: NSDictionary?) -> Void
- class KMMemberCenterManager: NSObject {
- static let manager = KMMemberCenterManager()
- private let configuration: KMMemberCenterConfig = KMMemberCenterConfig()
-
- // MARK: 判断有无网络
- func isConnectionAvailable() -> Bool {
- let reachability = Reachability(hostname: "www.apple.com")
- let state = reachability?.currentReachabilityStatus()
- if(state == NotReachable) {
- return false
- }
- return true
- }
-
- // MARK: 拼接URL(为Get类型)
- func constructURLString(baseURLString: String, parameters: [String: Any]) -> String? {
- // Ensure the base URL is valid
- guard var components = URLComponents(string: baseURLString) else {
- return nil
- }
-
- // Convert parameters to query items
- components.queryItems = parameters.map { key, value in
- URLQueryItem(name: key, value: "\(value)")
- }
-
- // Return the complete URL as a string
- return components.url?.absoluteString
- }
-
- // MARK: 登录模块
-
- /**
- @abstract 新会员系统重置密码
- @param email 邮箱
- @param verifyCode 验证码
- @param password 密码
- @param complete 回调
- */
- func resetPassword(email: String, verifyCode: String, password: String, _ complete: @escaping KMMemberCenterComplete) {
- let urlString = configuration.activityBaseURL() + "/member-system-sso/auth/memberResetPassword"
- // var escapedString = q
- // escapedString = String(data: escapedString.data(using: .utf8)!, encoding: .utf8)!
- let paraDict: [String: Any] = ["email": email,
- "verifyCode": verifyCode,
- "appId": "1",
- "password": password]
- let postData = try! JSONSerialization.data(withJSONObject: paraDict)
- var request = URLRequest(url: URL(string: urlString)!,timeoutInterval: Double.infinity)
- request.addValue("application/json", forHTTPHeaderField: "Content-Type")
- request.httpMethod = "POST"
- request.httpBody = postData
- let task = URLSession.shared.dataTask(with: request) { data, response, error in
- guard let data = data else {
- print(String(describing: error))
- return
- }
- let jsonObject = try? JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary ?? [:]
- if jsonObject != nil {
- let code: Int = jsonObject!["code"] as? Int ?? 0
- let result_bool: Bool = jsonObject!["result"] as? Bool ?? false
- let message: String = jsonObject!["msg"] as? String ?? ""
- let result = KMMemberCenterResult(code: code, msg: message, result: result_bool)
- if code == 200 {
- complete(true, result)
- } else {
- complete(false, result)
- }
- } else {
- complete(false, KMMemberCenterResult(code: 0, msg: "unknown error", result: false))
- }
- }
- task.resume()
-
- // let urlString = configuration.activityBaseURL() + "/member-system-sso/auth/memberResetPassword"
- // let params: [String: Any] = ["email": email,
- // "verifyCode": verifyCode,
- // "appId": "1",
- // "password": password]
- // KMRequestServer.requestServer.request(urlString: urlString, method: .post, params: params) { requestSerializer in
- //
- // } completion: { [weak self] (task, responseObject, error) in
- // var dic: NSDictionary = [:]
- // if error == nil, let responseObject = responseObject as? NSDictionary {
- // dic = responseObject
- // } else {
- // var info = responseObject
- // if let error = error {
- // if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- // info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- // }
- // }
- // dic = (info as? NSDictionary) ?? [:]
- // }
- //
- // let code: Int = dic["code"] as? Int ?? 0
- // let result_bool: Bool = dic["result"] as? Bool ?? false
- // let message: String = dic["msg"] as? String ?? ""
- //
- // let result = KMMemberCenterResult(code: code, msg: message, result: result_bool)
- //// let error = NSError(domain: message, code: code)
- // if code == 200 {
- // complete(true, result)
- // } else {
- // complete(false, result)
- // }
- // }
- }
-
- /**
- @abstract 验证邮箱(重置密码输入邮箱点击下一步时校验邮箱是否注册)
- @param email 邮箱
- @param complete 回调
- */
- func emailVerification(email: String, _ complete: @escaping KMMemberCenterComplete) {
- let urlString = String(format: "%@/member-system-sso/auth/validEmail?email=%@", configuration.activityBaseURL(), email)
- KMRequestServer.requestServer.request(urlString: urlString, method: .post, params: nil) { requestSerializer in
-
- } completion: { (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let code: Int = dic["code"] as? Int ?? 0
- let result_bool: Bool = dic["result"] as? Bool ?? false
- let message: String = dic["msg"] as? String ?? ""
- let result = KMMemberCenterResult(code: code, msg: message, result: result_bool)
- if code == 200 {
- complete(true, result)
- } else {
- complete(false, result)
- }
- }
- }
-
- /**
- @abstract 获取邮箱验证码
- @param action 验证码用途
- @param receiver 邮箱号
- @param complete 回调
- */
- func getVerificationCode(action: KMVerificationCodeType, receiver: String, _ complete: @escaping KMMemberCenterComplete) {
- let urlString = configuration.activityBaseURL() + "/member-system-sso/auth/getVerifyCode"
- var actionType = "member_login"
- if action == .reset {
- actionType = "member_reset_password"
- } else if action == .logout {
- actionType = "member_log_off"
- }
- let params: [String: Any] = ["action": actionType,
- "type": 0,
- "receiver": receiver,
- "appId": "1"]
- KMRequestServer.requestServer.request(urlString: urlString, method: .get, params: params) { requestSerializer in
-
- } completion: { (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let code: Int = dic["code"] as? Int ?? 0
- let result_bool: Bool = dic["result"] as? Bool ?? false
- let message: String = dic["msg"] as? String ?? ""
- let result = KMMemberCenterResult(code: code, msg: message, result: result_bool)
- if code == 200 {
- complete(true, result)
- } else {
- complete(false, result)
- }
- }
- }
-
- /**
- @abstract 实时检查邮件验证码
- @param type 验证码用途
- @param account 账户
- @param code 验证码
- @param complete 回调
- */
- func checkVerificationCode(type: KMVerificationCodeType, account: String, code: String, _ complete: @escaping KMMemberCenterComplete) {
- let urlString = configuration.activityBaseURL() + "/member-system-sso/auth/isEmailCodeValid"
- var actionType = "member_login"
- if type == .reset {
- actionType = "member_reset_password"
- } else if type == .logout {
- actionType = "user_log_off"
- }
- let params: [String: Any] = ["type": actionType,
- "account": account,
- "code": code,
- "appId": "1"]
- KMRequestServer.requestServer.request(urlString: urlString, method: .get, params: params) { requestSerializer in
-
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let code: Int = dic["code"] as? Int ?? 0
- let result_bool: Bool = dic["result"] as? Bool ?? false
- let message: String = dic["msg"] as? String ?? ""
- let result = KMMemberCenterResult(code: code, msg: message, result: result_bool)
- if code == 200 {
- complete(true, result)
- } else {
- complete(false, result)
- }
- }
- }
- /**
- @abstract 邮箱验证码登录 & 密码登录
- @param email 邮箱
- @param code 验证码/密码
- @param type 密码类型(验证码?密码?)
- @param complete 回调
- */
- func emailLogin(email: String, code: String, type: KMSignUpState, _ complete: @escaping KMMemberCenterComplete) {
- let urlString = configuration.activityBaseURL() + "/member-system-sso/auth/memberLogin"
- let uuid: String = GetHardwareUUID() ?? ""
- var params: [String: Any] = [:]
- if type == .verificationCode {
- params = ["email": email,
- "code": code,
- "appId": "1",
- "deviceSign": uuid,
- "deviceName": NSFullUserName(),
- "model": "mac"]
- } else {
- params = ["email": email,
- "password": code,
- "appId": "1",
- "deviceSign": uuid,
- "deviceName": NSFullUserName(),
- "model": "mac"]
- }
-
- KMRequestServer.requestServer.request(urlString: urlString, method: .post, params: params) { requestSerializer in
- // requestSerializer.setValue("Apifox/1.0.0 (https://www.apifox.cn)", forHTTPHeaderField: "User-Agent")
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let code: Int = dic["code"] as? Int ?? 0
- let result_dict: NSDictionary = dic["result"] as? NSDictionary ?? [:]
- let message: String = dic["msg"] as? String ?? ""
- var refresh_token = ""
- var access_token = ""
- var token_type = ""
- var expires_in = ""
- var scope = ""
- if let token = result_dict["refresh_token"] { refresh_token = token as! String }
- if let token = result_dict["access_token"] { access_token = token as! String }
- if let token = result_dict["token_type"] { token_type = token as! String }
- if let token = result_dict["expires_in"] { expires_in = token as! String }
- let loginResult = KMMemberLoginResult(refreshToken: refresh_token, accessToken: access_token, tokenType: token_type, expiresIn: expires_in)
-
- let result = KMMemberCenterResult(loginResult: loginResult)
- result.code = code
- result.msg = message
- // let error = NSError(domain: message, code: code)
- if code == 200 {
- complete(true, result)
- } else {
- complete(false, result)
- }
- }
- }
-
- /**
- @abstract 获取用户登录设备列表
- @param email 邮箱
- @param complete 回调
- */
- func getUserDeviceList(email: String, _ complete: @escaping KMMemberCenterComplete) {
- let urlString = configuration.activityBaseURL() + "/member-system-sso/auth/getLoginDeviceList?email=\(email)&appId=1"
- KMRequestServer.requestServer.request(urlString: urlString, method: .post, params: [:]) { requestSerializer in
-
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let code: Int = dic["code"] as? Int ?? 0
- let result_dict: Dictionary = dic["result"] as? Dictionary ?? [:]
- let message: String = dic["msg"] as? String ?? ""
-
- let deviceList: [Dictionary] = result_dict["deviceList"] as? [Dictionary] ?? [[:]]
- var deviceLists: [KMMemberDeviceList] = []
-
- for dict in deviceList {
- var device_id = ""
- var productId = ""
- var uniqueSn = ""
- var deviceName = ""
- var id = ""
- var model = ""
- if let token = dict["device_id"] {
- device_id = token as? String ?? ""
- }
- if let token = dict["productId"] {
- productId = token as? String ?? ""
- }
- if let token = dict["uniqueSn"] {
- uniqueSn = token as? String ?? ""
- }
- if let token = dict["deviceName"] {
- deviceName = token as? String ?? ""
- }
-
- if let token = dict["model"] {
- model = token as? String ?? ""
- }
-
- if let token = dict["id"] {
- id = token as? String ?? ""
- }
-
- let list = KMMemberDeviceList(deviceId: device_id, productId: productId, uniqueSn: uniqueSn, appId: "", device_model:model, deviceName: deviceName)
- list.id = id
- deviceLists.append(list)
- }
- var maxDeviceNum = 0
- if let token = result_dict["maxDeviceNum"] {
- maxDeviceNum = token as! Int
- }
- let result = KMMemberCenterResult(deviceListResult: deviceLists, maxDeviceNum: maxDeviceNum)
- if code == 200 {
- complete(true, result)
- } else {
- complete(false, result)
- }
- }
- }
-
- /**
- @abstract 登出用户的指定设备
- @param deviceId 设备记录ID
- @param complete 回调
- */
- func logoutDevice(deviceId: String, complete: @escaping KMMemberCenterComplete) {
- let urlString = configuration.activityBaseURL() + "/member-system-sso/auth/logoutDevice?deviceId=\(deviceId)"
- KMRequestServer.requestServer.request(urlString: urlString, method: .post, params: [:]) { requestSerializer in
-
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let code: Int = dic["code"] as? Int ?? 0
- let resultStr: String = dic["result"] as? String ?? ""
- let message: String = dic["msg"] as? String ?? ""
-
- let result = KMMemberCenterResult(code: code, msg: message, resultStr: resultStr)
- if code == 200 {
- complete(true, result)
- } else {
- complete(false, result)
- }
- }
- }
-
- // MARK: 个人信息模块
-
- /**
- @abstract 获取老带新已邀请人数
- @param complete 回调
- */
- func getInviteNum(_ complete: @escaping KMMemberCenterComplete) {
- let token: String = KMMemberInfo.shared.access_token
- if token == "" {
- complete(false, nil)
- return
- }
-
- let urlString = configuration.activityBaseURL() + "/member-system-sso/user/getInviteNum"
- KMRequestServer.requestServer.request(urlString: urlString, method: .post, params: nil) { requestSerializer in
- requestSerializer.setValue("Bearer " + token, forHTTPHeaderField: "Authorization")
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let code: Int = dic["code"] as? Int ?? 0
- let resultInt: Int = dic["result"] as? Int ?? 0
- let message: String = dic["msg"] as? String ?? ""
-
- let result = KMMemberCenterResult(code: code, msg: message, resultInt: resultInt)
- if code == 200 {
- complete(true, result)
- } else {
- complete(false, result)
- }
- }
- }
-
- /**
- @abstract 获取用户个人信息
- @param complete 回调
- */
- func userInfo(_ complete: @escaping KMMemberCenterComplete) {
- let token: String = KMMemberInfo.shared.access_token
- if token == "" {
- complete(false, nil)
- return
- }
-
- let urlString = configuration.activityBaseURL() + "/member-system-sso/user/info"
- KMRequestServer.requestServer.request(urlString: urlString, method: .get, params: nil) { requestSerializer in
- requestSerializer.setValue("Bearer " + token, forHTTPHeaderField: "Authorization")
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let code: Int = dic["code"] as? Int ?? 0
- let result_dict: NSDictionary = dic["result"] as? NSDictionary ?? [:]
- let message: String = dic["msg"] as? String ?? ""
-
- var userId = ""
- var email = ""
- var fullName = ""
- var activeVIP = KMMemberUserInfo()
- var aiPoint = 0
- var validFlag = ""
- var isHaveAIDiscount = ""
- var canTrail = ""
- if let token = result_dict["id"] { userId = token as! String }
- if let token = result_dict["email"] { email = token as! String }
- if let token = result_dict["fullName"] { fullName = token as! String }
-
- let activeVIP_dict: NSDictionary = result_dict["activeVIP"] as? NSDictionary ?? [:]
- var activeVIP_id = ""
- var activeVIP_userId = ""
- var activeVIP_status = 0
- var activeVIP_endDate = ""
- var activeVIP_payType = 0
- var activeVIP_productName = ""
- var activeVIP_levels = ""
- var activeVIP_platforms = ""
- var activeVIP_point = 0
- var activeVIP_maxDeviceNum = 0
- var activeVIP_paymentModel = ""
- var activeVIP_isAi = ""
- var activeVIP_cycle = 0
- if let token = activeVIP_dict["id"] as? String { activeVIP_id = token }
- if let token = activeVIP_dict["userId"] as? String { activeVIP_userId = token }
- if let token = activeVIP_dict["status"] as? Int { activeVIP_status = token }
- if let token = activeVIP_dict["endDate"] as? String {
-
- // 创建一个日期格式化器
- let dateFormatter = DateFormatter()
- dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
- // 将字符串转换为日期对象
- if let date = dateFormatter.date(from: token) {
- // 创建一个新的日期格式化器,用于只显示天
- let dayFormatter = DateFormatter()
- dayFormatter.dateFormat = "yyyy-MM-dd" // 只保留年月日部分
-
- activeVIP_endDate = dayFormatter.string(from: date)
- }
- }
- if let token = activeVIP_dict["payType"] as? Int { activeVIP_payType = token }
- if let token = activeVIP_dict["productName"] as? String { activeVIP_productName = token }
- if let token = activeVIP_dict["levels"] as? String { activeVIP_levels = token }
- if let token = activeVIP_dict["platforms"] as? String { activeVIP_platforms = token }
- if let token = activeVIP_dict["point"] as? Int { activeVIP_point = token }
- if let token = activeVIP_dict["maxDeviceNum"] as? Int { activeVIP_maxDeviceNum = token }
- if let token = activeVIP_dict["paymentModel"] as? String { activeVIP_paymentModel = token }
- if let token = activeVIP_dict["isAi"] as? String { activeVIP_isAi = token }
- if let token = activeVIP_dict["cycle"] as? Int { activeVIP_cycle = token }
- let userInfoActiveVIP = KMMemberUserInfoActiveVIP(id: activeVIP_id, userId: activeVIP_userId, status: activeVIP_status, endDate: activeVIP_endDate, payType: activeVIP_payType, productName: activeVIP_productName, levels: activeVIP_levels, platforms: activeVIP_platforms, point: activeVIP_point, maxDeviceNum: activeVIP_maxDeviceNum, paymentModel: activeVIP_paymentModel, isAi: activeVIP_isAi, cycle: activeVIP_cycle)
- let activeAI_dict: NSDictionary = result_dict["activeAI"] as? NSDictionary ?? [:]
- var activeAI_id = ""
- var activeAI_userId = ""
- var activeAI_status = 0
- var activeAI_endDate = ""
- var activeAI_payType = 0
- var activeAI_productName = ""
- var activeAI_levels = ""
- var activeAI_platforms = ""
- var activeAI_point = 0
- var activeAI_maxDeviceNum = 0
- var activeAI_paymentModel = ""
- var activeAI_isAi = ""
- var activeAI_cycle = 0
- if let token = activeAI_dict["id"] as? String { activeAI_id = token }
- if let token = activeAI_dict["userId"] as? String { activeAI_userId = token }
- if let token = activeAI_dict["status"] as? Int { activeAI_status = token }
- if let token = activeAI_dict["endDate"] as? String { activeAI_endDate = token }
- if let token = activeAI_dict["payType"] as? Int { activeAI_payType = token }
- if let token = activeAI_dict["productName"] as? String { activeAI_productName = token }
- if let token = activeAI_dict["levels"] as? String { activeAI_levels = token }
- if let token = activeAI_dict["platforms"] as? String { activeAI_platforms = token }
- if let token = activeAI_dict["point"] as? Int { activeAI_point = token }
- if let token = activeAI_dict["maxDeviceNum"] as? Int { activeAI_maxDeviceNum = token }
- if let token = activeAI_dict["paymentModel"] as? String { activeAI_paymentModel = token }
- if let token = activeAI_dict["isAi"] as? String { activeAI_isAi = token }
- if let token = activeAI_dict["cycle"] as? Int { activeAI_cycle = token }
- let userInfoActiveAI = KMMemberUserInfoActiveVIP(id: activeAI_id, userId: activeAI_userId, status: activeAI_status, endDate: activeAI_endDate, payType: activeAI_payType, productName: activeAI_productName, levels: activeAI_levels, platforms: activeAI_platforms, point: activeAI_point, maxDeviceNum: activeAI_maxDeviceNum, paymentModel: activeAI_paymentModel, isAi: activeAI_isAi, cycle: activeAI_cycle)
- if let token = result_dict["aiPoint"] { aiPoint = token as! Int }
- if let token = result_dict["validFlag"] { validFlag = token as! String }
- if let token = result_dict["isHaveAIDiscount"] { isHaveAIDiscount = token as! String }
- if let token = result_dict["canTrail"] { canTrail = token as! String }
- let userInfo = KMMemberUserInfo(id: userId, email: email, fullName: fullName, activeVIP: [userInfoActiveVIP], activeAI: [userInfoActiveAI], aiPoint: aiPoint, validFlag: validFlag, isHaveAIDiscount: isHaveAIDiscount, canTrail: canTrail)
- if let data = result_dict["avatarUrl"] as? String {
- userInfo.avatarUrl = data
- }
-
- let result = KMMemberCenterResult(code: code, msg: message, userInfo: userInfo)
- if code == 200 {
- complete(true, result)
- } else {
- complete(false, result)
- }
- }
- }
-
- /**
- @abstract 退出登录
- @param complete 回调
- */
- func userLogout(_ complete: @escaping KMMemberCenterComplete) {
- let token: String = KMMemberInfo.shared.access_token
- if token == "" {
- complete(false, nil)
- return
- }
- let uuid: String = GetHardwareUUID() ?? ""
- let urlString = String(format: "%@/member-system-sso/user/logout?deviceSign=%@&appId=1", configuration.activityBaseURL(),uuid)
- KMRequestServer.requestServer.request(urlString: urlString, method: .post, params: nil) { requestSerializer in
- requestSerializer.setValue("Bearer " + token, forHTTPHeaderField: "Authorization")
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let code: Int = dic["code"] as? Int ?? 0
- let result_bool: Bool = dic["result"] as? Bool ?? false
- let message: String = dic["msg"] as? String ?? ""
- let result = KMMemberCenterResult(code: code, msg: message, result: result_bool)
- if code == 200 {
- complete(true, result)
- } else {
- complete(false, result)
- }
- }
- }
-
- /**
- @abstract 获取用户当前会员情况
- @param complete 回调
- */
- func userRightList(_ complete: @escaping KMMemberCenterComplete) {
- let token: String = KMMemberInfo.shared.access_token
- if token == "" {
- complete(false, nil)
- return
- }
-
- let urlString = configuration.activityBaseURL() + "/member-system-sso//user/rightList"
- KMRequestServer.requestServer.request(urlString: urlString, method: .get, params: nil) { requestSerializer in
- requestSerializer.setValue("Bearer " + token, forHTTPHeaderField: "Authorization")
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let code: Int = dic["code"] as? Int ?? 0
- let result_Array: [NSDictionary] = dic["result"] as? [NSDictionary] ?? [[:]]
- let message: String = dic["msg"] as? String ?? ""
-
- var results: [KMMemberUserInfoActiveVIP] = []
- for dict1 in result_Array {
- var activeVIP_id = ""
- var activeVIP_userId = ""
- var activeVIP_status = 0
- var activeVIP_endDate = ""
- var activeVIP_payType = 0
- var activeVIP_productName = ""
- var activeVIP_levels = ""
- var activeVIP_platforms = ""
- var activeVIP_point = 0
- var activeVIP_maxDeviceNum = 0
- var activeVIP_paymentModel = ""
- var activeVIP_isAi = ""
- if let token = dict1["id"] { activeVIP_id = token as! String }
- if let token = dict1["userId"] { activeVIP_userId = token as! String }
- if let token = dict1["status"] { activeVIP_status = token as! Int }
- if let token = dict1["endDate"] { activeVIP_endDate = token as! String }
- if let token = dict1["payType"] { activeVIP_payType = token as! Int }
- if let token = dict1["productName"] { activeVIP_productName = token as! String }
- if let token = dict1["levels"] { activeVIP_levels = token as! String }
- if let token = dict1["platforms"] { activeVIP_platforms = token as! String }
- if let token = dict1["point"] { activeVIP_point = token as! Int }
- if let token = dict1["maxDeviceNum"] { activeVIP_maxDeviceNum = token as! Int }
- if let token = dict1["paymentModel"] { activeVIP_paymentModel = token as! String }
- if let token = dict1["isAi"] { activeVIP_isAi = token as! String }
- let userInfoActiveVIP = KMMemberUserInfoActiveVIP(id: activeVIP_id, userId: activeVIP_userId, status: activeVIP_status, endDate: activeVIP_endDate, payType: activeVIP_payType, productName: activeVIP_productName, levels: activeVIP_levels, platforms: activeVIP_platforms, point: activeVIP_point, maxDeviceNum: activeVIP_maxDeviceNum, paymentModel: activeVIP_paymentModel, isAi: activeVIP_isAi)
- results.append(userInfoActiveVIP)
- }
- let result = KMMemberCenterResult(code: code, msg: message, activeVIPs: results)
- if code == 200 {
- complete(true, result)
- } else {
- complete(false, result)
- }
- }
- }
-
- /**
- @abstract 用户手动注销
- @param code 邮箱验证码
- @param complete 回调
- */
- func userLogOffForUser(code: String, _ complete: @escaping KMMemberCenterComplete) {
- let token: String = KMMemberInfo.shared.access_token
- if token == "" {
- complete(false, nil)
- return
- }
-
- let urlString = String(format: "%@/member-system-sso/user/logOffForUser?code=%@&appId=1", configuration.activityBaseURL(), code)
- KMRequestServer.requestServer.request(urlString: urlString, method: .post, params: nil) { requestSerializer in
- requestSerializer.setValue("Bearer " + token, forHTTPHeaderField: "Authorization")
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let code: Int = dic["code"] as? Int ?? 0
- let message: String = dic["msg"] as? String ?? ""
- let result_dict: NSDictionary = dic["result"] as? NSDictionary ?? [:]
- var currentTime = ""
- var logOffTime = ""
- if let token = result_dict["currentTime"] { currentTime = token as! String }
- if let token = result_dict["logOffTime"] { logOffTime = token as! String }
- let logOff = KMMemberLogOff(currentTime: currentTime, logOffTime: logOffTime)
-
- let result = KMMemberCenterResult(code: code, msg: message, logOff: logOff)
- if code == 200 {
- complete(true, result)
- } else {
- complete(false, result)
- }
- }
- }
-
- /**
- @abstract 撤销注销申请
- @param complete 回调
- */
- func userRevokeCancel(_ complete: @escaping KMMemberCenterComplete) {
- let token: String = KMMemberInfo.shared.access_token
- if token == "" {
- complete(false, nil)
- return
- }
-
- let urlString = configuration.activityBaseURL() + "/member-system-sso/user/revokeCancel"
- KMRequestServer.requestServer.request(urlString: urlString, method: .post, params: nil) { requestSerializer in
- requestSerializer.setValue("Bearer " + token, forHTTPHeaderField: "Authorization")
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let code: Int = dic["code"] as? Int ?? 0
- let message: String = dic["msg"] as? String ?? ""
- let result_Bool: Bool = dic["result"] as? Bool ?? false
- let result = KMMemberCenterResult(code: code, msg: message, result: result_Bool)
- if code == 200 {
- complete(true, result)
- } else {
- complete(false, result)
- }
- }
- }
-
- // MARK: 商品模块
-
- /**
- @abstract 获取上架中的产品
- @param isEducation 是否教育优惠
- @param complete 回调
- */
- func getListingProducts(isEducation: Int, _ complete: @escaping KMMemberProductComplete) {
-
- let urlString = configuration.activityBaseURL() + "/pdf-office-website/web/getListingProducts"
- var platformId = "2"
- #if VERSION_FREE
-
- #if VERSION_DMG
- // DMG
- platformId = "2"
- #else
- // AppStore 免费版本
- #endif
- #else
- // AppStore 付费版
- platformId = "5"
- #endif
- let params: [String: Any] = ["isEducation": NSNumber(value: Int32(isEducation)),
- "platformId": platformId]
- if let urlNewString = constructURLString(baseURLString: urlString, parameters: params) {
- KMRequestServer.requestServer.request(urlString: urlNewString, method: .get, params: nil) { requestSerializer in
-
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let requestCode: Int = dic["code"] as? Int ?? 0
- let result_Array: [NSDictionary] = dic["result"] as? [NSDictionary] ?? [[:]]
- let message: String = dic["msg"] as? String ?? ""
-
- var results: [KMListingProductsModel] = []
- for dict1 in result_Array {
- var id = ""
- var productName = ""
- var maxDeviceNum = 0
- var levels = ""
- var platforms = ""
- var productLineId = 0
- var paymentModel = 0
- var cycle = 0
- var code = ""
-
- var price = NSNumber(value: 0.0)
- var displayPrice = NSNumber(value: 0.0)
- var upgradePrice = NSNumber(value: 0.0)
- var cnyPrice = NSNumber(value: 0.0)
- var displayCnyPrice = NSNumber(value: 0.0)
-
- var priceString:String?
- var displayPriceString:String?
- var upgradePriceString:String?
- var cnyPriceString:String?
- var displayCnyPriceString:String?
- var upgradecnyPriceString:String?
-
- if let token = dict1["id"] { id = token as? String ?? id }
- if let token = dict1["productName"] { productName = token as? String ?? productName }
-
- if let token = dict1["maxDeviceNum"] { maxDeviceNum = token as? Int ?? maxDeviceNum }
- if let token = dict1["levels"] { levels = token as? String ?? levels }
- if let token = dict1["platforms"] { platforms = token as? String ?? platforms }
- if let token = dict1["productLineId"] { productLineId = token as? Int ?? productLineId }
- if let token = dict1["paymentModel"] { paymentModel = token as? Int ?? paymentModel }
- if let token = dict1["cycle"] { cycle = token as? Int ?? cycle }
- if let token = dict1["code"] { code = token as? String ?? code }
-
- if let token = dict1["price"] as? NSNumber {
- let string = KMFormatNSNumber(token, to: 2)
- priceString = string
- price = token
- }
-
- if let token = dict1["displayPrice"] as? NSNumber {
- let string = KMFormatNSNumber(token, to: 2)
- displayPriceString = string
- displayPrice = token
- }
-
- if let token = dict1["cnyUpgradePrice"] as? NSNumber {
- let string = KMFormatNSNumber(token, to: 2)
- upgradecnyPriceString = string
- }
-
- if let token = dict1["upgradePrice"] as? NSNumber {
- let string = KMFormatNSNumber(token, to: 2)
- upgradePriceString = string
- upgradePrice = token
- }
-
- if let token = dict1["cnyPrice"] as? NSNumber {
- let string = KMFormatNSNumber(token, to: 2)
- cnyPriceString = string
- cnyPrice = token
- }
-
- if let token = dict1["cnyDisplayPrice"] as? NSNumber {
- let string = KMFormatNSNumber(token, to: 2)
- displayCnyPriceString = string
- displayCnyPrice = token
- }
- let products = KMListingProductsModel(id: id, productName: productName, price: priceString, maxDeviceNum: maxDeviceNum, displayPrice: displayPriceString, levels: levels, platforms: platforms, productLineId: productLineId, paymentModel: paymentModel, cycle: cycle, cnyPrice: cnyPriceString, displayCnyPrice: displayCnyPriceString, upgradePrice: upgradePriceString, code: code)
- products.individualPriceString = priceString
- products.individualCnyPriceString = cnyPriceString
- products.cnyUpgradePriceString = upgradecnyPriceString
- results.append(products)
- }
- let result = KMMemberProductResult(code: requestCode, msg: message, listingProducts: results)
- if requestCode == 200 {
- complete(true, result)
- } else {
- complete(false, result)
- }
- }
- } else {
- print("Invalid URL")
- complete(false, nil)
- }
- }
-
- /**
- @abstract 获取已登录用户购买商品价格
- @param productId 购买的产品id
- @param isEducation 是否教育优惠
- @param complete 回调
- */
- func getProductPriceForBuy(productId: String, isEducation: Int, userId: String, _ complete: @escaping KMMemberProductComplete) {
-
- let urlString = configuration.activityBaseURL() + "/pdf-office-website/web/getProductPriceForBuy"
- let params: [String: Any] = ["productId": productId,
- "isEducation": isEducation,
- "userId": userId]
- if let urlNewString = constructURLString(baseURLString: urlString, parameters: params) {
- KMRequestServer.requestServer.request(urlString: urlNewString, method: .get, params: nil) { requestSerializer in
-
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let requestCode: Int = dic["code"] as? Int ?? 0
- let result_Array: [NSDictionary] = [dic["result"]] as? [NSDictionary] ?? [[:]]
- let message: String = dic["msg"] as? String ?? ""
-
- var results: [KMListingProductsModel] = []
- for dict1 in result_Array {
- var id = ""
- var productName = ""
- var maxDeviceNum = 0
- var levels = ""
- var platforms = ""
- var productLineId = 0
- var paymentModel = 0
- var cycle = 0
- var code = ""
-
- var price = NSNumber(value: 0.0)
- var displayPrice = NSNumber(value: 0.0)
- var upgradePrice = NSNumber(value: 0.0)
- var cnyPrice = NSNumber(value: 0.0)
- var displayCnyPrice = NSNumber(value: 0.0)
-
- var priceString:String?
- var displayPriceString:String?
- var upgradePriceString:String?
- var cnyPriceString:String?
- var displayCnyPriceString:String?
- var upgradecnyPriceString:String?
- if let token = dict1["id"] { id = token as? String ?? id }
- if let token = dict1["productName"] { productName = token as? String ?? productName }
-
- if let token = dict1["maxDeviceNum"] { maxDeviceNum = token as? Int ?? maxDeviceNum }
- if let token = dict1["levels"] { levels = token as? String ?? levels }
- if let token = dict1["platforms"] { platforms = token as? String ?? platforms }
- if let token = dict1["productLineId"] { productLineId = token as? Int ?? productLineId }
- if let token = dict1["paymentModel"] { paymentModel = token as? Int ?? paymentModel }
- if let token = dict1["cycle"] { cycle = token as? Int ?? cycle }
- if let token = dict1["code"] { code = token as? String ?? code }
-
- if let token = dict1["price"] as? NSNumber {
- let string = KMFormatNSNumber(token, to: 2)
- priceString = string
- price = token
- }
- if let token = dict1["displayPrice"] as? NSNumber {
- let string = KMFormatNSNumber(token, to: 2)
- displayPriceString = string
- displayPrice = token
- }
- if let token = dict1["upgradePrice"] as? NSNumber {
- let string = KMFormatNSNumber(token, to: 2)
- upgradePriceString = string
- upgradePrice = token
- }
- if let token = dict1["cnyPrice"] as? NSNumber {
- let string = KMFormatNSNumber(token, to: 2)
- cnyPriceString = string
- cnyPrice = token
- }
- if let token = dict1["cnyDisplayPrice"] as? NSNumber {
- let string = KMFormatNSNumber(token, to: 2)
- displayCnyPriceString = string
- displayCnyPrice = token
- }
-
- if let token = dict1["cnyUpgradePrice"] as? NSNumber {
- let string = KMFormatNSNumber(token, to: 2)
- upgradecnyPriceString = string
- }
- let products = KMListingProductsModel(id: id, productName: productName, price: priceString, maxDeviceNum: maxDeviceNum, displayPrice: displayPriceString, levels: levels, platforms: platforms, productLineId: productLineId, paymentModel: paymentModel, cycle: cycle, cnyPrice: cnyPriceString, displayCnyPrice: displayCnyPriceString, upgradePrice: upgradePriceString, code: code)
- products.cnyUpgradePriceString = upgradecnyPriceString
- products.individualPriceString = priceString
- products.individualCnyPriceString = cnyPriceString
- results.append(products)
- }
- let result = KMMemberProductResult(code: requestCode, msg: message, listingProducts: results)
- if requestCode == 200 {
- complete(true, result)
- } else {
- complete(false, result)
- }
- }
- } else {
- print("Invalid URL")
- complete(false, nil)
- }
-
- }
-
- /**
- @abstract 获取批量阶段购买价格
- @param productId 购买的产品id
- @param num 批量个数
- @param complete 回调
- */
- func getBatchProductPrice(productId: String, num: Int, _ complete: @escaping KMMemberProductComplete) {
-
- let urlString = configuration.activityBaseURL() + "/pdf-office-website/web/getBatchProductPrice"
- let params: [String: Any] = ["productId": productId,
- "num": NSNumber(value: Int32(num))]
- if let urlNewString = constructURLString(baseURLString: urlString, parameters: params) {
- KMRequestServer.requestServer.request(urlString: urlNewString, method: .get, params: nil) { requestSerializer in
-
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let requestCode: Int = dic["code"] as? Int ?? 0
- let result: NSDictionary = dic["result"] as? NSDictionary ?? [:]
- let message: String = dic["msg"] as? String ?? ""
-
- var productId = ""
- var totalPrice = ""
- var price = ""
- var batchPrice = ""
- var cnyPrice = ""
- var cnyBatchPrice = ""
- var cnyTotalPrice = ""
- if let token = result["productId"] { productId = token as? String ?? productId}
- if let token = result["totalPrice"] { totalPrice = token as? String ?? totalPrice}
-
- if let token = result["price"] { price = token as? String ?? price}
- if let token = result["batchPrice"] { batchPrice = token as? String ?? batchPrice}
- if let token = result["cnyPrice"] { cnyPrice = token as? String ?? cnyPrice}
- if let token = result["cnyBatchPrice"] { cnyBatchPrice = token as? String ?? cnyBatchPrice}
- if let token = result["cnyTotalPrice"] { cnyTotalPrice = token as? String ?? cnyTotalPrice}
-
- let products = KMBatchProductPriceModel(productId: productId, totalPrice: totalPrice, price: price, batchPrice: batchPrice, cnyPrice: cnyPrice, cnyBatchPrice: cnyBatchPrice, cnyTotalPrice: cnyTotalPrice)
- let result1 = KMMemberProductResult(code: requestCode, msg: message, batchProductPrice: products)
- if requestCode == 200 {
- complete(true, result1)
- } else {
- complete(false, result1)
- }
- }
- } else {
- print("Invalid URL")
- }
- }
-
- /**
- @abstract 验证商品优惠券,返回商品优惠后价格
- @param productId 购买的产品id
- @param userId 用户ID
- @param code 优惠券
- @param complete 回调
- */
- func checkCoupon(productId: String, userId: String, code: String, _ complete: @escaping KMMemberProductComplete) {
- let token: String = KMMemberInfo.shared.access_token
- if token == "" {
- complete(false, nil)
- return
- }
- let urlString = configuration.activityBaseURL() + "/pdf-office-website/web/checkCoupon"
- let params: [String: Any] = ["productId": productId,
- "userId": userId,
- "code": code]
- if let urlNewString = constructURLString(baseURLString: urlString, parameters: params) {
- KMRequestServer.requestServer.request(urlString: urlNewString, method: .get, params: nil) { requestSerializer in
- requestSerializer.setValue("Bearer " + token, forHTTPHeaderField: "Authorization")
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let requestCode: Int = dic["code"] as? Int ?? 0
- let result: NSDictionary = dic["result"] as? NSDictionary ?? [:]
- let message: String = dic["msg"] as? String ?? ""
-
- var id = ""
- var productName = ""
- var maxDeviceNum = 0
- var levels = ""
- var platforms = ""
- var productLineId = 0
- var paymentModel = 0
- var cycle = 0
- var code = ""
-
- var price = NSNumber(value: 0.0)
- var displayPrice = NSNumber(value: 0.0)
- var upgradePrice = NSNumber(value: 0.0)
- var cnyPrice = NSNumber(value: 0.0)
- var displayCnyPrice = NSNumber(value: 0.0)
-
- var priceString:String?
- var displayPriceString:String?
- var upgradePriceString:String?
- var cnyPriceString:String?
- var displayCnyPriceString:String?
- var upgradecnyPriceString:String?
-
- if let token = result["id"] { id = token as? String ?? id }
- if let token = result["productName"] { productName = token as? String ?? productName }
-
- if let token = result["maxDeviceNum"] { maxDeviceNum = token as? Int ?? maxDeviceNum }
- if let token = result["levels"] { levels = token as? String ?? levels }
- if let token = result["platforms"] { platforms = token as? String ?? platforms }
- if let token = result["productLineId"] { productLineId = token as? Int ?? productLineId }
- if let token = result["paymentModel"] { paymentModel = token as? Int ?? paymentModel }
- if let token = result["cycle"] { cycle = token as? Int ?? cycle }
- if let token = result["code"] { code = token as? String ?? code }
-
- if let token = result["price"] as? NSNumber {
- let string = KMFormatNSNumber(token, to: 2)
- priceString = string
- price = token
- }
- if let token = result["displayPrice"] as? NSNumber {
- let string = KMFormatNSNumber(token, to: 2)
- displayPriceString = string
- displayPrice = token
- }
- if let token = result["upgradePrice"] as? NSNumber {
- let string = KMFormatNSNumber(token, to: 2)
- upgradePriceString = string
- upgradePrice = token
- }
- if let token = result["cnyPrice"] as? NSNumber {
- let string = KMFormatNSNumber(token, to: 2)
- cnyPriceString = string
- cnyPrice = token
- }
- if let token = result["cnyDisplayPrice"] as? NSNumber {
- let string = KMFormatNSNumber(token, to: 2)
- displayCnyPriceString = string
- displayCnyPrice = token
- }
-
- if let token = result["cnyUpgradePrice"] as? NSNumber {
- let string = KMFormatNSNumber(token, to: 2)
- upgradecnyPriceString = string
- }
- let products = KMCheckCouponModel(id: id, productName: productName, price: priceString, maxDeviceNum: maxDeviceNum, displayPrice: displayPriceString, levels: levels, platforms: platforms, productLineId: productLineId, paymentModel: paymentModel, cycle: cycle, cnyPrice: cnyPriceString, displayCnyPrice: displayCnyPriceString, upgradePrice: upgradePriceString, code: code)
- products.upgradecnyPriceString = upgradecnyPriceString
-
- let result1 = KMMemberProductResult(code: requestCode, msg: message, checkCoupon: products)
- if requestCode == 200 {
- complete(true, result1)
- } else {
- complete(false, result1)
- }
- }
- } else {
- print("Invalid URL")
- complete(false, nil)
- }
- }
-
- /**
- @abstract 检查邮箱教育优惠资格
- @param email 邮箱
- @param complete 回调
- */
- func checkEducation(email: String, _ complete: @escaping KMMemberProductComplete) {
-
- let urlString = configuration.activityBaseURL() + "/pdf-office-website/web/checkEducation"
- let params: [String: Any] = ["email": email]
- if let urlNewString = constructURLString(baseURLString: urlString, parameters: params) {
- KMRequestServer.requestServer.request(urlString: urlNewString, method: .get, params: nil) { requestSerializer in
-
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let requestCode: Int = dic["code"] as? Int ?? 0
- let result: NSDictionary = dic["result"] as? NSDictionary ?? [:]
- let message: String = dic["msg"] as? String ?? ""
-
- var productId = ""
- var totalPrice = ""
- var price = ""
- var batchPrice = ""
- var cnyPrice = ""
- var cnyBatchPrice = ""
- var cnyTotalPrice = ""
- if let token = result["productId"] { productId = token as? String ?? productId}
- if let token = result["totalPrice"] { totalPrice = token as? String ?? totalPrice}
- if let token = result["price"] { price = token as? String ?? price}
- if let token = result["batchPrice"] { batchPrice = token as? String ?? batchPrice}
- if let token = result["cnyPrice"] { cnyPrice = token as? String ?? cnyPrice}
- if let token = result["cnyBatchPrice"] { cnyBatchPrice = token as? String ?? cnyBatchPrice}
- if let token = result["cnyTotalPrice"] { cnyTotalPrice = token as? String ?? cnyTotalPrice}
- let products = KMBatchProductPriceModel(productId: productId, totalPrice: totalPrice, price: price, batchPrice: batchPrice, cnyPrice: cnyPrice, cnyBatchPrice: cnyBatchPrice, cnyTotalPrice: cnyTotalPrice)
- let result1 = KMMemberProductResult(code: requestCode, msg: message, batchProductPrice: products)
- if requestCode == 200 {
- complete(true, result1)
- } else {
- complete(false, result1)
- }
- }
- } else {
- print("Invalid URL")
- complete(false, nil)
- }
- }
-
- // MARK: 个人中心模块
-
- // MARK: 订单模块
-
- /**
- @abstract 支付后查询订单状态
- @param orderId 订单id
- @param complete 回调
- */
- func getStateByOrderId(orderId: String, _ complete: @escaping KMMemberRequestInfoComplete) {
- let token: String = KMMemberInfo.shared.access_token
- if token == "" {
- complete(false, nil)
- return
- }
- let urlString = configuration.activityBaseURL() + "/pdf-office-website/order/getStateByOrderId"
- let params: [String: Any] = ["orderId": orderId]
- if let urlNewString = constructURLString(baseURLString: urlString, parameters: params) {
- KMRequestServer.requestServer.request(urlString: urlNewString, method: .get, params: nil) { requestSerializer in
- requestSerializer.setValue("Bearer " + token, forHTTPHeaderField: "Authorization")
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let requestCode: Int = dic["code"] as? Int ?? 0
- let requestDic: NSDictionary = dic["result"] as? NSDictionary ?? [:]
- let status:String = requestDic["status"] as? String ?? ""
- if requestCode == 200{
- complete(true, dic)
- } else {
- complete(false, dic)
- }
- }
- } else {
- print("Invalid URL")
- complete(false, nil)
- }
- }
-
- /**
- @abstract 创建订单(买断)
- @param productId 产品id
- @param paymentMethod 支付方式 PAYPAL(0),ALIPAY(1),WXPAY(2),PADDLE(3)
- @param price 价格
- @param discountFlag 0原价,1优惠券,2升级,3教育优惠,4批量购买,5黑五折扣
- @param couponCode 优惠卷
- @param num 批量购买数量
- @param complete 回调
- */
- func createOrder(productId: String, paymentMethod: Int, price: String, discountFlag: Int, couponCode: String, num: Int, _ complete: @escaping KMMemberProductComplete) {
- let token: String = KMMemberInfo.shared.access_token
- if token == "" {
- complete(false, nil)
- return
- }
- let urlString = configuration.activityBaseURL() + "/pdf-office-website/order/createOrder"
- let params: [String: Any] = ["productId": productId,
- "paymentMethod": paymentMethod,
- "price": price,
- "discountFlag": discountFlag,
- "couponCode": couponCode,
- "num": num]
- KMRequestServer.requestServer.request(urlString: urlString, method: .post, params: params) { requestSerializer in
- requestSerializer.setValue("Bearer " + token, forHTTPHeaderField: "Authorization")
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let requestCode: Int = dic["code"] as? Int ?? 0
- let result: NSDictionary = dic["result"] as? NSDictionary ?? [:]
- let message: String = dic["msg"] as? String ?? ""
-
- var thirdOrderNo = ""
- var orderId = ""
- var payHref = ""
- var qrCode = ""
- if requestCode == 200 {
- if let token = result["thirdOrderNo"] { thirdOrderNo = token as? String ?? thirdOrderNo}
- if let token = result["orderId"] { orderId = token as? String ?? orderId}
- if let token = result["payHref"] { payHref = token as? String ?? payHref}
- if let token = result["qrcode"] { qrCode = token as? String ?? qrCode}
- let products = KMCreateOrderModel(thirdOrderNo: thirdOrderNo, orderId: orderId, payHref: payHref, qrCode: qrCode)
- let result1 = KMMemberProductResult(code: requestCode, msg: message, createOrder: products)
- complete(true, result1)
- } else {
- let result1 = KMMemberProductResult(code: requestCode, msg: message, createOrder: KMCreateOrderModel(thirdOrderNo: thirdOrderNo, orderId: orderId, payHref: payHref, qrCode: qrCode))
- complete(false, result1)
- }
- }
- }
-
- /**
- @abstract 创建订单(订阅)
- @param productId 产品id
- @param paymentMethod 支付方式 PAYPAL(0),ALIPAY(1),WXPAY(2),PADDLE(3)
- @param price 价格
- @param discountFlag 0原价,1优惠券,2升级,3教育优惠,4批量购买,5黑五折扣
- @param couponCode 优惠卷
- @param num 批量购买数量
- @param complete 回调
- */
- func createSubscriber(productId: String, paymentMethod: Int, price: String, discountFlag: Int, couponCode: String, num: Int, _ complete: @escaping KMMemberProductComplete) {
- let token: String = KMMemberInfo.shared.access_token
- if token == "" {
- complete(false, nil)
- return
- }
- let urlString = configuration.activityBaseURL() + "/pdf-office-website/order/createSubscription"
- let params: [String: Any] = ["productId": productId,
- "paymentMethod": paymentMethod,
- "price": price,
- "discountFlag": discountFlag,
- "couponCode": couponCode,
- "num": num]
- KMRequestServer.requestServer.request(urlString: urlString, method: .post, params: params) { requestSerializer in
- requestSerializer.setValue("Bearer " + token, forHTTPHeaderField: "Authorization")
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let requestCode: Int = dic["code"] as? Int ?? 0
- let result: NSDictionary = dic["result"] as? NSDictionary ?? [:]
- let message: String = dic["msg"] as? String ?? ""
-
- var thirdOrderNo = ""
- var orderId = ""
- var payHref = ""
- var qrCode = ""
- if requestCode == 200 {
- if let token = result["thirdOrderNo"] { thirdOrderNo = token as? String ?? thirdOrderNo}
- if let token = result["orderId"] { orderId = token as? String ?? orderId}
- if let token = result["payHref"] { payHref = token as? String ?? payHref}
- if let token = result["qrcode"] { qrCode = token as? String ?? qrCode}
- let products = KMCreateOrderModel(thirdOrderNo: thirdOrderNo, orderId: orderId, payHref: payHref, qrCode: qrCode)
- let result1 = KMMemberProductResult(code: requestCode, msg: message, createOrder: products)
- complete(true, result1)
- } else {
- let result1 = KMMemberProductResult(code: requestCode, msg: message, createOrder: KMCreateOrderModel(thirdOrderNo: thirdOrderNo, orderId: orderId, payHref: payHref, qrCode: qrCode))
- complete(false, result1)
- }
- }
- }
- /**
- @abstract 获取订单列表
- @param orderStatus 0全部1待支付
- @param complete 回调
- */
- func getOrderListByStatus(orderStatus: Int, _ complete: @escaping KMMemberRequestInfoComplete) {
- let token: String = KMMemberInfo.shared.access_token
- if token == "" {
- complete(false, nil)
- return
- }
- let urlString = configuration.activityBaseURL() + "/pdf-office-website/order/getOrderListByStatus"
- let params: [String: Any] = ["orderStatus": orderStatus]
- if let urlNewString = constructURLString(baseURLString: urlString, parameters: params) {
- KMRequestServer.requestServer.request(urlString: urlNewString, method: .get, params: nil) { requestSerializer in
- requestSerializer.setValue("Bearer " + token, forHTTPHeaderField: "Authorization")
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let requestCode: Int = dic["code"] as? Int ?? 0
- if requestCode == 200 {
- complete(true, dic)
- } else {
- complete(false, dic)
- }
- // var thirdOrderNo = ""
- // var orderId = ""
- // var payHref = ""
- // if code == 200 {
- // if let token = result["thirdOrderNo"] { thirdOrderNo = token as! String }
- // if let token = result["orderId"] { orderId = token as! String }
- // if let token = result["payHref"] { payHref = token as! String }
- // let products = KMCreateOrderModel(thirdOrderNo: thirdOrderNo, orderId: orderId, payHref: payHref)
- // let result1 = KMMemberProductResult(code: code, msg: message, createOrder: products)
- // complete(true, result1)
- // } else {
- // let result1 = KMMemberProductResult(code: code, msg: message, createOrder: KMCreateOrderModel(thirdOrderNo: thirdOrderNo, orderId: orderId, payHref: payHref))
- // complete(false, result1)
- // }
- }
- } else {
- complete(false, nil)
- }
- }
-
- /**
- @abstract 关闭订单
- @param orderId 订单id
- @param complete 回调
- */
- func closeByOrderId(orderId: String, _ complete: @escaping KMMemberRequestInfoComplete) {
- let token: String = KMMemberInfo.shared.access_token
- if token == "" {
- complete(false, nil)
- return
- }
- let urlString = configuration.activityBaseURL() + "/pdf-office-website/order/closeOrder"
- let params: [String: Any] = ["orderId": orderId]
- if let urlNewString = constructURLString(baseURLString: urlString, parameters: params) {
- KMRequestServer.requestServer.request(urlString: urlNewString, method: .post, params: nil) { requestSerializer in
- requestSerializer.setValue("Bearer " + token, forHTTPHeaderField: "Authorization")
- } completion: { [weak self] (task, responseObject, error) in
- var dic: NSDictionary = [:]
- if error == nil, let responseObject = responseObject as? NSDictionary {
- dic = responseObject
- } else {
- var info = responseObject
- if let error = error {
- if let data = error.userInfo["com.alamofire.serialization.response.error.data"] as? Data {
- info = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? NSDictionary
- }
- }
- dic = (info as? NSDictionary) ?? [:]
- }
- let requestCode: Int = dic["code"] as? Int ?? 0
- if requestCode == 200 {
- complete(true, dic)
- } else {
- complete(false, dic)
- }
- }
- } else {
- complete(false, nil)
- }
- }
-
- // MARK: 苹果支付
-
- /**
- @abstract APPstore 权益校验
- @param applePayProductId
- @param transactionId
- @param productCode
- @param complete 回调
- */
- func appStoreEquityVerification(applePayProductId: String, transactionId: String, productCode: String, _ complete: @escaping KMMemberProductComplete) {
- let token: String = KMMemberInfo.shared.access_token
- if token == "" {
- complete(false, nil)
- return
- }
- let urlString = configuration.activityBaseURL() + "/member-system-website/applePay/appStoreEquityVerification"
- let bundleID = Bundle.main.object(forInfoDictionaryKey: "CFBundleIdentifier") ?? ""
- let params: [String: Any] = ["appBundleId": bundleID,
- "applePayProductId": applePayProductId,
- "transactionId": transactionId,
- "productCode": productCode]
- let postData = try! JSONSerialization.data(withJSONObject: params)
-
- var request = URLRequest(url: URL(string: urlString)!,timeoutInterval: Double.infinity)
- request.addValue("Bearer " + token, forHTTPHeaderField: "Authorization")
- request.addValue("application/json", forHTTPHeaderField: "Content-Type")
- request.httpMethod = "POST"
- request.httpBody = postData
-
- let task = URLSession.shared.dataTask(with: request) { data, response, error in
- guard let data = data else {
- print(String(describing: error))
- return
- }
- let jsonObject = try? JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary ?? [:]
- if jsonObject != nil {
- let code: Int = jsonObject!["code"] as? Int ?? 0
- let result: NSDictionary = jsonObject!["result"] as? NSDictionary ?? [:]
- let message: String = jsonObject!["msg"] as? String ?? ""
- let result1 = KMMemberProductResult(code: code, msg: message, result: "")
- if code == 200 {
- complete(true, result1)
- } else {
- complete(false, result1)
- }
- } else {
- complete(false, KMMemberProductResult(code: 0, msg: "", result: ""))
- }
- }
- task.resume()
- }
- // MARK: 评估模块
- // MARK: 活动模块
- // MARK: 翻译模块
-
- // MARK: AI模块
- // MARK: 会员赠送模块
-
- // MARK: Error Code
-
- static func showAlert(code: KMMemberCenterErrorCodeType?, message: String?, callback: ((NSApplication.ModalResponse?, Any ...)->Void)?) {
- let string = self.getCodeMessage(code: code, message: message)
- KMMainThreadExecute {
- let alert = NSAlert()
- alert.messageText = NSLocalizedString(string, tableName: "MemberCenterLocalizable", comment: "")
- let resp = alert.runModal()
- callback?(resp)
- }
- }
-
- static func getCodeMessage(code: KMMemberCenterErrorCodeType?, message: String?) -> String {
- var string = self.typeOfMessage(type: code)
- if string.isEmpty {
- string = message ?? ""
- }
- return string
- }
-
- static func typeOfMessage(type: KMMemberCenterErrorCodeType?) -> String {
- var result: String = ""
- switch type {
- case .EXCEPTION_MSG_TOKEN_IS_INVALID:
- result = "Invalid token or token has expired."
- break;
- case .EXCEPTION_MSG_DEVICE_NUM_MAX:
- result = "Your device logged-in has been limited. Please log out from other devices first."
- break;
- case .EXCEPTION_MSG_USER_NOT_LOGIN:
- result = "The user has not logged in. Please login before accessing."
- break;
- case .EMAIL_VERIFY_CODE_KEY_ERROR:
- result = "Email code error!"
- break;
- case .EMAIL_REGISTER_ERROR:
- result = "Register error!"
- break;
- case .EXCEPTION_MSG_PASSWORD_ERROR:
- result = "The password is wrong, you can check the case status."
- break;
- case .EXCEPTION_MSG_CODE_ACTION_ERROR:
- result = "Code action error."
- break;
- case .EXCEPTION_MSG_CODE_SEND_ERROR:
- result = "Code send error."
- break;
- case .EXCEPTION_MAIL_CODE_SEND_ERROR:
- result = "Mail send error."
- break;
- case .VERIFY_CODE_SEND_TOO_QUICKLY:
- result = "Code send too quickly!"
- break;
- case .EXCEPTION_MSG_EMAIL_EXIST:
- result = "This email is already associated with an account. please log in."
- break;
- case .EXCEPTION_MSG_EMAIL_NOT_REGISTER:
- result = "The current account is not registered. Please sign up using the verification code directly."
- break;
- case .EXCEPTION_MSG_EMAIL_LOGOUT_ING:
- result = "The account is being removed and unable to log in. If you have any questions, please get in touch with customer service."
- break;
- case .EXCEPTION_MSG_EMAIL_INVALID:
- result = "Please enter the correct email format."
- break;
- case .EXCEPTION_MSG_PASSWORD_NOT_INCONSISTENT:
- result = "Password is inconsistent, please re-enter."
- break;
- case .EXCEPTION_MSG_PASSWORD_SIZE_MIN:
- result = "The password must contain 6 to 24 characters."
- break;
- case .EXCEPTION_MSG_PASSWORD_SIZE_MAX:
- result = "The password must contain 6 to 24 characters."
- break;
- case .EXCEPTION_MSG_PLEASE_ADD_AUTH_CONFIG:
- result = "Please add auth config"
- break;
- case .EXCEPTION_MSG_USER_SUBSCRIPTION_IN_PROGRESS:
- result = "You are still subscribing and cannot remove your account at the moment. Please wait until the subscription period is over."
- break;
- case .EXCEPTION_TIME_TRANSFER_ERROR:
- result = "Time conversion failed."
- break;
- case .EXCEPTION_MSG_PASSWORD_CONTAIN_EMPTY:
- result = "Password cannot contain spaces."
- break;
- case .EXCEPTION_MSG_CREATE_ORDER_PARAMETER: // 支付方式异常
- result = "Abnormal payment method."
- case .EXCEPTION_MSG_EVENT_IS_CURRENTLY_NOT_SUPPORTED: // 当前事件暂不支持
- result = "The current event is not supported yet."
- case .EXCEPTION_MSG_THE_ACCOUNT_IS_ALREADY_LOGGED_IN_ON_OTHER_DEVICES: // 账号已在其他设备登录
- result = "This account has been logged in on other devices."
- case .EXCEPTION_MSG_ABNORMAL_USER_STATUS: // 当前邮箱已被停用或者处于注销中状态
- result = "The current email address has been deactivated or is in the account cancellation state."
- case .EXCEPTION_MSG_APP_STORE_TICKET_VALIDATION_FAILED: // Appstore票据验证失败"
- result = "Ticket verification of AppStore failed."
- case .EXCEPTION_MSG_APP_STORE_TICKET_VALIDATION_NEED_TO_RETRY: //Appstore票据验证需要重试
- result = "Ticket verification of AppStore needs to be retried."
- case .EXCEPTION_MSG_REPEAT_SUBSCRIPTION: // 用户已订阅该产品
- result = "The user has subscribed to this product."
- case .EXCEPTION_MSG_RESTORING_PURCHASES_IS_NOT_CURRENTLY_SUPPORTED: // 恢复购买暂不支持
- result = "Restoring purchases is not supported yet."
- case .EXCEPTION_MSG_USER_TRANSACTION_CANCELED_OR_FAILED: // 用户交易取消或失败
- result = "The user's transaction is canceled or failed."
- case .EXCEPTION_MSG_CURRENT_ORDER_NOT_RECORDED: // 当前订单末记录,请稍后重试
- result = "The current order is not recorded, please try again later."
- case .EXCEPTION_MSG_THE_SAME_USER: //同一用户,无需处理
- result = "Same user, no need to process."
- case .EXCEPTION_MSG_THIRD_PAY_ID_ILLEGAL: //thirdPayld非法
- result = "Third-party payment is illegal."
- case .EXCEPTION_MSG_ORDER_DOES_NOT_EXIST: //订单不存在
- result = "Order does not exist."
- case .EXCEPTION_MSG_THE_ORDER_STATUS_IS_ABNORMAL: // 订单状态异常
- result = "Order status abnormal."
- case .EXCEPTION_MSG_TRANSACTION_ID_REPEAT: // transactionld重复
- result = "Transaction duplicate."
- case .EXCEPTION_TICKET_HAS_BEEN_BLOCKED: // The ticket has been blocked
- result = "The ticket has been blocked."
- case .EXCEPTION_TICKET_HAS_BEEN_CREATED: // 当前票据已创建订单
- result = "The current ticket has created an order."
- case .EXCEPTION_USER_IS_NOT_EDUCATION_USER: // 用户不是教育用户
- result = "The user is not an educational user."
- case .EXCEPTION_USER_HAS_EDUCATION: // 用户近一年有教育购买订单
- result = "The user has education purchase orders in the past year."
- case .EXCEPTION_USER_CANNOT_BUY_PREMIUM: // 用户已有标准版订阅,无法购买高级版
- result = "The user already has a PDF Reader Pro Standard Plan and cannot purchase the Advance Plan."
- case .EXCEPTION_USER_CANNOT_BUY_VIP: // 用户已有高级版订阅,无法购买标准版
- result = "The user already has a PDF Reader Pro Advance Plan and cannot purchase the Standard Plan."
- case .EXCEPTION_USER_CANNOT_UPGRADE_VIP: // 买断用户无法升级为标准版
- result = "The Permanent Plan user cannot upgrade to the Standard Plan."
- case .EXCEPTION_COUPON_NOT_EXISTS: // 优惠券不存在
- result = "The coupon code does not exist."
- case .EXCEPTION_COUPONTYPE_ERROR: // 优惠券类型错误
- result = "Wrong coupon code type."
- case .EXCEPTION_COUPON_PRODUCT_ERROR: // 优惠券关联产品错误
- result = "Coupon-associated product error."
- case .EXCEPTION_COUPON_INVALID: // 优惠券已失效
- result = "The coupon code has expired."
- case .EXCEPTION_PRODUCT_NOT_EXIST: // 产品不存在
- result = "The product does not exist."
- case .EXCEPTION_MSG_CONTACT_US: //请联系我们获取最新折扣
- result = "Please get in touch with us for the latest discounts."
- case .EXCEPTION_MSG_APP_STORE_TRANSACTION_ID_VALIDATION_FAILED: // 验证苹果交易失败
- result = "Verification of Apple's Transaction failed."
- case .EXCEPTION_MSG_GOOGLE_STORE_TRANSACTION_ID_VALIDATION_FAILED: // 验证谷歌交易失败
- result = "Verification of Google's Transaction failed."
- case .EXCEPTION_PRICE_ERROR: // 价格错误
- result = "Price error."
- case .EXCEPTION_MSG_ORDER_CREATE_FAILED: // 订单创建失败
- result = "Order creation failed."
- case .USER_ALREADY_SUBSCRIBED_PLAN: // 该用户已经是PDF Reader Pro订阅版会员,确定再赠送吗
- result = "This user is already a subscription member of PDF Reader Pro. Are you sure you want to share benefits?"
- case .USER_ALREADY_SUBSCRIBED_PACKAGE: // 该用户已经是PDF Reader Pro永久版会员,无需再赠送哦
- result = "This user is already a permanent member of PDF Reader Pro. You don't need to share benefits anymore."
- case .EXCEPTION_MSG_USER_NOT_EXIST: //用户不存在
- result = "User does not exist."
- case .EXCEPTION_USER_ALREADY_LOTTERY: // 用户已经抽过奖啦
- result = "The user already has a prize draw!"
- case .UNKNOWN:
- result = "UNKNOWN"
- break;
- case .SUCCESS:
- result = "SUCCESS"
- break;
- default:
- result = "Network error"
- }
- return result
- }
- }
|