// // WXUserInfoRemoteAPI.swift // PaiaiDataKit // // Created by ffib on 2018/12/26. // Copyright © 2018 yb. All rights reserved. // import Foundation import RxSwift fileprivate let WXAppid = "wx4e22a0c8ae6d766d" fileprivate let WXSecret = "636ac848016c593575d11143c55c8333" //fileprivate protocol WXUserInfoParse: Parsable where Model == JSON {} // //extension DefaultResource: WXUserInfoParse { // func parse(_ json: JSON) -> JSON? { return json } //} // //fileprivate struct WXResource: Resource, Parsable { // typealias Model = UserInfo // // var path: Interfaces { return .authorize } // var parameter: Parameter = [:] // // func parse(_ json: JSON) -> UserInfo? { // guard let result = json["data"] as? JSON else { return nil } // return UserInfo(json: result) // } //} class WXUserInfoRemoteAPI: UserInfoRemoteAPI { typealias Model = UserInfo // fileprivate var wxResource: WXResource // fileprivate var wxTokenResource: DefaultResource // fileprivate var wxUserInfoResource: DefaultResource init() { let wxUrl = "https://api.weixin.qq.com" // self.wxResource = WXResource() // self.wxTokenResource = DefaultResource(host: wxUrl, path: .wxAccessToken, parameter: [:]) // self.wxUserInfoResource = DefaultResource(host: wxUrl, path: .wxUserInfo, parameter: [:]) } func login() -> Single { return Single.create(subscribe: { (observer) -> Disposable in // let wxLoginObserver = self.addWXLoginDidFinish() // let wxTokenObserver = self.getWXToken() // let wxUserInfoObserver = self.getWXUserInfo() // let loginObserver = self.wxLogin() // // Single.of(wxLoginObserver, // wxTokenObserver, // wxUserInfoObserver) // .concat().asSingle() // .subscribe({_ in // loginObserver.asSingle() // .subscribe(onNext: { (userInfo) in // observer.onNext(userInfo) // self.removeWXLoginDidFinish() // }).dispose() // }).dispose() return Disposables.create() }) } fileprivate func loginWithWeChat() { let request = SendAuthReq() request.scope = "snsapi_userinfo,snsapi_base" request.state = "skilogin" WXApi.send(request) } // fileprivate func addWXLoginDidFinish() -> Completable { // return Single.create { (observer) in //// NotificationCenter.default.addObserver(forName: Notification.WXLoginNotification, object: nil, queue: nil) { (notification) in //// guard let userInfo = notification.userInfo, //// let code = userInfo["code"] as? String else { return } //// self.wxTokenResource.parameter = ["appid": WXAppid, "secret": WXSecret, //// "code": code, "grant_type": "authorization_code"] //// observer.onCompleted() //// } //// // return Disposables.create() // } // } // // fileprivate func getWXToken() -> Completable { // return Single.create({ (observer) in //// let resource = ContentResource.init(host:"https://api.weixin.qq.com", //// path: .wxAccessToken, //// parameter: <#T##Parameter#>, parseJSON: <#T##(JSON) -> _?#>) //// NetworkApi.share.get(resource: self.wxTokenResource) { (result) in //// guard case let .success(data) = result, //// let token = data["access_token"] as? String, //// let openId = data["openid"] as? String else { return } //// self.wxUserInfoResource.parameter = ["access_token": token, "openid": openId] //// observer.onCompleted() //// } // // return Disposables.create() // }) // } // // fileprivate func getWXUserInfo() -> Completable { // return Single.create({ (observer) in //// NetworkApi.share.get(resource: self.wxUserInfoResource) { (result) in //// guard case let .success(data) = result else { return } //// if let errcode = data["errcode"] as? Int, //// errcode == 40003 { return } //// self.wxResource.parameter = data //// observer.onCompleted() //// } // // return Disposables.create() // }) // } // // fileprivate func wxLogin() -> Single { // return Single.create({ (observer) in //// NetworkApi.share.post(resource: self.wxResource) { (result) in //// guard case let .success(data) = result else { return } //// observer.onNext(data) //// observer.onCompleted() //// } //// // return Disposables.create() // }) // } fileprivate func removeWXLoginDidFinish() { NotificationCenter.default.removeObserver(self, name: Notification.WXLoginNotification, object: nil) } } extension Notification { static let WXLoginNotification = Notification.Name("WXLoginDidFinishNotification") }