| | |
| | | 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) |
| | | } |
| | | } |