NYWXApiManager.swift 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. //
  2. // NYWXApiManager.swift
  3. // JiaPeiManage
  4. //
  5. // Created by Ning.ge on 2023/8/2.
  6. //
  7. import Foundation
  8. import SwiftyJSON
  9. import RxSwift
  10. class NYWXApiManager : NSObject {
  11. // MARK: Rx
  12. var disposeBag = DisposeBag()
  13. // MARK: 服务属性
  14. private let loginService: LoginServiceType = LoginService(networking: LoginNetworking())
  15. //rxcode 回调
  16. let blockSubject = PublishSubject<String>()
  17. var city:String = ""
  18. // 静态属性,用于存储单例实例
  19. static let shared = NYWXApiManager()
  20. override init() {
  21. super.init()
  22. }
  23. func registerApp(){
  24. //在register之前打开log, 后续可以根据log排查问题
  25. WXApi.startLog(by: WXLogLevel.detail) { log in
  26. NSLog("WeChatSDK: %@", log);
  27. }
  28. //微信绑定
  29. let isSuccess = WXApi.registerApp(NYMacros.wxappid, universalLink: NYMacros.universalLink)
  30. if isSuccess {
  31. print("微信初始化成功")
  32. }
  33. // //调用自检函数
  34. // WXApi.checkUniversalLinkReady { step, result in
  35. // print("%@, %u, %@, %@", step, result.success, result.errorInfo, result.suggestion)
  36. // }
  37. }
  38. //发起微信send
  39. func sendWxapi(city:String){
  40. self.city = city
  41. if WXApi.isWXAppInstalled() {
  42. let rep = SendAuthReq()
  43. //这两个参数 可以照抄 第一个是固定的,第二个随意写
  44. rep.scope = "snsapi_userinfo"
  45. rep.state = "wx_oauth_authorization_state"
  46. WXApi.send(rep, completion: nil)
  47. }
  48. else {
  49. //未安装跳网页
  50. let rep = SendAuthReq()
  51. //这两个参数 可以照抄 第一个是固定的,第二个随意写
  52. rep.scope = "snsapi_userinfo"
  53. rep.state = "wx_oauth_authorization_state"
  54. DispatchQueue.main.async {
  55. let vc = NYWindow.currentVc()
  56. WXApi.sendAuthReq(rep, viewController: vc, delegate: self)
  57. }
  58. }
  59. }
  60. func handleOpenUrl(url:URL){
  61. WXApi.handleOpen(url, delegate: NYWXApiManager.shared)
  62. }
  63. func handleOpenUniversalLink(userActivity: NSUserActivity) ->Bool{
  64. return WXApi.handleOpenUniversalLink(userActivity, delegate: NYWXApiManager.shared)
  65. }
  66. }
  67. extension NYWXApiManager :WXApiDelegate {
  68. //MARK:微信回调
  69. func onResp(_ resp: BaseResp) {
  70. if resp.isKind(of: PayResp.self) {
  71. //这里是微信支付的回调
  72. } else if resp.isKind(of: SendAuthResp.self) {
  73. //这里是授权登录的回调
  74. let aresp = resp as! SendAuthResp
  75. DispatchQueue.main.async { [unowned self] in
  76. if aresp.errCode == 0 {
  77. if let code = aresp.code {
  78. //这里拿到code之后 对接服务器接口
  79. //这步 相当于账号密码登录的流程 返回用户信息
  80. //后端这个接口返回的数据需要判断是第一次授权还是 不是第一次授权,第一次授权需要去绑定手机号界面,不是第一次授权就直接跳转到首页,登录成功
  81. //如果是第一次授权,服务器再给个绑定手机号的接口
  82. //大概就这个流程
  83. self.blockSubject.onNext(code) //发送rx消息
  84. }
  85. else {
  86. NYTips.showMsg(txt: "微信授权失败")
  87. }
  88. }
  89. else {
  90. NYTips.showMsg(txt: "微信授权失败")
  91. }
  92. }
  93. }
  94. }
  95. func onReq(_ req: BaseReq) {
  96. print("%@",req)
  97. }
  98. }