1. 程式人生 > 其它 >Uniapp微信小程式授權的登入前後端全套

Uniapp微信小程式授權的登入前後端全套

技術標籤:JAVA

前言

用Uniapp寫的小程式要上線了,結果微信不過審,我也覺得很奇怪!駁回資訊如下
在這裡插入圖片描述
這麼一說的話確實,因為之前的寫的程式碼獲取使用者openid的時候必須要是除錯模式,我還以為是沒上線的問題!這下好了,上線都不讓上,哪還有後面的故事。

之前的寫法

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); }, }); } });

之前的寫法是沒經過我們自己伺服器授權的,直接前端搞定,確實也能獲取到使用者的openid,然後就出現上面的問題!

伺服器授權寫法

服務端

	@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;
    }
}

前端

			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 => {
						
						})
					}
				});
			},

搞定!