uniapp 苹果app,实现微信授权登录

简介: uniapp 苹果app,实现微信授权登录

在使用 UniApp 开发苹果 APP 时,实现微信授权登录需要前端和后端的配合。前端使用 JavaScript 与微信 SDK 进行交互,而后端使用 Java 处理微信授权登录的具体逻辑。以下是实现微信授权登录的详细代码和注释。

前端代码(UniApp)

首先,我们需要集成微信 SDK,并配置微信应用的相关信息。

在微信开发者平台配置应用

  • 获取 AppIDAppSecret
  • 配置授权回调域名。


在 UniApp 中引入微信 SDK

1. // 引入微信SDK
2. import Weixin from 'weixin-js-sdk';

在前端进行微信授权登录

// 调用微信授权登录接口
function wechatLogin() {
    Weixin.login({
        success(res) {
            if (res.code) {
                // 通过code获取用户信息
                getWechatUserInfo(res.code);
            } else {
                console.log('登录失败!' + res.errMsg);
            }
        }
    });
}
 
// 通过code获取用户信息
function getWechatUserInfo(code) {
    uni.request({
        url: 'https://your-backend-api.com/wechatLogin',
        method: 'POST',
        data: {
            code: code
        },
        success(res) {
            if (res.data.success) {
                // 保存用户信息
                saveUserInfo(res.data.userInfo);
            } else {
                console.log('获取用户信息失败!');
            }
        },
        fail(err) {
            console.log('请求失败', err);
        }
    });
}
 
// 保存用户信息
function saveUserInfo(userInfo) {
    uni.setStorageSync('userInfo', userInfo);
    uni.showToast({
        title: '登录成功',
        icon: 'success'
    });
}
 
// 调用微信登录
wechatLogin();

后端代码(Java)

后端需要接收前端传递的 code,并使用 AppIDAppSecret 请求微信服务器获取 access_token 和用户信息。


引入所需的依赖

pom.xml 文件中添加微信 SDK 的依赖:

<dependency>
    <groupId>com.github.binarywang</groupId>
    <artifactId>weixin-java-mp</artifactId>
    <version>4.1.0</version>
</dependency>

配置微信开发者信息

@Configuration
public class WxMpConfig {
    @Value("${wechat.appid}")
    private String appId;
 
    @Value("${wechat.secret}")
    private String appSecret;
 
    @Bean
    public WxMpService wxMpService() {
        WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl();
        config.setAppId(appId);
        config.setSecret(appSecret);
        WxMpService wxMpService = new WxMpServiceImpl();
        wxMpService.setWxMpConfigStorage(config);
        return wxMpService;
    }
}

实现微信授权登录接口

@RestController
@RequestMapping("/wechat")
public class WechatController {
    @Autowired
    private WxMpService wxMpService;
 
    @PostMapping("/login")
    public ResponseEntity<Map<String, Object>> wechatLogin(@RequestBody Map<String, String> params) {
        String code = params.get("code");
        Map<String, Object> result = new HashMap<>();
 
        try {
            WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
            WxMpUser user = wxMpService.oauth2getUserInfo(accessToken, null);
 
            // 将用户信息存储到数据库
            User userInfo = saveUser(user);
 
            result.put("success", true);
            result.put("userInfo", userInfo);
            return ResponseEntity.ok(result);
        } catch (WxErrorException e) {
            e.printStackTrace();
            result.put("success", false);
            result.put("message", "登录失败");
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(result);
        }
    }
 
    private User saveUser(WxMpUser wxUser) {
        // 实现将微信用户信息存储到数据库的逻辑
        User user = new User();
        user.setOpenId(wxUser.getOpenId());
        user.setNickname(wxUser.getNickname());
        user.setAvatar(wxUser.getHeadImgUrl());
        // TODO: 保存用户到数据库
        return user;
    }
}

代码详解

前端代码详解

微信 SDK 的引入与登录

import Weixin from 'weixin-js-sdk';
 
function wechatLogin() {
    Weixin.login({
        success(res) {
            if (res.code) {
                getWechatUserInfo(res.code);
            } else {
                console.log('登录失败!' + res.errMsg);
            }
        }
    });
}

    引入微信 SDK,并调用 Weixin.login 方法进行微信登录。成功登录后,会返回一个 code,我们将其传递给后端以获取用户信息


获取微信用户信息

function getWechatUserInfo(code) {
    uni.request({
        url: 'https://your-backend-api.com/wechatLogin',
        method: 'POST',
        data: {
            code: code
        },
        success(res) {
            if (res.data.success) {
                saveUserInfo(res.data.userInfo);
            } else {
                console.log('获取用户信息失败!');
            }
        },
        fail(err) {
            console.log('请求失败', err);
        }
    });
}

code 传递给后端,并通过 uni.request 请求后端接口获取用户信息。

保存用户信息

function saveUserInfo(userInfo) {
    uni.setStorageSync('userInfo', userInfo);
    uni.showToast({
        title: '登录成功',
        icon: 'success'
    });
}
 
wechatLogin();

将获取到的用户信息保存到本地存储中,并显示登录成功的提示。

后端代码详解

配置微信开发者信息

@Configuration
public class WxMpConfig {
    @Value("${wechat.appid}")
    private String appId;
 
    @Value("${wechat.secret}")
    private String appSecret;
 
    @Bean
    public WxMpService wxMpService() {
        WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl();
        config.setAppId(appId);
        config.setSecret(appSecret);
        WxMpService wxMpService = new WxMpServiceImpl();
        wxMpService.setWxMpConfigStorage(config);
        return wxMpService;
    }
}

使用 @Configuration 注解配置微信开发者的 AppIDAppSecret

实现微信授权登录接口

@RestController
@RequestMapping("/wechat")
public class WechatController {
    @Autowired
    private WxMpService wxMpService;
 
    @PostMapping("/login")
    public ResponseEntity<Map<String, Object>> wechatLogin(@RequestBody Map<String, String> params) {
        String code = params.get("code");
        Map<String, Object> result = new HashMap<>();
 
        try {
            WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code);
            WxMpUser user = wxMpService.oauth2getUserInfo(accessToken, null);
 
            User userInfo = saveUser(user);
 
            result.put("success", true);
            result.put("userInfo", userInfo);
            return ResponseEntity.ok(result);
        } catch (WxErrorException e) {
            e.printStackTrace();
            result.put("success", false);
            result.put("message", "登录失败");
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(result);
        }
    }
 
    private User saveUser(WxMpUser wxUser) {
        User user = new User();
        user.setOpenId(wxUser.getOpenId());
        user.setNickname(wxUser.getNickname());
        user.setAvatar(wxUser.getHeadImgUrl());
        // TODO: 保存用户到数据库
        return user;
    }
}

创建微信登录接口,接收前端传递的 code。使用 wxMpService.oauth2getAccessToken(code) 获取 access_token。使用 wxMpService.oauth2getUserInfo(accessToken, null) 获取微信用户信息。将用户信息保存到数据库,并返回给前端。


通过上述步骤,你可以在 UniApp 开发的苹果应用中实现微信授权登录功能。

相关文章
|
6月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
854 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
6月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
316 0
|
6月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1093 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
6月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1011 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
7月前
|
存储 前端开发 安全
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
309 5
|
7月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
8月前
|
缓存 小程序 开发工具
最新原创uniapp+vue3仿微信界面聊天app系统
最新原创研发uniapp+vue3实战跨端仿微信App界面聊天程序。支持运行到H5+小程序+APP端。
375 6
最新原创uniapp+vue3仿微信界面聊天app系统
|
9月前
|
存储 人工智能 Android开发
为什么微信发送的APP安装不了,.apk转化为.apk.1
微信发送的APP文件常被改为.apk.1格式导致无法安装,推荐使用夸克或QQ浏览器解决。
1251 14
|
11月前
|
Android开发 数据安全/隐私保护 开发者
Android自定义view之模仿登录界面文本输入框(华为云APP)
本文介绍了一款自定义输入框的实现,包含静态效果、hint值浮动动画及功能扩展。通过组合多个控件完成界面布局,使用TranslateAnimation与AlphaAnimation实现hint文字上下浮动效果,支持密码加密解密显示、去除键盘回车空格输入、光标定位等功能。代码基于Android平台,提供完整源码与attrs配置,方便复用与定制。希望对开发者有所帮助。
215 0
|
开发工具 开发者 iOS开发
如果苹果上架审核7个工作日仍无反应如何向苹果官方询问进度和提交反馈-App Store Connect方式和发送邮件询问方式-优雅草卓伊凡
如果苹果上架审核7个工作日仍无反应如何向苹果官方询问进度和提交反馈-App Store Connect方式和发送邮件询问方式-优雅草卓伊凡
3462 2
如果苹果上架审核7个工作日仍无反应如何向苹果官方询问进度和提交反馈-App Store Connect方式和发送邮件询问方式-优雅草卓伊凡
下一篇
开通oss服务