Uniapp WeChat applet authorized login front and back end complete set

Preface

The small program written in Uniapp is about to go online, but it turned out that WeChat could not be reviewed. I also find it very strange! The dismissal information is as follows.
Insert picture description here
This is true, because the code written before must be in debug mode when obtaining user openid. I thought it was a problem of not being online! This time, it’s good, but the online is not allowed, there is no story behind it.

Before

uni.login({
    
    
					provider: 'weixin',
					success: function(res) {
    
    
						console.log(res)
						let appid = ''
						let secret = ''
						let url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appid + '&secret=' + secret + '&js_code=' +
							res.code + '&grant_type=authorization_code';
						uni.request({
    
    
							url: url, // 请求路径
							success: result => {
    
    
								console.info("result.data==>", result.data);
								let openId = result.data.openid;
								console.info("openId==>", openId);
							},
						});
					}
				});

The previous writing method was not authorized by our own server, and the front-end was done directly, and the user's openid could indeed be obtained, and then the above problem occurred!

Server authorization

Server

	@GetMapping("/wxOAuth")
    public JSONObject list(String code) {
    
    
        String requestUrl = "https://api.weixin.qq.com/sns/jscode2session";
        Map<String,String> requestUrlParam = new HashMap<String,String>();
        requestUrlParam.put("appid","");	//开发者设置中的appId
        requestUrlParam.put("secret", "");	//开发者设置中的appSecret
        requestUrlParam.put("js_code", code);	//小程序调用wx.login返回的code
        requestUrlParam.put("grant_type", "authorization_code");//默认参数
        JSONObject jsonObject = JSON.parseObject(UrlUtil.sendPost(requestUrl, requestUrlParam));
        return  jsonObject;
    }
//请求工具类
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.Iterator;
import java.util.Map;

public class UrlUtil {
    
    
    /**
     * 向指定 URL 发送POST方法的请求
     *
     * @param url 发送请求的 URL
     * @return 所代表远程资源的响应结果
     */
    public static String sendPost(String url, Map<String, ?> paramMap) {
    
    
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";

        String param = "";
        Iterator<String> it = paramMap.keySet().iterator();

        while(it.hasNext()) {
    
    
            String key = it.next();
            param += key + "=" + paramMap.get(key) + "&";
        }

        try {
    
    
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            // 设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("Accept-Charset", "utf-8");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            // 发送请求参数
            out.print(param);
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line;
            while ((line = in.readLine()) != null) {
    
    
                result += line;
            }
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
        //使用finally块来关闭输出流、输入流
        finally{
    
    
            try{
    
    
                if(out!=null){
    
    
                    out.close();
                }
                if(in!=null){
    
    
                    in.close();
                }
            }
            catch(IOException ex){
    
    
                ex.printStackTrace();
            }
        }
        return result;
    }
}

front end

			wxGetUserInfo() {
    
    
				uni.login({
    
    
					provider: 'weixin',
					success: loginRes => {
    
    
						console.log(loginRes.code)
						getWxOauth(
							loginRes.code
						).then(res => {
    
    
							console.log(res)
							let openId = res.data.openid;
							console.info("openId==>", openId);
						}).catch(res => {
    
    
						
						})
					}
				});
			},

Get it done!

Guess you like

Origin blog.csdn.net/CSDN877425287/article/details/113657331