PHP后台实现微信小程序登录


Posted in PHP onAugust 03, 2018

微信小程序官方给了十分详细的登陆时序图,当然为了安全着想,应该加上签名加密。

PHP后台实现微信小程序登录

微信小程序端

1).调用wx.login获取 code 。
2).调用wx.getUserInfo获取签名所需的 rawData , signatrue , encryptData 。
3).发起请求将获取的数据发送的后台。

login: function(e) {
  var that = this;
  wx.login({
   success: function(res){
   var code = res.code; //获取code
   wx.getUserInfo({ //得到rawData, signatrue, encryptData
    success: function(data){
    var rawData = data.rawData;
    var signature = data.signature;
    var encryptedData = data.encryptedData; 
    var iv = data.iv;
    wx.request({
     url: '你自己的后台地址',
     data: {
     "code" : code,
     "rawData" : rawData,
     "signature" : signature,
     'iv' : iv,
     'encryptedData': encryptedData
     },
     method: 'GET', 
     success: function(info){
     console.log(info);
     }
    })
    }
   })
   },
  })
 }

服务端

需下载微信官方解密文件。 —— [ 用户数据的签名验证和加解密 ]

1.解压后会出现不同语言的文件包,这里用的是PHP,将文件夹放到vendor目录下。
2.根据登陆凭证 code 获取 session_key 和 openid。
3.数据签名校验。
4.数据解密。
5.生成第三方3rd_session并返回微信小程序端。

/*
  *登录(调用wx.login获取)
  * @param $code string
  * @param $rawData string
  * @param $signatrue string
  * @param $encryptedData string
  * @param $iv string
  * @return $code 成功码
  * @return $session3rd 第三方3rd_session
  * @return $data 用户数据
 */
 public function login()
 {
  //开发者使用登陆凭证 code 获取 session_key 和 openid
  $APPID = '';//自己配置
  $AppSecret = '';//自己配置
  $code = input('code');
  $url = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $APPID . "&secret=" . $AppSecret . "&js_code=" . $code . "&grant_type=authorization_code";
  $arr = $this->vget($url); // 一个使用curl实现的get方法请求
  $arr = json_decode($arr, true);
  $openid = $arr['openid'];
  $session_key = $arr['session_key'];
  // 数据签名校验
  $signature = input('signature');
  $rawData = Request::instance()->post('rawData');
  $signature2 = sha1($rawData . $session_key);
  if ($signature != $signature2) {
   return json(['code' => 500, 'msg' => '数据签名验证失败!']);
  }
  Vendor("PHP.wxBizDataCrypt"); //加载解密文件,在官方有下载
  $encryptedData = input('encryptedData');
  $iv = input('iv');
  $pc = new \WXBizDataCrypt($APPID, $session_key);
  $errCode = $pc->decryptData($encryptedData, $iv, $data); //其中$data包含用户的所有数据
  $data = json_decode($data);
  if ($errCode == 0) {
   dump($data);
   die;//打印解密所得的用户信息
  } else {
   echo $errCode;//打印失败信息
  }
 }

 public function vget($url){
  $info=curl_init();
  curl_setopt($info,CURLOPT_RETURNTRANSFER,true);
  curl_setopt($info,CURLOPT_HEADER,0);
  curl_setopt($info,CURLOPT_NOBODY,0);
  curl_setopt($info,CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($info,CURLOPT_SSL_VERIFYHOST, false);
  curl_setopt($info,CURLOPT_URL,$url);
  $output= curl_exec($info);
  curl_close($info);
  return $output;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
Nov 10 PHP
PHP循环函数使用介绍之PHP基础入门教程
Sep 21 PHP
Codeigniter实现处理用户登录验证后的URL跳转
Jun 12 PHP
php通过分类列表产生分类树数组的方法
Apr 20 PHP
深入理解PHP中的Streams工具
Jul 03 PHP
PHP文件操作实例总结
Sep 27 PHP
php利用gd库为图片添加水印
Nov 09 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
Apr 27 PHP
PHP获取数组中指定的一列实例
Dec 27 PHP
PHP支付宝当面付2.0代码
Dec 21 PHP
Yii框架where查询用法实例分析
Oct 22 PHP
phpStudy vscode 搭建debug调试的教程详解
Jul 28 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
Aug 02 #PHP
PHP实现的AES加密、解密封装类与用法示例
Aug 02 #PHP
lnmp安装多版本PHP共存的方法详解
Aug 02 #PHP
Laravel5框架添加自定义辅助函数的方法
Aug 01 #PHP
PHP实现数组根据某个单元字段排序操作示例
Aug 01 #PHP
PHP实现的分解质因数操作示例
Aug 01 #PHP
Laravel中为什么不使用blpop取队列详析
Aug 01 #PHP
You might like
PHP5常用函数列表(分享)
2013/06/07 PHP
PHP开发框架kohana中处理ajax请求的例子
2014/07/14 PHP
完美利用Yii2微信后台开发的系列总结
2016/07/18 PHP
PHP递归实现快速排序的方法示例
2017/12/18 PHP
基于jquery的跨域调用文件
2010/11/19 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
2015/04/06 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
以JavaScript来实现WordPress中的二级导航菜单的方法
2015/12/14 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
js面向对象的写法
2016/02/19 Javascript
JS中数组重排序方法
2016/11/11 Javascript
JavaScript中数组常见操作技巧
2017/09/01 Javascript
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
React传值 组件传值 之间的关系详解
2019/08/26 Javascript
python 正则式使用心得
2009/05/07 Python
一键搞定python连接mysql驱动有关问题(windows版本)
2016/04/23 Python
Python 转义字符详细介绍
2017/03/21 Python
Python编程之变量赋值操作实例分析
2017/07/24 Python
CentOS7.3编译安装Python3.6.2的方法
2018/01/22 Python
Python高级用法总结
2018/05/26 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
Django上使用数据可视化利器Bokeh解析
2019/07/31 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
泰国健康和美容服务预订网站:GoWabi
2019/06/03 全球购物
高级护理专业毕业生推荐信
2013/12/25 职场文书
安全生产汇报材料
2014/02/17 职场文书
中秋节国旗下演讲稿
2014/09/05 职场文书
师德自我剖析材料范文
2014/10/06 职场文书
招标保密承诺书
2015/01/20 职场文书
材料采购员岗位职责
2015/04/03 职场文书
公司职员入党自传书
2015/06/26 职场文书
如何利用STAR法则制作留学文书?
2019/08/26 职场文书
Python如何识别银行卡卡号?
2021/06/10 Python
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL