微信小程序登录获取openid(前端+java后台)附完整源码

一、新建一个项目

在此就不赘述了

二、清空index目录,实现我们自己的前端业务

  • index.wxml,创建一个button,点击改button发起登录
<!--index.wxml-->
<button bindtap='login'>登录</button>
  • index.js

  • 通过wx.login()来获取code

  • 如果成功获取,那么返回code
  • 然后调用wx.request()向服务端发起一个请求,即向登录api接口发送code
  • 换取openid和session_key
//index.js
//获取应用实例
const app = getApp()
Page({
    data: {

    },
    //登录获取code
    login: function () {
        wx.login({
            success: function (res) {
                console.log('code:'+res.code)
                //发送请求
                wx.request({
                    url: 'http://localhost:8080/hbaseDemo/servlet/WechatServlet', //改成自己的服务器地址
                    data: { 
                        code: res.code ,//上面wx.login()成功获取到的code
                        operFlag: 'getOpenid',
                    },
                    header: {
                        'content-type': 'application/json' //默认值
                    },
                    success: function (res) {
                        console.log(res)
                    }
                })
            }
        })
    }
})

三、服务端开发详细介绍

到此,小程序端已经搞定了。
开始写服务端,也很容易。

  • 首先获取从小程序传过来的code
  • 再配置自己小程序的appid和appscret
  • 把这些参数拼接到api接口上进行请求发送就可以返回openid和session_key
    -接口详情请看官方文档登录的详细介绍


    下面看看Java实现的代码

  • web.xml中添加一个servlet
<!-- 微信 -->
    <servlet>
        <servlet-name>WechatServlet</servlet-name>
        <servlet-class>com.cserver.iot.hbaseDemo.test.WechatServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>WechatServlet</servlet-name>
        <url-pattern>/servlet/WechatServlet</url-pattern>
    </servlet-mapping>
  • servlet中获取小程序传来的code,并根据此code和自己微信小程序的appId和AppSecret,通过微信提供的API接口得到当前用户的session_key以及openid。
  • appId和AppSecret在开发者平台可以找到

这里写图片描述

  • Java代码如下
package com.cserver.iot.hbaseDemo.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.javafx.collections.MappingChange.Map;

@SuppressWarnings("serial")
public class WechatServlet extends HttpServlet {

    private String appid = "自己的appid";
    private String secretKey = "自己的AppSecret";

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet--------------------");
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("doPost--------------------");
        // 获取操作类型,根据类型执行不同操作
        String operFlag = request.getParameter("operFlag");
        System.out.println("operFlag"+operFlag);
        String results = "";
        if ("getOpenid".equals(operFlag)) {
            String code = request.getParameter("code");   //拿到微信小程序传过来的code
            System.out.println(code);
            String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appid + "&secret=" + secretKey
                    + "&js_code=" + code + "&grant_type=authorization_code";   //接口地址
            System.out.println("url"+url);
            results = sendGetReq(url);// 发送http请求
            System.out.println("results"+results);
        }

        response.setContentType("application/json;charset=UTF-8");
        response.setHeader("catch-control", "no-catch");
        PrintWriter out = response.getWriter();
        out.write(results);
        out.flush();
        out.close();
    }

    private String sendGetReq(String url) {
        String result = "";
        BufferedReader in = null;
        try {
            String urlNameString = url;
            URL realUrl = new URL(urlNameString);
            // 打开和URL之间的连接
            URLConnection connection = realUrl.openConnection();
            // 设置通用的请求属性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 建立实际的连接
            connection.connect();
            // 获取所有响应头字段
            java.util.Map<String, List<String>> map = connection.getHeaderFields();
            // 遍历所有的响应头字段
            for (String key : map.keySet()) {
                System.out.println(key + "--->" + map.get(key));
            }
            // 定义 BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送GET请求出现异常!" + e);
            e.printStackTrace();
        } // 使用finally块来关闭输入流
        finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return result;
    }
}

结果

成功结果
拿到session_key和openid就可以干你想干的其他事了
本次教程到此就结束了,有不懂的可以加我微信交流讨论
这里写图片描述

  • 10
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值