uni-app开发经验分享二十: 微信小程序 授权登录 获取详细信息 获取手机号
阅读原文时间:2021年09月03日阅读:10

授权页面

因为微信小程序提供的 权限弹窗 只能通用户确认授权 所以可以 写一个授权页面,让用户点击 来获取用户相关信息 然后再配合后台就可以完成登录

事件
getPhoneNumber(val){
console.log(val)
},

这个需要 真机测试 或 预览

至于后台解密

我的项目后台解密

package jstfsn;

import java.io.UnsupportedEncodingException;
import java.security.Security;
import java.security.spec.AlgorithmParameterSpec;
import java.sql.Connection;
import java.text.ParseException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.naming.NamingException;

import org.apache.commons.codec.binary.Base64;
import org.apache.log4j.Logger;

import GCcom.CommonValue;
import GCcom.DBOperation;
import StxsysBass.StxsysAdmin.CheckingLineService;
import com.alibaba.fastjson.JSONObject;
import com.justep.baas.action.ActionContext;

public class Login {

/\*\*  
 \* 查询历史线路未巡检的巡检点  
 \*  
 \* @param params  
 \* @param context  
 \* @return  
 \* @throws NamingException  
 \*/

/\*\*  
 \* 日志  
 \*/  
public static Logger logger = Logger.getLogger(CheckingLineService.class);  
/\*\*  
 \* 数据库名  
 \*/  

// public static String DATASOURCE = CommonValue.MYSQL_DATA_BASE_JSTFSN;

/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
 \* 函数名:    getWxUserInfo  
 \* 参数名:    JSONObject params: 参数集  
 \*             ActionContext context : 上下文  
 \*  
 \* 功能: 通过用户授权加密信息解密获取用户信息  
 \*  
 \* 开发者:    Leechen8@gmail.com 20200317  
 \*  
 \* 修改者:  
 \*  
 \* @return  
 \* @throws ParseException  
 \*  
 \*  
 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/  
public static JSONObject getWxUserInfo(JSONObject params, ActionContext context) throws NamingException {  
    // 获取参数  
    String strCipher = "";  
    String strEncrypdata = params.getString("encrypdata");  
    String strIvdata = params.getString("ivdata");  
    String strSessionkey= params.getString("sessionkey");

    byte\[\] byEncrypdata = Base64.decodeBase64(strEncrypdata);  
    byte\[\] byIvdata = Base64.decodeBase64(strIvdata);  
    byte\[\] bySessionkey = Base64.decodeBase64(strSessionkey);

    JSONObject jsData = new JSONObject();

    AlgorithmParameterSpec ivSpec = new IvParameterSpec(byIvdata);  
    Cipher cipher;  
    try {  
        SecretKeySpec keySpec = new SecretKeySpec(bySessionkey, "AES");  
        cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");  
        cipher.init(Cipher.DECRYPT\_MODE, keySpec, ivSpec);  
        strCipher = new String(cipher.doFinal(byEncrypdata),"UTF-8");  
        jsData.put("phone", strCipher);

    } catch (Exception e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
        jsData.put("error", e.getMessage());  
    }

    return jsData;  
}

}

可参考 https://blog.csdn.net/qq_38194393/article/details/81382108

获取详细信息 获取手机号 优化封装

页面

wxlogin.js

import {getPhone as getphone} from '@/store/api.js'
/*
微信登录
返回 code
*/
export const wxlogin = ()=> {
return new Promise((resolve, reject)=>{
uni.showLoading({
title: '登录中…'
});

    uni.login({  
        provider: 'weixin',  
        success: function(loginRes) {  
            resolve(loginRes.code);  
            uni.hideLoading();  
        },  
        fail(err) {  
            reject(err)  
            uni.hideLoading();  
        }  
    })

})  

}

/*
获取微信用户信息 要先调用登录接口
返回用户信息
*/
export const wxUserInfo = ()=>{
return new Promise((resolve, reject)=>{
uni.getUserInfo({
provider: 'weixin',
success: function(res) {
resolve(res);
},
fail(err) {
reject(err)
}
});
})
}

/*
获取微信用户手机号 要先调用登录接口
参数:obj{
sessionkey,
ivdata,
encrypdata
}
返回手机号相关信息

*/
export const getPhone = (obj)=>{
return new Promise((resolve, reject)=>{
getphone(obj).then(res=>{
resolve(JSON.parse(res.data.data.phone))
},err=>{
reject(err)
})
})
}

api.js

// 接口获取 sessionkey
export const htxcx = (appid,secret,code)=>uniAjax("https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code")

// 解密手机号
export const getPhone = (obj)=>uniAjax(BASE_URL_dev+"/getWxUserInfo",obj,"POST")

转载于:https://blog.csdn.net/weixin_42448623/article/details/104928750

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章