微信登录简单封装

微信小程序授权登录简单流程 文章目录一、判断是否授权二、请求用户授权登录1.授权2.登录 一、判断是否授权 如果没有授权走第二步 使用wx.getSetting()方法判断是否授权 wx.getSetting({ //成功的一个回调 success: res => { if(res.authSetting['scope.userInfo']) { //已经授权 //这时我们已经可以使用以下方法获取到一些用户信息 wx.getUserInfo({ su 阅读详情

逻辑展示


src="https://modao.cc/app/WSAJ9P0qmzlC55qgcJiaYiIoRJjbpcU/embed" width="760" height="780">

相关资料


接入流程


Podfile信息
target 'WechatLogTest' do
end
platform :ios, '8.0'
use_frameworks!
pod 'WechatOpenSDK'
plist中环境的设置
<key>LSApplicationQueriesSchemes</key>
    <array>
        <string>wechat</string>
        <string>weixin</string>
    </array>
    <key>qq.com</key>
    <dict>
    <key>NSExceptionAllowsInsecureHTTPLoads</key>
    <true/>
    <key>NSExceptionRequiresForwardSecrecy</key>
    <false/>
    <key>NSIncludesSubdomains</key>
    <true/>
    </dict>
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLName</key>
            <string>weixin</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>wx0cd8451d269de523</string>
            </array>
        </dict>
    </array>
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>jpush.cn</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSIncludesSubdomains</key>
                <true/>
            </dict>
        </dict>
    </dict>
创建HYHttpTool.swift

import UIKit

let WXAPPID = "wx0cd8451d269de523"
let WXSECRET = ""
let USER_DEFAULT = UserDefaults.standard // 获取userDefault
let WXRefreshToken = "WXLogTool_refreshToken"
let WXAccessToken = "WXLogTool_accessToken"
let WXOpenID = "WXLogTool_openid"
let WXUnionid = "WXLogTool_unionid"


class WXLogTool: NSObject, WXApiDelegate {

    /**
     * 创建单例,使用实例:let ClassName = HYHttpTool.shared
     */
    static let shared = WXLogTool.init()
    private override init() {}

    /// 注册appid
    func registerApp() {
        WXApi.registerApp(WXAPPID)
    }

    /// 收到一个来自微信的请求,第三方应用程序处理完后调用sendResp向微信发送结果
    ///
    /// - Parameter req: 具体请求内容,是自动释放的
    func onReq(_ req: BaseReq!) {

        if req.isKind(of: GetMessageFromWXReq.self) {
            // 微信请求APP提供内容,需要app提供内容后使用senRsp返回
            print("微信请求App提供内容,App要调用sendResp:GetMessageFromWXResp返回给微信")
        } else if req.isKind(of: ShowMessageFromWXReq.self) {

            let tmp: ShowMessageFromWXReq = req as! ShowMessageFromWXReq

            // 显示微信传过来的内容
            let msg: WXMediaMessage = tmp.message
            let obj: WXAppExtendObject = msg.mediaObject as! WXAppExtendObject

            print("标题:\(msg.title) 内容:\(msg.description) 附带信息:\(obj.extInfo) 缩略图:\(msg.thumbData.count)")
        } else if req.isKind(of: LaunchFromWXReq.self) {
            // 从微信启动app
            print("从微信启动app")
        }
    }

    /// 发送一个sendReq后,收到微信的回应
    ///
    /// - Parameter resp: 具体的回应内容,是自动释放的
    func onResp(_ resp: BaseResp!) {

        switch resp.errCode {
        case 0: // 用户同意
            // 调用相关方法
            let aresp: SendAuthResp = resp as! SendAuthResp
            print("code *********** \(aresp.code)")
            weChatCallBackWithCode(code: aresp.code)
            break
        case -4: // 用户拒绝授权
            break
        case -2: // 用户取消
            break
        default:
            break
        }

    }


    /** https://api.weixin.qq.com/sns/oauth2/access_token
     *  链接返回数据
     access_token : 接口调用凭证
     *  expires_in : access_token接口调用凭证超时时间,单位(秒)
     *  refresh_token : 用户刷新access_token
     *  openid : 授权用户唯一标识
     *  scope : 用户授权的作用域,使用逗号(,)分隔
     *  unionid : 当且仅当该移动应用已获得该用户的userinfo授权时,才会出现该字段
     */
    func weChatCallBackWithCode(code: String) {

        let urlString = "https://api.weixin.qq.com/sns/oauth2/access_token"
        print("urlString ************** \(urlString)")

        HYHttpTool.post(url: urlString, param: ["appid":WXAPPID,"secret":WXSECRET,"code":code,"grant_type":"authorization_code",]) { [weak self] (response, result) in
            print("code 获取 ************ \(String(describing: result.value))")

            let dic: NSDictionary = result.value as! NSDictionary
            if let errmsg = dic.value(forKey: "errmsg") {
                print("errmsg ************** \(errmsg)")
                return
            }

            USER_DEFAULT.set(dic.value(forKey: "refresh_token") as! String, forKey: WXRefreshToken)
            USER_DEFAULT.set(dic.value(forKey: "access_token") as! String, forKey: WXAccessToken)
            USER_DEFAULT.set(dic.value(forKey: "openid") as! String, forKey: WXOpenID)


            self?.getUserInfoWithAccessToken(accessToken:  dic.value(forKey: "access_token") as! String, openId: dic.value(forKey: "openid") as! String)
        }

    }

    /// 获取微信用户信息方法
    ///
    /// - Parameters:
    ///   - accessToken: 接口调用凭证
    ///   - openId: 授权用户唯一标识
    func getUserInfoWithAccessToken(accessToken: String, openId: String) {

        let urlString = "https://api.weixin.qq.com/sns/userinfo"

        HYHttpTool.post(url: urlString, param: ["access_token":accessToken,"openid":openId]) { (response, result) in
            print("获取微信用户信息方法 ************ \(String(describing: result.value))")
            let dic: NSDictionary = result.value as! NSDictionary

            if let errmsg = dic.value(forKey: "errmsg") {
                print("errmsg ************** \(errmsg)")
                return
            }
        }
    }


    /// 使用refresh_token刷新access_token
    ///
    /// - Parameter refreshToken: 用户刷新access_token
    func refreshAccessToken(refreshToken: String) {

        let urlString = "https://api.weixin.qq.com/sns/oauth2/refresh_token"

        HYHttpTool.post(url: urlString, param: ["appid":WXAPPID,"grant_type":"refresh_token","refresh_token":refreshToken]) { [weak self] (response, result) in
            print("使用refresh_token刷新access_token ************ \(String(describing: result.value))")
            let dic: NSDictionary = result.value as! NSDictionary

            if let errmsg = dic.value(forKey: "errmsg") {
                // 如果刷新失败,表示过期,可进行再次申请授权
                self?.sendAuthRequest()
                print("errmsg ************** \(errmsg)")
            } else {
                // 如果刷新成功,则根据refreshToken获取获取相关信息

                USER_DEFAULT.set(dic.value(forKey: "refresh_token") as! String, forKey: WXRefreshToken)
                USER_DEFAULT.set(dic.value(forKey: "access_token") as! String, forKey: WXAccessToken)
                USER_DEFAULT.set(dic.value(forKey: "openid") as! String, forKey: WXOpenID)

                self?.getUserInfoWithAccessToken(accessToken:  dic.value(forKey: "access_token")  as! String, openId: dic.value(forKey: "openid") as! String)
            }
        }
    }


    /// 判断本地的 access_token 是否可用
    ///
    /// - Parameters:
    ///   - access_token: 调用接口凭证
    ///   - openId: 普通用户标识,对该公众帐号唯一
    ///   - complete: 返回处理结果
    func accessTokenUsable(access_token: String, openId: String, complete: @escaping(Bool) -> Void) {

        let urlString = "https://api.weixin.qq.com/sns/auth"

        HYHttpTool.post(url: urlString, param: ["access_token":access_token,"openid":openId]) { (response, result) in
            print("判断本地的 access_token 是否可用 ************ \(String(describing: result.value))")
            let dic: NSDictionary = result.value as! NSDictionary

            if let errmsg = dic.value(forKey: "errmsg") {
                print("errmsg ************** \(errmsg)")

                if errmsg as! String == "ok" {
                    complete(true)
                } else {
                    complete(false)
                }
            }
        }
    }

    /// 登录点击方法
    func weChatLogin() {

        if WXApi.isWXAppInstalled() {
            print("****** 安装了微信APP *********")
        } else {
            print("****** 未安装微信 *********")
            return
        }

        if (USER_DEFAULT.object(forKey: WXAccessToken) != nil) {

            accessTokenUsable(access_token: USER_DEFAULT.object(forKey: WXAccessToken) as! String, openId: USER_DEFAULT.object(forKey: WXOpenID) as! String, complete: { [weak self] (isOK) in

                if isOK {
                    print("isOK === yes")
                    // 如果还可以用,则直接去申请用户信息
                    self?.getUserInfoWithAccessToken(accessToken:  USER_DEFAULT.object(forKey: WXAccessToken) as! String, openId: USER_DEFAULT.object(forKey: WXOpenID) as! String)
                } else {
                    print("isOK === no")
                    // 如果不可以用,则调取refreshAccessToken
                    // 如果存在则使用refresh_token刷新access_token
                    self?.refreshAccessToken(refreshToken: USER_DEFAULT.object(forKey: WXRefreshToken) as! String)
                }

            })
        } else {
            // 如果不存在则直接授权
            sendAuthRequest()
        }
    }

    /// 授权方法,直接跳转到微信进行授权
    func sendAuthRequest() {
        let req: SendAuthReq = SendAuthReq()
        req.scope = "snsapi_userinfo"
        req.state = "WechatLogTest"
        WXApi.send(req)
    }

}
Appdelegate中设置相关环境
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        // 注册信息
        WXLogTool.shared.registerApp()
        return true
    }

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        return WXApi.handleOpen(url, delegate: WXLogTool.shared) // 设置代理
    }
swift-WechatKit一款快速实现微信第三方登录的框架(Swift版) WechatKit 一款快速实现微信第三方登录的框架(Swift版) 立即下载

相关推荐

swift-LWWXTool微信登录注册分享到朋友圈支付等功能封装

LWWXTool 微信登录,注册,分享到朋友圈,支付等功能封装

iOS微信第三方登录实现

iOS微信第三方登录实现 注意:代码自己动手写,不要复制! 一、接入微信第三方登录准备工作。 移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。 在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的移动应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。(注意) 1

lg767201403的博客 5258

微信授权登陆 snsapi_base snsapi_userinfo

微信授权登陆 snsapi_base snsapi_userinfo 拿到所有信息

iOS第三方登录 微信登录 第三方登录微信详解AF3.0

iOS开发之第三方登录微信-- 史上最全最新第三方登录微信方式实现  标签: iOS第三方登录微信登录第三方登录微信详解AF3.0 2016-06-20 14:52 10322人阅读 评论(30) 收藏 举报 本文章已收录于:   iOS知识库  分类: Object_c(53)  版权声明:本文为博主原创文章,未经博主允许不得转载。

wakice的博客 2201

封装好的QQ微信第三方登录、分享,包含多平台区分用户唯一性

封装好的QQ微信第三方登录、分享,包含多平台区分用户唯一性

iOS 微信和支付宝,支付封装

需要你预先配置好支付环境,然后导入我的文件,就可以愉快的使用了

微信登录模块封装

【代码】微信登录模块封装。

Sun的个人博客 5000

IOS实现微信授权登录功能

微信是一个在开发中经常会使用到的平台,比如微信登录、授权、支付、分享。今天我们来看看如何在自己的应用里面集成微信授权。 1、微信授权的定义 微信OAuth2.0授权登录让微信用户使用微信身份安全登录第三方应用或网站,在微信用户授权登录已接入微信OAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等。 2、微信授权的步骤 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临

微信授权接口封装

获取微信授权

hulkwang的博客 736

Codex驱动AEDT完成无线充电仿真——从双线圈建模到三维电磁场动画

本文介绍了一个利用Codex、PyAEDT和Ansys Electronics Desktop 2025 R2实现双线圈无线充电系统自动建模与仿真的案例。通过简化模型(平面线圈+铁氧体磁芯),完成了从参数化建模、电磁场求解到后处理的全流程自动化,获得了耦合系数(k=0.17)、三维电磁场分布及多周期动态可视化效果。研究发现:线圈间距对传输效率影响最大(10-30mm间距时效率从40.2%降至5.57%),横向偏移15mm会使效率下降35%,而磁芯厚度增加带来的效率提升有限(3→7mm仅提高1.67%)。该框

sjjsjjsjjsjjsjj的博客 446

自研半导体Fab缺陷分析系统:从Klarf解析到Defect Map可视化的实战替代方案

本文分享了自研半导体Fab缺陷分析系统的实战经验,重点解析了Klarf文件格式与坐标系转换的核心技术,并详细介绍了从数据解析到Defect Map可视化的完整实现路径。该系统旨在为成本敏感或追求技术自主的团队提供一套功能完备的Klarity Defect平替方案,有效降低对昂贵商业软件的依赖,实现缺陷数据的自主分析与可视化。

y7z8a的博客 706

自封装简单微信平台登录和获取用户信息

接触微信,其实不难,网上找的例子,封装的好,但是对于不第一次用的感觉不好上手,就简单封装了一个,上手后用其他的应该特别简单了 类文件:wechat.php<?php namespace Org; class wechat { public $appId; public $appSecret; public $acce

南方有岛 843

Nginx源码安装和基础配置

Nginx简介 nginx: 世界第二大web服务器软件,以高并发、低消耗著称,源自于俄罗斯,创建者 Igor(伊戈尔),2004年开源,最早以代理服务器的身份出现,2015成立nginx公司,2019年以6.7亿被F5 Networks公司收购。 代理服务器: 正向:squid 反向: squid:最古老的代理服务器 LVS: 优点: 1.抗负载能力强、是工作在网络4层之上仅作分发之用 2.配置性比较低,这是一个缺点也是一个优点,简单不易出错 3.工作稳定,抗负载能力很强,有完整的双机热备方案

hjyhjy0的博客 500

封装QQ、微信、微博的第三方登录和分享,简单聊聊2024年Android开发的现状和思考

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长。而不成体系的学习效果低效漫长且无助。时间久了,付出巨大的时间成本和努力,没有看到应有的效果,会气馁是再正常不过的。所以学习一定要找到最适合自己的方式,有一个思路方法,不然不止浪费时间,更可能把未来发展都一起耽误了。如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。以上知识笔记全部免费分享,如有需要获取知识笔记的朋友,可以点击我的GitHub免费领取。自己的方式,有一个思路方法,不然不止浪费时间,更可能把未来发展都一起耽误了。

m0_60721695的博客 758

五、e2studio VS STM32CubeIDE之汉化

介绍stm32cubeide汉化方案和汉化包e2studio自带汉化包,在安装过程中可选择安装e2studio STM32CubeIDE切换中英文。

cl234583745的博客 1766

Agentic RL: 大模型后训练 SFT、PPO和GRPO

本文介绍了从LLM训练到Agentic RL的发展过程。传统LLM训练包括预训练和后训练两个阶段,其中后训练通过监督微调、奖励建模和强化学习等技术优化模型表现。针对智能体在复杂任务中的不足,提出了Agentic RL新范式,将LLM嵌入强化学习框架,通过多步交互、工具使用和环境反馈来优化长期目标。相比传统单轮对话优化(PBRFT),Agentic RL具有状态包含历史上下文、行动类型多样、动态状态转移等特点,更适合解决需要多步推理和规划的任务。这种新方法为开发更强大的智能体系统提供了可能。

Cachel Wood的博客 698

mysql json php 直接使用_PHP实现网站微信扫码登录,已封装直接可以使用

PHP实现网站微信扫码登录,这是一个非常简单而使用的封装方法,虽然不是最好的,但是可以实现,你可以在原来的基础上继续优化。直接看代码把

weixin_39575410的博客 84

Claude Code 分布式并行开发最佳实践:1中枢+10Worker跨多Git仓库全流程落地

本文介绍了一套基于Claude Code和Git Worktree的分布式并行开发方案,解决多仓库、微服务开发中的核心痛点。方案采用"1个决策中枢+10个并行Worker"架构,中枢负责任务拆解和调度,每个Worker绑定独立仓库实现完全隔离开发。关键优势包括:任务并行效率提升10倍、跨仓库依赖自动编排、版本统一管理、零第三方依赖。文章详细提供了环境准备、架构设计、中枢搭建和初始化脚本等全流程落地指南,特别适合多仓库协同的全栈开发场景。

AI天才研究院 243

微信小程序接口封装,带参跳转,使用手机号一键登录

1. 微信小程序接口封装 2. 微信小程序页面之间的交互 3. 微信小程序使用官方api教程

weixin_45693257的博客 1604

YOLOv13改进:注意力机制 | 动态稀疏注意力的双层路由方法BiLevelRoutingAttention | CVPR2023

BiLevelRoutingAttention方法对小目标检测效果比较好。可能是因为BRA模块是基于稀疏采样而不是下采样,一来可以保留细粒度的细节信息,二来同样可以达到节省计算量的目的。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1434

S32K1XX Autosar开发实战|全网独家复现EB MCAL Port/Dio配置、详解引脚分层原理、实现经典跑马灯助力车载IO电控落地

在NXP S32K1XX系列车规MCU的AUTOSAR标准开发体系中,MCAL(微控制器抽象层)是软硬件解耦的核心载体,而Port端口模块与Dio数字IO模块是MCAL最基础、最核心的入门模块,也是车载指示灯、按键检测、继电器驱动、外设硬件启停控制的底层支撑。区别于传统裸机直接操作寄存器的开发方式,AUTOSAR架构采用分层隔离设计,Port负责硬件静态初始化、Dio负责动态电平操控,严格遵循车规级开发规范,杜绝硬件资源冲突、引脚配置混乱等问题。

getusushu的博客 43

第三方接入封装(QQ,微信,微博,支付宝)

第三方登录分享支付在开发中经常会遇到为了方便下次接入使用特意封装了一下 接下来说下使用方法 使用之前还是需要配置编译环境的(添加以来库) QQ:只需要添加该库:SystemConfiguration.framework 微信和微博建议使用pods 支付宝环境配置 JYTPHelper这个是所有接入的整合 JYDefaultHelper 该类是父类,为必导文件 JYWCH...

Jayant_Y的博客 1173

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

微信小程序 - - - - -封装request请求

简单封装 request请求

Dark_programmer的博客 350

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

gewechat-python:一款强大的微信机器人自动化工具

gewechat-python:一款强大的微信机器人自动化工具 gewechat-python 是一个功能强大的 Python 客户端,用于实现微信机器人的自动化操作。通过该工具,开发者可以方便地实现登录、获取好友列表、获取好友信息以及发送消息等功能,适用于多种场景,如自动化营销、数据抓取等。 项目介绍 gewechat-python 是一个基于微信网页版的 Python 客户端,它通过模拟网页版...

gitblog_01049的博客 881

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

pos请求 微信小程序_微信小程序request请求封装,验签

//简单封装请求function request(params, path, isShowLoading = true, goBack = false, type = 'none', obj={}) {try{console.log(path)let NowTime= Date.parse(new Date()) / 1000;let defaultParams={platform: app.gl...

weixin_35176891的博客 172
上一篇: h5添加背景音乐
下一篇: swift常用三方
瓦怕落地
博客等级 码龄11年 16粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值