|
//
// 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<UserInfo> {
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<UserInfo> {
// 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")
}
|