1. 公众号申请好后,配置公众号基本信息,主要是appid,AppSecret, 还有ip白名单
2. 配置授权域名,不然调用接口获取openid会提示redirect_uri域名与配置不一致
1)填写域名
2)下载txt文件,放在项目根目录
3. uniapp 中的代码
1)首页的代码:获取token
2)main.js 中代码:appid:公众号的appid
意义:判断是否已经有Authorization,即token,没有的话跳转到auth认证页面去获取token,有的话不跳转,继续之前页面的逻辑
3)auth.vue
意义:该页面和微信做交互,获取code,然后传给后台解析出openid,并在后台生成token,再返回前台,获取成功则跳转到预设的页面(uni.getStorageSync('now_url'))
<template>
<view >
</view>
</template>
<script >
export default {
//生命周期函数
created() {
const code = this.getUrlParame('code') // 截取code
if (!code) {
//没有code,跳转腾讯地址,获取code
var redirect_uri = this.urlencode(window.location.href);
var url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+this.appid+"&redirect_uri=" + redirect_uri + "&response_type=code" + "&scope=snsapi_userinfo" + "&state=STATE#wechat_redirect";
window.location.href = url;
} else {
this.$zxy.request(this.serviceUrl + "mobile/api/Weixin/getToken?code=" + code,{}).then(res=>{
//获取token
uni.setStorageSync('Authorization',res.datas);
//跳转地址
window.location.href = uni.getStorageSync('now_url');
}).catch(err=>{
uni.showToast({
title:err.msg,
duration:2000
})
});
}
},
data() {
return {};
},
methods: {
// 截取code
getUrlParame(parameName) {
/// 获取地址栏指定参数的值
/// <param name="parameName">参数名</param>
// 获取url中跟在问号后面的部分
var parames = window.location.search
// 检测参数是否存在
if (parames.indexOf(parameName) > -1) {
var parameValue = ''
parameValue = parames.substring(parames.indexOf(parameName), parames.length)
// 检测后面是否还有参数
if (parameValue.indexOf('&') > -1) {
// 去除后面多余的参数, 得到最终 parameName=parameValue 形式的值
parameValue = parameValue.substring(0, parameValue.indexOf('&'))
// 去掉参数名, 得到最终纯值字符串
parameValue = parameValue.replace(parameName + '=', '')
return parameValue
}
return ''
}
},
urlencode(url){
url = (url + '').toString();
return encodeURIComponent(url).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
}
}
};
</script>
4) tp6后台解析code
其中:appId,appSecret为公众号的配置,上面有提到了
curlTool为自己封装的curl方法,可以自己封装一个
5) 具体的生成token,通过各自的逻辑算法去加密吧,这里就不概述了