uniapp实现公众号微信登录

前端代码

javascript 复制代码
data() {
	return {
		openid: "",
		server: '',
		code:''
	};
},
mounted() {
	this.getCode()
},
methods:{
	getCode() {
		// 非静默授权,第一次有弹框
		this.code = '';
		var callback_url = '回调地址'; // 获取页面url
		var appid = 'APPID';
		this.code = this.getUrlCode().code; // 截取code
		if (this.code == null || this.code === '') {
			// 如果没有code,则去请求
			window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${encodeURIComponent(
	            callback_url
	        )}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`;
		} else {
			// 当code不等于空时,调用后端接口获取用户信息
			this.getUserInfo();
			// 你自己的业务逻辑
		}
	},
	getUserInfo() {
		let token = uni.getStorageSync("token");
		const header = {
			"Content-Type": "application/json",
			"Authorization": token
		};
		let data = {}
		data.code = this.code
		data.appid= '你的appid'
		data.secret= '你的secret'
		uni.request({
			url: 'https://api.ecom20200909.com/Api/getOpenid',
			data: data,
			header: header,
			timeout: 20000,
			method: 'POST',
			dataType: 'json',
			success: (res) => {
				this.setOpenid(res.data.openid);
				uni.setStorageSync('openid', res.data.openid)
			}
		})
	},
	getUrlCode() {
		// 截取url中的code方法
		var url = location.search;
		var theRequest = new Object();
		if (url.indexOf('?') != -1) {
			var str = url.substr(1);
			var strs = str.split('&');
			for (var i = 0; i < strs.length; i++) {
				theRequest[strs[i].split('=')[0]] = strs[i].split('=')[1];
			}
		}
		return theRequest;
	},
}

后端php代码

php 复制代码
public function getOpenid(){
    $code = input('post.code');
    $param["appid"]=input('post.appid');
    $param["secret"]=input('post.secret');
    $param["code"]=$code;
    $param["grant_type"]="authorization_code";
    $json = $this->curlPost("https://api.weixin.qq.com/sns/oauth2/access_token",$param);
    $rv=json_decode($json,true);
    return json($rv);
}

public function curlPost($url = '', $postData = '', $options = array()) {
  if (is_array($postData)) {
      $postData = http_build_query($postData);
  }
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
  curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置cURL允许执行的最长秒数
  if (!empty($options)) {
      curl_setopt_array($ch, $options);
  }
  //https请求 不验证证书和host
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  $data = curl_exec($ch);
  curl_close($ch);

  return $data;
}
相关推荐
天蓝色的鱼鱼1 天前
从“死了么”到“我在”:用uniCloud开发一款温暖人心的App
前端·uni-app
小徐_23331 天前
uni-app 组件库 Wot UI 的 AI 友好型编程指南
前端·uni-app
CHB2 天前
uni-app x 蒸汽模式 性能测试基准报告 Benchmark
uni-app·harmonyos
anyup2 天前
月销 8000+,uView Pro 让 uni-app 跨端开发提速 10 倍
前端·uni-app·开源
willow5 天前
uniapp实战
uni-app
只会cv的前端攻城狮5 天前
兼容性地狱-Uniapp钉钉小程序环境隔离踩坑实录
前端·uni-app
子玖6 天前
微信扫码注册登录-基于网站应用
后端·微信·go
子玖7 天前
实现微信扫码注册登录-基于参数二维码
后端·微信·go
codingWhat7 天前
小程序里「嵌」H5:一套完整可落地的 WebView 集成方案
前端·uni-app·webview
小时前端8 天前
微信小程序选不了本地文件?用 web-view + H5 一招搞定
前端·微信小程序·uni-app