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;
}
相关推荐
2501_9151063211 分钟前
用 HBuilder 上架 iOS 应用时如何管理Bundle ID、证书与描述文件
android·ios·小程序·https·uni-app·iphone·webview
2501_9159090620 分钟前
资源文件混淆在 iOS 应用安全中的实际价值
android·安全·ios·小程序·uni-app·iphone·webview
2501_9159184120 分钟前
iOS App 性能测试中常被忽略的运行期问题
android·ios·小程序·https·uni-app·iphone·webview
毕设源码-邱学长23 分钟前
【开题答辩全过程】以 基于uni-app的装修现场管理小程序设计与实现为例,包含答辩的问题和答案
uni-app
郑州光合科技余经理2 小时前
PHP构建:支撑欧美澳市场的同城生活服务平台开发
java·开发语言·数据库·uni-app·php·排序算法·生活
个微管理17 小时前
告别多手机切换烦恼,无需下载安装软件的CRM管理系统
微信·智能手机·自动化·微信开放平台
陈思杰系统思考Jason17 小时前
系统思考与科学决策
百度·微信·微信公众平台·新浪微博·微信开放平台
2501_9151063220 小时前
HTTP 协议详解,HTTP 协议在真实运行环境中的表现差异
网络·网络协议·http·ios·小程序·uni-app·iphone
咸虾米_1 天前
开发uniapp前端通用价格组件提交到DCloud插件市场
uni-app·商城·开发插件·dcloud插件市场·扩展组件
郑州光合科技余经理1 天前
实战分享:如何构建东南亚高并发跑腿配送系统
java·开发语言·javascript·spring cloud·uni-app·c#·php