//
|
// WeChatTools.swift
|
// WanPai
|
//
|
// Created by 无故事王国 on 2023/9/26.
|
//
|
|
import Foundation
|
import HandyJSON
|
|
typealias WeachatClosure = (WechatModel?)->(Void)
|
typealias WechatUserClosure = (WechatUserInfoModel?)->(Void)
|
|
struct WechatModel:HandyJSON{
|
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 = ""
|
}
|
|
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 = "dolpinEnglishStudent_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)
|
}
|
}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)
|
}
|
}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)
|
}
|
|
/// 分享图片
|
static func sharePic(_ img:UIImage,thumb:UIImage,scale:CGFloat = 0.6,scene:WXScene = WXSceneTimeline){
|
|
let imageObject = WXImageObject()
|
imageObject.imageData = img.jpegData(compressionQuality: scale)!
|
|
let mediaMessage = WXMediaMessage()
|
mediaMessage.thumbData = thumb.jpegData(compressionQuality: scale)
|
mediaMessage.mediaObject = imageObject
|
|
let req = SendMessageToWXReq()
|
req.bText = false
|
req.message = mediaMessage
|
req.scene = Int32(scene.rawValue)
|
WXApi.send(req)
|
}
|
|
/// 分享图片
|
static func sharePic(_ img:UIImage,thumb:UIImage,text:String,scale:CGFloat = 0.6,scene:WXScene = WXSceneTimeline){
|
|
let imageObject = WXImageObject()
|
imageObject.imageData = img.pngData()!
|
|
let mediaMessage = WXMediaMessage()
|
// mediaMessage.thumbData = thumb.pngData()!
|
mediaMessage.mediaObject = imageObject
|
mediaMessage.title = text
|
|
let req = SendMessageToWXReq()
|
req.bText = false
|
req.message = mediaMessage
|
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
|
|
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)
|
}
|
|
/// 分享音乐
|
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 = musicObject
|
|
let req = SendMessageToWXReq()
|
req.bText = false
|
req.message = mediaMessage
|
req.scene = Int32(scene.rawValue)
|
WXApi.send(req)
|
}
|
|
static func shareUrl(_ url:String,title:String,desc:String,thumb:UIImage,scene:WXScene = WXSceneSession){
|
|
let webpageObject = WXWebpageObject()
|
webpageObject.webpageUrl = url
|
|
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)
|
}
|
}
|