NYWXApiManager.swift 3.6 KB

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