No Description

WXUserInfoRemoteAPI.swift 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. //
  2. // WXUserInfoRemoteAPI.swift
  3. // PaiaiDataKit
  4. //
  5. // Created by ffib on 2018/12/26.
  6. // Copyright © 2018 yb. All rights reserved.
  7. //
  8. import Foundation
  9. import RxSwift
  10. fileprivate let WXAppid = "wx4e22a0c8ae6d766d"
  11. fileprivate let WXSecret = "636ac848016c593575d11143c55c8333"
  12. //fileprivate protocol WXUserInfoParse: Parsable where Model == JSON {}
  13. //
  14. //extension DefaultResource: WXUserInfoParse {
  15. // func parse(_ json: JSON) -> JSON? { return json }
  16. //}
  17. //
  18. //fileprivate struct WXResource: Resource, Parsable {
  19. // typealias Model = UserInfo
  20. //
  21. // var path: Interfaces { return .authorize }
  22. // var parameter: Parameter = [:]
  23. //
  24. // func parse(_ json: JSON) -> UserInfo? {
  25. // guard let result = json["data"] as? JSON else { return nil }
  26. // return UserInfo(json: result)
  27. // }
  28. //}
  29. class WXUserInfoRemoteAPI: UserInfoRemoteAPI {
  30. typealias Model = UserInfo
  31. // fileprivate var wxResource: WXResource
  32. // fileprivate var wxTokenResource: DefaultResource
  33. // fileprivate var wxUserInfoResource: DefaultResource
  34. init() {
  35. let wxUrl = "https://api.weixin.qq.com"
  36. // self.wxResource = WXResource()
  37. // self.wxTokenResource = DefaultResource(host: wxUrl, path: .wxAccessToken, parameter: [:])
  38. // self.wxUserInfoResource = DefaultResource(host: wxUrl, path: .wxUserInfo, parameter: [:])
  39. }
  40. func login() -> Single<UserInfo> {
  41. return Single.create(subscribe: { (observer) -> Disposable in
  42. // let wxLoginObserver = self.addWXLoginDidFinish()
  43. // let wxTokenObserver = self.getWXToken()
  44. // let wxUserInfoObserver = self.getWXUserInfo()
  45. // let loginObserver = self.wxLogin()
  46. //
  47. // Single.of(wxLoginObserver,
  48. // wxTokenObserver,
  49. // wxUserInfoObserver)
  50. // .concat().asSingle()
  51. // .subscribe({_ in
  52. // loginObserver.asSingle()
  53. // .subscribe(onNext: { (userInfo) in
  54. // observer.onNext(userInfo)
  55. // self.removeWXLoginDidFinish()
  56. // }).dispose()
  57. // }).dispose()
  58. return Disposables.create()
  59. })
  60. }
  61. fileprivate func loginWithWeChat() {
  62. let request = SendAuthReq()
  63. request.scope = "snsapi_userinfo,snsapi_base"
  64. request.state = "skilogin"
  65. WXApi.send(request)
  66. }
  67. // fileprivate func addWXLoginDidFinish() -> Completable {
  68. // return Single.create { (observer) in
  69. //// NotificationCenter.default.addObserver(forName: Notification.WXLoginNotification, object: nil, queue: nil) { (notification) in
  70. //// guard let userInfo = notification.userInfo,
  71. //// let code = userInfo["code"] as? String else { return }
  72. //// self.wxTokenResource.parameter = ["appid": WXAppid, "secret": WXSecret,
  73. //// "code": code, "grant_type": "authorization_code"]
  74. //// observer.onCompleted()
  75. //// }
  76. ////
  77. // return Disposables.create()
  78. // }
  79. // }
  80. //
  81. // fileprivate func getWXToken() -> Completable {
  82. // return Single.create({ (observer) in
  83. //// let resource = ContentResource.init(host:"https://api.weixin.qq.com",
  84. //// path: .wxAccessToken,
  85. //// parameter: <#T##Parameter#>, parseJSON: <#T##(JSON) -> _?#>)
  86. //// NetworkApi.share.get(resource: self.wxTokenResource) { (result) in
  87. //// guard case let .success(data) = result,
  88. //// let token = data["access_token"] as? String,
  89. //// let openId = data["openid"] as? String else { return }
  90. //// self.wxUserInfoResource.parameter = ["access_token": token, "openid": openId]
  91. //// observer.onCompleted()
  92. //// }
  93. //
  94. // return Disposables.create()
  95. // })
  96. // }
  97. //
  98. // fileprivate func getWXUserInfo() -> Completable {
  99. // return Single.create({ (observer) in
  100. //// NetworkApi.share.get(resource: self.wxUserInfoResource) { (result) in
  101. //// guard case let .success(data) = result else { return }
  102. //// if let errcode = data["errcode"] as? Int,
  103. //// errcode == 40003 { return }
  104. //// self.wxResource.parameter = data
  105. //// observer.onCompleted()
  106. //// }
  107. //
  108. // return Disposables.create()
  109. // })
  110. // }
  111. //
  112. // fileprivate func wxLogin() -> Single<UserInfo> {
  113. // return Single.create({ (observer) in
  114. //// NetworkApi.share.post(resource: self.wxResource) { (result) in
  115. //// guard case let .success(data) = result else { return }
  116. //// observer.onNext(data)
  117. //// observer.onCompleted()
  118. //// }
  119. ////
  120. // return Disposables.create()
  121. // })
  122. // }
  123. fileprivate func removeWXLoginDidFinish() {
  124. NotificationCenter.default.removeObserver(self, name: Notification.WXLoginNotification, object: nil)
  125. }
  126. }
  127. extension Notification {
  128. static let WXLoginNotification = Notification.Name("WXLoginDidFinishNotification")
  129. }