杨锴
2024-10-09 1f08239dd60c05f1eb6eb9b3122aa23cd700348b
WanPai/Config/WeChatTools.swift
@@ -12,194 +12,194 @@
typealias WechatUserClosure = (WechatUserInfoModel?)->(Void)
struct WechatModel:HandyJSON{
   var access_token = ""
   var expires_in = 0
   var openid = ""
   var refresh_token = ""
   var scope = ""
   var unionid = ""
            var access_token = ""
            var expires_in = 0
            var openid = ""
            var refresh_token = ""
            var scope = ""
            var unionid = ""
}
struct WechatUserInfoModel:HandyJSON{
   var openid = ""
   var nickname = ""
   var sex = 1
   var province = ""
   var city = ""
   var country = ""
   var headimgurl = ""
   var privilege = ""
   var unionid = ""
            var openid = ""
            var nickname = ""
            var sex = 1
            var province = ""
            var city = ""
            var country = ""
            var headimgurl = ""
            var privilege = ""
            var unionid = ""
}
class WeChatTools{
   static func register(appid:String,link:String){
      WXApi.registerApp(appid, universalLink: link)
   }
      /// 授权登录
   static func sendAuthRequest(){
      let sendAuthReq = SendAuthReq()
      sendAuthReq.scope = "snsapi_userinfo"
      sendAuthReq.state = "WeParkLife_iOS"
      WXApi.send(sendAuthReq)
   }
      /// 完成授权登录,获取token
   static func getAccessToken(_ resp:SendAuthResp, loginInfo:WeachatClosure?){
      guard resp.code != nil else {
         return
      }
      let url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=\(WeChatAPPID)&secret=\(WeChatSecrect)&code=\(resp.code!)&grant_type=authorization_code"
      let Url = URL(string: url)
      let session = URLSession.shared
      let task = session.dataTask(with: Url!) { (data, response, error) in
         if error != nil{
            return
         }
         do{
            if let dataAsJSON = try JSONSerialization.jsonObject(with: data!) as? Dictionary<String, Any>{
               let model = WechatModel.deserialize(from: dataAsJSON)
               loginInfo?(model)
            }else{
               loginInfo?(nil)
            static func register(appid:String,link:String){
                        WXApi.registerApp(appid, universalLink: link)
            }
         }catch{
            loginInfo?(nil)
         }
      }
      task.resume()
   }
      /// 获取用资料
   static func getUserInfo(access_token:String,openId:String,userInfo:WechatUserClosure?){
      guard !access_token.isEmpty else {
         return
      }
      guard !openId.isEmpty else {
         return
      }
      let url = "https://api.weixin.qq.com/sns/userinfo?access_token=\(access_token)&openid=\(openId)"
      let Url = URL(string: url)
      let session = URLSession.shared
      let task = session.dataTask(with: Url!) { (data, response, error) in
         if error != nil{
            return
         }
         do{
            if let dataAsJSON = try JSONSerialization.jsonObject(with: data!) as? Dictionary<String, Any>{
               let model = WechatUserInfoModel.deserialize(from: dataAsJSON)
               userInfo?(model)
            }else{
               userInfo?(nil)
            /// 授权登录
            static func sendAuthRequest(){
                        let sendAuthReq = SendAuthReq()
                        sendAuthReq.scope = "snsapi_userinfo"
                        sendAuthReq.state = "WeParkLife_iOS"
                        WXApi.send(sendAuthReq)
            }
         }catch{
            userInfo?(nil)
         }
      }
      task.resume()
   }
      /// 分享文本
   static func shareText(_ text:String,scene:WXScene = WXSceneSession){
      let req = SendMessageToWXReq()
      req.bText = true
      req.text = text
      req.scene = Int32(scene.rawValue)
      WXApi.send(req)
   }
            /// 完成授权登录,获取token
            static func getAccessToken(_ resp:SendAuthResp, loginInfo:WeachatClosure?){
                        guard resp.code != nil else {
                                    return
                        }
                        let url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=\(WeChatAPPID)&secret=\(WeChatSecrect)&code=\(resp.code!)&grant_type=authorization_code"
                        let Url = URL(string: url)
                        let session = URLSession.shared
                        let task = session.dataTask(with: Url!) { (data, response, error) in
                                    if error != nil{
                                                return
                                    }
                                    do{
                                                if let dataAsJSON = try JSONSerialization.jsonObject(with: data!) as? Dictionary<String, Any>{
                                                            let model = WechatModel.deserialize(from: dataAsJSON)
                                                            loginInfo?(model)
                                                }else{
                                                            loginInfo?(nil)
                                                }
                                    }catch{
                                                loginInfo?(nil)
                                    }
                        }
                        task.resume()
            }
      /// 分享图片
   static func sharePic(_ img:UIImage,thumb:UIImage,scale:CGFloat = 0.6,scene:WXScene = WXSceneTimeline){
            /// 获取用资料
            static func getUserInfo(access_token:String,openId:String,userInfo:WechatUserClosure?){
                        guard !access_token.isEmpty else {
                                    return
                        }
      let imageObject = WXImageObject()
      imageObject.imageData = img.jpegData(compressionQuality: scale)!
                        guard !openId.isEmpty else {
                                    return
                        }
      let mediaMessage = WXMediaMessage()
      mediaMessage.thumbData = thumb.jpegData(compressionQuality: scale)
      mediaMessage.mediaObject = imageObject
                        let url = "https://api.weixin.qq.com/sns/userinfo?access_token=\(access_token)&openid=\(openId)"
                        let Url = URL(string: url)
                        let session = URLSession.shared
                        let task = session.dataTask(with: Url!) { (data, response, error) in
                                    if error != nil{
                                                return
                                    }
                                    do{
                                                if let dataAsJSON = try JSONSerialization.jsonObject(with: data!) as? Dictionary<String, Any>{
                                                            let model = WechatUserInfoModel.deserialize(from: dataAsJSON)
                                                            userInfo?(model)
                                                }else{
                                                            userInfo?(nil)
                                                }
                                    }catch{
                                                userInfo?(nil)
                                    }
                        }
                        task.resume()
            }
      let req = SendMessageToWXReq()
      req.bText = false
      req.message = mediaMessage
      req.scene = Int32(scene.rawValue)
      WXApi.send(req)
   }
            /// 分享文本
            static func shareText(_ text:String,scene:WXScene = WXSceneSession){
                        let req = SendMessageToWXReq()
                        req.bText = true
                        req.text = text
                        req.scene = Int32(scene.rawValue)
                        WXApi.send(req)
            }
      /// 分享音乐
   static func shareMusic(_ musicUrl:String,musicLowBandUrl:String,title:String,desc:String,thumb:UIImage,scene:WXScene = WXSceneSession){
      let musicObject = WXMusicObject()
      musicObject.musicUrl = musicUrl
      musicObject.musicLowBandUrl = musicLowBandUrl
            /// 分享图片
            static func sharePic(_ img:UIImage,thumb:UIImage,scale:CGFloat = 0.6,scene:WXScene = WXSceneTimeline){
      let mediaMessage  = WXMediaMessage()
      mediaMessage.title = title
      mediaMessage.description = desc
      mediaMessage.setThumbImage(thumb)
      mediaMessage.mediaObject = musicObject
                        let imageObject = WXImageObject()
                        imageObject.imageData = img.jpegData(compressionQuality: scale)!
      let req = SendMessageToWXReq()
      req.bText = false
      req.message = mediaMessage
      req.scene = Int32(scene.rawValue)
      WXApi.send(req)
   }
                        let mediaMessage = WXMediaMessage()
                        mediaMessage.thumbData = thumb.jpegData(compressionQuality: scale)
                        mediaMessage.mediaObject = imageObject
      /// 分享音乐
   static func shareMusic(_ musicData:String,musicLowBandData:String,title:String,desc:String,thumb:UIImage,scene:WXScene = WXSceneSession){
      let musicObject = WXMusicObject()
      musicObject.musicDataUrl = musicData
      musicObject.musicLowBandUrl = musicLowBandData
                        let req = SendMessageToWXReq()
                        req.bText = false
                        req.message = mediaMessage
                        req.scene = Int32(scene.rawValue)
                        WXApi.send(req)
            }
      let mediaMessage  = WXMediaMessage()
      mediaMessage.title = title
      mediaMessage.description = desc
      mediaMessage.setThumbImage(thumb)
      mediaMessage.mediaObject = musicObject
            /// 分享音乐
            static func shareMusic(_ musicUrl:String,musicLowBandUrl:String,title:String,desc:String,thumb:UIImage,scene:WXScene = WXSceneSession){
                        let musicObject = WXMusicObject()
                        musicObject.musicUrl = musicUrl
                        musicObject.musicLowBandUrl = musicLowBandUrl
      let req = SendMessageToWXReq()
      req.bText = false
      req.message = mediaMessage
      req.scene = Int32(scene.rawValue)
      WXApi.send(req)
   }
                        let mediaMessage  = WXMediaMessage()
                        mediaMessage.title = title
                        mediaMessage.description = desc
                        mediaMessage.setThumbImage(thumb)
                        mediaMessage.mediaObject = musicObject
   static func shareUrl(_ url:String,title:String,desc:String,thumb:UIImage,scene:WXScene = WXSceneSession){
                        let req = SendMessageToWXReq()
                        req.bText = false
                        req.message = mediaMessage
                        req.scene = Int32(scene.rawValue)
                        WXApi.send(req)
            }
      let webpageObject  = WXWebpageObject()
      webpageObject.webpageUrl = url
            /// 分享音乐
            static func shareMusic(_ musicData:String,musicLowBandData:String,title:String,desc:String,thumb:UIImage,scene:WXScene = WXSceneSession){
                        let musicObject = WXMusicObject()
                        musicObject.musicDataUrl = musicData
                        musicObject.musicLowBandUrl = musicLowBandData
      let mediaMessage  = WXMediaMessage()
      mediaMessage.title = title
      mediaMessage.description = desc
      mediaMessage.setThumbImage(thumb)
      mediaMessage.mediaObject = webpageObject
                        let mediaMessage  = WXMediaMessage()
                        mediaMessage.title = title
                        mediaMessage.description = desc
                        mediaMessage.setThumbImage(thumb)
                        mediaMessage.mediaObject = musicObject
      let req = SendMessageToWXReq()
      req.bText = false
      req.message = mediaMessage
      req.scene = Int32(scene.rawValue)
      WXApi.send(req)
   }
                        let req = SendMessageToWXReq()
                        req.bText = false
                        req.message = mediaMessage
                        req.scene = Int32(scene.rawValue)
                        WXApi.send(req)
            }
   static func shareVideo(_ url:String,videoLowBandUrl:String,title:String,desc:String,thumb:UIImage, scene:WXScene = WXSceneSession){
      let videoObject = WXVideoObject()
      videoObject.videoUrl = url
      videoObject.videoLowBandUrl = videoLowBandUrl
            static func shareUrl(_ url:String,title:String,desc:String,thumb:UIImage,scene:WXScene = WXSceneSession){
      let mediaMessage  = WXMediaMessage()
      mediaMessage.title = title
      mediaMessage.description = desc
      mediaMessage.setThumbImage(thumb)
      mediaMessage.mediaObject = videoObject
                        let webpageObject  = WXWebpageObject()
                        webpageObject.webpageUrl = url
      let req = SendMessageToWXReq()
      req.bText = false
      req.message = mediaMessage
      req.scene = Int32(scene.rawValue)
      WXApi.send(req)
   }
                        let mediaMessage  = WXMediaMessage()
                        mediaMessage.title = title
                        mediaMessage.description = desc
                        mediaMessage.setThumbImage(thumb)
                        mediaMessage.mediaObject = webpageObject
                        let req = SendMessageToWXReq()
                        req.bText = false
                        req.message = mediaMessage
                        req.scene = Int32(scene.rawValue)
                        WXApi.send(req)
            }
            static func shareVideo(_ url:String,videoLowBandUrl:String,title:String,desc:String,thumb:UIImage, scene:WXScene = WXSceneSession){
                        let videoObject = WXVideoObject()
                        videoObject.videoUrl = url
                        videoObject.videoLowBandUrl = videoLowBandUrl
                        let mediaMessage  = WXMediaMessage()
                        mediaMessage.title = title
                        mediaMessage.description = desc
                        mediaMessage.setThumbImage(thumb)
                        mediaMessage.mediaObject = videoObject
                        let req = SendMessageToWXReq()
                        req.bText = false
                        req.message = mediaMessage
                        req.scene = Int32(scene.rawValue)
                        WXApi.send(req)
            }
}