使用codeigniter写小程序 一 搭建微信登录框架

微信登录集成实践
本文介绍了一个基于CodeIgniter框架的小程序微信登录实现方案,详细解释了如何利用第三方库简化登录流程,并通过实例展示了如何处理登录数据及用户信息。

使用library 中的 微信登录 校验工具 (工具源码作者 小黑黑 ) 原本的脚手架是基于tp的小程序登录,把他稍微改进了用到CI中。 官方手册写的流程太复杂了,建议精简下,我看了一天的文档,其实东西不算很难,只是简单的东西复杂化了。 微信登录的流程大概是 小程序->业务服务器->传递最后的session3rd到微信服务器 同时把 session3rd json给 小程序,保存在客户端就可以。 用户进入小程序的时候,先 post session3rd给 业务服务器,查询缓存中是否还存在,存在就返回session3rd的内容,否则重新登录。

必要设置:CI memcached 参考 memcached配置

假设,你的网址是 https://www.abc.com/api 首先,把wafer目录放入 api中 其次,把wafer-session-server-master 目录放到 api目录中 注意,是整个目录放进去

linux主机的话,需要 在 系统/etc/新建 qcloud目录。 新建个文本文件粘贴如下代码:

{ "serverHost": "www.xx.com", "authServerUrl": "http://www.xx.com/itjaye/wafer-session-server/", "tunnelServerUrl": "https://ws.qcloud.com", "tunnelSignatureKey": "xxxxxx", "networkTimeout": 30000 } serverHost 你的业务服务器的域名,上面部署wafer SDK代码 authServerUrl 会话服务地址,登陆授权会用到。上面部署会话服务的代码 tunnelServerUrl 这个是信道服务器地址,不需要部署,直接使用腾讯提供的信道服务器地址https://ws.qcloud.com tunnelSignatureKey 修改成自己的签名秘钥,随便自己定义一个就行 将文件保存为sdk.config并上传到/etc/qcloud/sdk.config (需要在/etc/下面自己创建下qcloud这个目录)

具体请参考:自行部署小程序开发套件

进入CI wafer目录中,composer install,安装依赖文件。 使用框架: 微信官方demo wafer library库 源码作者小小黑 需要删除命名空间, WXLoginHelper 文件里面需要导入 require_once 其他的文件进来。

微信登录例子

		Class UserLogin extends CI_Controller
		{
			function __construct()
			{
				parent::__construct();
				  $this->load->library(array('WXLoginHelper'));
				  $this->load->model('General');
				  $this->load->driver('cache');

			}

			function login()
			{
				 	/* code, rawData, signature, encryptData iv */
				 	$postData = $this->input->post(array('code','rawData','signature','encryptedData','iv'));
				 	$code = $postData['code'];
				 	$rawData = $postData['rawData'];
				 	$signature = $postData['signature'];
				 	$encryptedData = $postData['encryptedData'];
				 	$iv = $postData['iv'];
				 	$test = new WXLoginHelper;
				 	$data = $test->checkLogin($code,$rawData,$signature,$encryptedData,$iv);
				 	$session = $this->cache->memcached->save($data['session3rd'], $data['openId'] . $data['sessionKey']);
				 	//检查user表是否存在改用户,如果存在,则则返回session,如果不存在,写入表再发回session
				 	$find = $this->General->query('user',array('openid'=>$data['openId']));
				 	$find = $find ==null ? 0:$find[0];
				 	if($find == 0)
				 	{
				 		$user_id = $this->General->insert('user',array('openId'=>$data['openId'],'nickName'=>$data['nickName'],
				 								'gender'=>$data['gender'],'city'=>$data['city'],'language'=>$data['language'],'province'=>$data['province'],'country'=>$data['country'],'avatarUrl'=>$data['avatarUrl']));

				 	} else{

				 		$user_id = $find['id'];

				 	}

				 	if(isset($find['avatarUrl'] && $find['avatarUrl'] !== $data['avatarUrl'])
				 		{
				 			$this->General->update('user',array('id'=>$user_id),array('avatarUrl'=>$data['avatarUrl'])); //如果头像更改,则更新头像
				 		}

        			echo json_encode(array('status'=>0,'session3rd'=>$data['session3rd'],'user_id'=>$user_id));

				 	
				 	
				 
			}

			function checkLogin()
			{ //如果客户端存在 session3rd,则post 到此接口,获取对应数据
				$session3rd = $this->input->post('session3rd');
				$data = $this->cache->memcached->get($session3rd);
				echo json_encode(array('status'=>0,'session3rd'=>$data));

			}

			
		}

|字段|类型|空|默认|注释| |:---- |:------- |:--- |-- -|------ | |uid |int(10) |否 | | | |openId |varchar(20) |否 | | openid | |nickName |varchar(50) |否 | | 密码 | |gender |int(50) |否 | | 性别 | |language |varchar(50) |否 | | 密码 | |city |varchar(50) |否 | | 城市 | |province |varchar(50) |否 | | 省份 | |country |varchar(50) |否 | | 国家 | |avataUrl |varchar(50) |否 | | 头像 | |reg_time |int(11) |否 | 0 | 注册时间 |

转载于:https://my.oschina.net/kopa/blog/880102

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值