+
95
-

回答

首先登录公众号后台设置接口权限,在网页账号里点击修改


授权毁掉页面域名设置为h5网页的访问地址


具体的代码如下:

<!-- 注册页面 -->
<template>
<view class="bottom-side-otherLogin" @click="getWeChatCode" v-if="isWeixin">
<text>微信一键登录</text>

</view>
</template>
<script>
export default {
data() {
return {
isWeixin: false,
};
},
onLoad() {
this.isWeixin = this.isWechat()
if(this.isWeixin){
this.checkWeChatCode()//通过微信官方接口获取code之后,会重新刷新设置的回调地址【redirect_uri】
}
},
onShow() {
},
mounted() {

},
methods: {
/*微信登录相关 start*/
//方法:用来判断是否是微信内置的浏览器
isWechat() {
return String(navigator.userAgent.toLowerCase().match(/MicroMessenger/i)) === "micromessenger";
},
//方法:用来提取code
getUrlCode(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [, ''])[1]
.replace(/\+/g, '%20')) || null
},
//检查浏览器地址栏中微信接口返回的code
checkWeChatCode() {
let code = this.getUrlCode('code')
uni.showToast({
title:`微信code=${code}`
})
if (code) {

this.getOpenidAndUserinfo(code)
}
},
//请求微信接口,用来获取code
getWeChatCode() {
let local = encodeURIComponent(window.location.href); //获取当前页面地址作为回调地址
let appid = '自己的appid'

//通过微信官方接口获取code之后,会重新刷新设置的回调地址【redirect_uri】
window.location.href =
"https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
appid +
"&redirect_uri=" +
local +
"&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
},
//把code传递给后台接口,静默登录
getOpenidAndUserinfo(code) {
this.$http({
url:'后端地址url',
data:{
code:code
}
}).then((res) => {
console.log(res)
if (res.code != 0) {
uni.showToast({
title: res.msg,
duration: 3000,
icon: 'none'
});
return
}else{
this.afterLogin(res)
}
})
},
/*微信登录相关 end*/
afterLogin(res){
let user = res.data.user
uni.setStorageSync('token', res.data.token);
let u = {
avatar: user.avatar ? user.avatar : this.avatar,
mobile: user.mobile,
nickname: user.nickname ? user.nickname : '匿名'
}
uni.setStorage({
key: 'u',
data: u,
success: () => {

let url = uni.getStorageSync('redirect')
uni.reLaunch({
url: url ? url : '/pages/index'
})
}
});
},
},

}
</script>

后端根据code来获取openid及用户资料,我们以后端php为例

<?php
$appid = "wxa423432423432423423";
$appsecret = "234234345345345345345";
function http_curl($url) {
$curlobj = curl_init();
curl_setopt($curlobj, CURLOPT_URL, $url);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curlobj, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curlobj, CURLOPT_SSL_VERIFYHOST, FALSE);
$output = curl_exec($curlobj);
curl_close($curlobj);
return $output;
}


$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$_GET['code'].'&grant_type=authorization_code';
$result = $this->http_curl($url);
$acessdata = json_decode($result, 1);

if (isset($acessdata['access_token'])) {
$access_token = $acessdata['access_token'];
$openid = $acessdata['openid'];
$url2 = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN';
$result2 = $this->http_curl($url2);
$userinfo = json_decode($result2, 1);
echo json_encode(['err' => false,
"data" => $userinfo]);
} else {
echo json_encode(['err' => false,
"data" => "出错了"]);
}


网友回复

我知道答案,我要回答