微信小程序接入微信登录后端API

这篇具有很好参考价值的文章主要介绍了微信小程序接入微信登录后端API。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微信官方文档:小程序登录 | 微信开放文档 (qq.com)

微信官方流程图:

微信登录api,微信,微信小程序,java,spring

 

一.接入前准备

1.前端获取code

获取微信登录codehttps://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html

2.获取微信用户信息

获取微信用户信息https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserProfile.html

后台我这边是使用springboot yml配置

3.yml配置

#微信配置
wx:        
    #微信公众号或者小程序等的appid
    appId: xxxxxxxxxxxxxxxxxx
    #应用密钥
    appSecret: xxxxxxxxxxxxxxxxxx
    #微信支付商户号
    merchantId: xxxxxxxxxxxxxxxxxx
    #微信支付商户密钥
    mchKey: xxxxxxxxxxxxxxxxxx
    #商户证书目录
    keyPath: xxxxxxxxxxxxxxxxxx
    #商户API私钥路径 部署到centos后 /etc/wx-pay/apiclient_cert.pem
    privateKeyPath: C:\Users\admin\Desktop\wx\apiclient_cert.pem
    #商户API密钥证书路径 部署到centos后 /etc/wx-pay/apiclient_key.pem
    wechatPayCertificatePath: C:\Users\admin\Desktop\wx\apiclient_key.pem
    #商户证书序列号
    merchantSerialNumber: xxxxxxxxxxxxxxxxxx
    #商户APIV3密钥
    apiV3Key: xxxxxxxxxxxxxxxxxx

4.实体类参数配置

@Data
//@Primary 这个配置暂时用不上
@Configuration()
@PropertySource("classpath:application.yml") //读取配置文件
@ConfigurationProperties(prefix = "wx")
public class WXProperties {
    /** appId : 微信公众号或者小程序等的appid */
    private  String appId;
    /** appSecret : 应用密钥 */
    private  String appSecret;
    /** mchId : 微信支付商户号 */
    private  String merchantId;
    /** mchKey : 微信支付商户密钥 */
    private  String mchKey;
    /** mchKey : 商户证书目录 */
    private  String keyPath ;
    /**商户API私钥路径*/
    private  String privateKeyPath ;
    /**商户API密钥证书路径*/
    private  String wechatPayCertificatePath ;
    /** 商户证书序列号*/
    private  String merchantSerialNumber ;
    /**商户APIV3密钥*/
    private  String apiV3Key ;

}

二.后台接入

1.获取openid

获取openid官方文档https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.html

      根据前端给定微信登录的code获取opendiHutool工具官网https://hutool.cn/docs/#/?id=%f0%9f%93%9a%e7%ae%80%e4%bb%8b

@Resource
private WXProperties wxProperties;

public String getOpenid(String code){
       //这里是直接拼接的一个url
    String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" 
                + wxProperties.getAppId() + "&secret=" + wxProperties.getAppSecret() 
                + "&js_code=" + code + "&grant_type=authorization_code";
    //HttpUtil这个是hutool工具包里面的,一个很好用的封装工具;当然你也可以用别的工具
    String result = HttpUtil.get(url);
    return result;
}

2.我自己的登录由于需要获取登录者的手机号,代码如下

微信官方对不同类型解密文档https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html

@PostMapping("/wxLogin")
    public Result wxLogin(@RequestParam("code") String code,
                              @RequestParam("encryptedIv") String encryptedIv,
                              @RequestParam("rawData") String rawData,
                              @RequestParam("encryptedData") String encryptedData) {
        //wx.login返回的code
        log.info("微信登录参数code:" + code);
        //不需要解密的话可以不传入这些参数看自己业务
        //解密的iv
        log.info("登录信息参数encryptedIv:" + encryptedIv);
        //要解密的数据
        log.info("登录信息参数encryptedData:" + encryptedData);
        //rawData微信头像,昵称等信息,看自己业务需要
        log.info("登录微信账户参数信息rawData:" + rawData);
        //想微信服务器发送请求获取用户信息
        //https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
        String url = "https://api.weixin.qq.com/sns/jscode2session?appid="
                + wxProperties.getAppId() + "&secret=" + wxProperties.getAppSecret()
                + "&js_code=" + code + "&grant_type=authorization_code";
        String result = HttpUtil.get(url );
        JSONObject jsonObject = JSONObject.parseObject(result);
        log.info("result:" + result);
        //获取session_key和openid
        String sessionKey = jsonObject.getString("session_key");
        //解密 是获取微信用户的手机号
        String decryptResult = "";
        try {
            //如果没有绑定微信开放平台,解析结果是没有unionid的。
            decryptResult = decryptionUserInfo(sessionKey, encryptedIv, encryptedData);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("微信登录失败!");
        }
        //解析成功就可以写自己的系统业务逻辑了
        //我这里就开始调用登录方法创建token了,至于自己的登录方法逻辑是什么要做什么逻辑处理就看业务需要了
        if (StringUtils.hasText(decryptResult)) {
            //如果解析成功,获取token
            String token = loginService.wxLogin(decryptResult, result, rawData);
            Result r = Result.success();
            r.put(Constants.TOKEN, token);
            return r;
        } else {
            return AjaxResult.error("微信登录失败!");
        }
    }

用户信息解密

public String decryptionUserInfo(String sessionKey, String iv, String encryptedData) {
        String result = null;
        // 被加密的数据
        byte[] dataByte = Base64.decode(encryptedData);
        // 加密秘钥
        byte[] keyByte = Base64.decode(sessionKey);
        // 偏移量
        byte[] ivByte = Base64.decode(iv);
        try {
            // 如果密钥不足16位,那么就补足. 这个if 中的内容很重要
            int base = 16;
            if (keyByte.length % base != 0) {
                int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);
                byte[] temp = new byte[groups * base];
                Arrays.fill(temp, (byte) 0);
                System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
                keyByte = temp;
            }
            //初始化
            AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivByte);
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            SecretKeySpec keySpec = new SecretKeySpec(keyByte, "AES");
            cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
            byte[] doFinal = cipher.doFinal(dataByte);
            result = new String(doFinal);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

最后有一个参考文献,找不到了,有遇到的就提醒一下咯文章来源地址https://www.toymoban.com/news/detail-759728.html

到了这里,关于微信小程序接入微信登录后端API的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 后端 .net7 Minimal API 限流中间件(微信小程序无师自通十)

            我的微信小程序使用.net7 Minimal API 作为后端,当服务器摆上公网后,可以观察到很多的攻击行为和暴力访问。所以,我需要使用微软的限流中间件部署相应的功能在服务器上 : AddFixedWindowLimiter using Microsoft.AspNetCore.RateLimiting; using System.Threading.RateLimiting; 后端

    2024年02月12日
    浏览(37)
  • Gpt微信小程序搭建的前后端流程 - 前端小程序部分-2.确定交互所需的后端API(二)

    Gpt微信小程序搭建的前后端流程 - 前端小程序部分-2.确定交互所需的后端API(二) 参考微信小程序- 小柠AI智能聊天 ,可自行先体验。 根据上一节的小程序静态页面设计,需要从后端获取数据的主要4个点: 登录流程; 获取今日已提问次数; 获取聊天记录; 发起聊天和响应。

    2024年02月13日
    浏览(40)
  • 微信小程序+SpringBoot接入后台服务,接口数据来自后端

    文章底部有个人公众号:小兔教你学编程。主要目的是方便阅读。主要分享一些前后端初中级知识、开发实战案例、问题解决等知识。        前两天开发了一个微信小程序项目,只不过接口数据是自己设置的假数据。然后我就想将这些假数据替换掉。这些数据来自接口,

    2024年02月12日
    浏览(54)
  • 【微信小程序】实现微信小程序登录(附源码)后端,微信小程序获取手机号

    登录简介 第一步:获取token 第二步:通过token拿用户信息 第三步:调用接口获取手机号 HttpClientUtil: WeChatUtil: controller层: service层: serviceImpl层: 登录简介        新版本微信小程序登录 是前端获取用户信息,不再是后端获取信息进行保存。所以后端要做的主要流程就是

    2024年04月23日
    浏览(61)
  • 微信小程序登录流程(包含前端、后端代码)

    在微信小程序的开发过程中,如果想要保留 用户 的 数据 (比如: 操作记录 、 购物车信息 等等)就必须要 用户 登陆。为什么呢?比如说,数据库中有一条 数据 你如何知道这条数据属于谁?属于那个用户呢?这就需要用户登录来获取 用户 的 唯一标识 从而确定这条数据是属

    2024年02月03日
    浏览(53)
  • 微信小程序登录+获取手机号码(前端+后端)

    上面这张是微信小程序官方原图,登录流程如上图所示,下面一步步进行以及说一下碰到的坑。 1.wx.login()获取code         调用微信小程序官方提供的方法获取code提供给后端用以换取session_key、openid。         注意:code只能使用一次就会失效,且有效期为5分钟 2.后端收到

    2024年02月12日
    浏览(55)
  • 微信小程序--API

    异步API:通常接受一个object类型参数 例如 wx:request({}) 同步API:约定以Sync结尾 例如 wx:setStorageSync() 事件监听API:约定以on开头 例如 wx:onAppHide() 支持callback 或者 Promise 两种调用方式 1.当接口参数 Object 对象中不包含 success/fail/complete 时默认返回Promise 2.部分接口 如request , uplo

    2024年04月26日
    浏览(25)
  • 微信小程序常用API

    1. wx.openAppAuthorizeSetting(Object object) 跳转系统微信授权管理页 2. wx.getWindowInfo() 获取窗口信息 3. wx.getSystemInfoAsync(Object object) 异步获取系统信息。需要一定的微信客户端版本支持,在不支持的客户端上,会使用同步实现来返回。 4. wx.getAppAuthorizeSetting() 获取微信 APP 授权设置 小程

    2024年02月09日
    浏览(45)
  • 微信小程序API(详细 教程)

    小程序中的 API 是由宿主环境提供的,通过这些丰富的小程序 API,开发者可以方便的调用微信提供的能力,例如:获取用户信息、本地存储、支付功能等。 小程序提供了很多实用的方法供开发者使用 小程序全局对象是: wx 所有的 API 都保存在 wx 对象中 显示消息提示框: wx.sh

    2023年04月15日
    浏览(44)
  • 微信小程序 | 小程序系统API调用

    🖥️ 微信小程序专栏:小程序系统API调用 🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 ✨ 个人主页:CoderHing的个人主页 🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ 👉 你的一键三连是我更新的最大动力❤️ 目录 一、网络请求API和封装 网络请求 – API参数 网络请

    2024年02月03日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包