首先 我们可以看到微信小程序官方 文档 wx.login

 
api-login.jpg

通过此图 我们知道 前台要传 一个 code给后台,后台拿到code 并结合appid和appsecret请求微信接口服务,拿到openid和session_key

查阅文档 我们可以清楚知道

后台要获得用户数据 就需要前台除了传code 还需要传 ivencryptedData

 
iv和encryptedData

后台拿到这两个 并结合拿code去请求得到的session_key便可以解密获得用户数据 包括头像 昵称 城市 等

那么这个iv和encryptedData前台怎么获得呢

很简单 通过wx.getUserInfo

  1. wx.getUserInfo({
  2. success: function(res) {
  3. var iv= res.iv
  4. var .encryptedData=res.encryptedData
  5. }
  6. })

然后通过request 将code iv 和encryptedData 给post后台过去

  1. wx.login({
  2. success: function (res) {
  3. console.log(res.code)
  4. if (res.code) {
  5. wx.getUserInfo({
  6. withCredentials: true,
  7. success: function (res_user) {
  8. wx.request({
  9. //后台接口地址
  10. url: '你后台的接口的地址',
  11. data: {
  12. code: res.code, // code 必须给
  13. encryptedData: res_user.encryptedData, //密文串 必须给
  14. iv: res_user.iv //加密初始量 必给
  15. },
  16. method: 'GET',
  17. header: {
  18. 'content-type': 'application/json'
  19. },
  20. success: function (res) {
  21. wx.setStorageSync('openId', res.data.openId); //拿到openid 存入session
  22. }
  23. })
  24. }

于是来到后台Laravel 5.4部分

首先我们定义接口 (我第一次是再web.php定义路由 会受到要求post传token的限制,于是可以考虑写在api.php里面)

之后转到控制器
这之前先安装 guzzlehttp/guzzle 包用于向微信接口服务发送请求
安装方式直接 composer require guzzlehttp/guzzle

如何使用也很简单 不需要设置什么 直接再控制器 use GuzzleHttp\Client;

之后建立 一个allusers表 放用户 openid nickName 等

然后通过 php artisan make:model Allusers 建立一个Eloquent ORM模型

并在模型中定义表名和主键

  1. class Alluser extends Model
  2. {
  3. protected $table = 'allusers';
  4. //public $timestamps = false; //这个是看你是否要向表中传建立时间和更新数据时间
  5. protected $primaryKey='openid';
  6. }

然后
我们下载微信官方的PHP版解密文档 ,并将其引入可再控制器使用

解压拿到一个PHP文件 在app下建立Common放入PHP文件

 
Common结构

然后来到composer.json下 的 "autoload" 的"classmap": 里面加入 "app/Common/PHP/"

如下

  1. "autoload": {
  2. "classmap": [
  3. "database",
  4. "app/Common/PHP/"
  5. ],

然后在目录下执行 composer dumpautoload 便可以

最后我们便可以在我们的控制器下书写拿到openid和session_key的代码和加解密以及数据入库

  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\Http\Controllers\Controller;
  5. use Illuminate\Support\Facades\Input;
  6. use GuzzleHttp\Client;
  7. use App\Model\Alluser;
  8. class apiController extends Controller
  9. {
  10. // 获取微信用户信息
  11. public function getcode(Request $request)
  12. {
  13. $code = $request->get('code');
  14. $encryptedData = $request->get('encryptedData');
  15. $iv = $request->get('iv');
  16. $appid = "你的appid";
  17. $secret = "你的secret";
  18. $client = new \GuzzleHttp\Client();
  19. $res = $client->request('GET', 'https://api.weixin.qq.com/sns/jscode2session', [
  20. 'query' => ['appid' =>$appid,
  21. 'secret' => $secret,
  22. 'js_code' => $code,
  23. 'grant_type' => 'authorization_code']
  24. ]);
  25. $body = json_decode($res->getBody());
  26. $openid = $body->openid;
  27. $session_key = $body->session_key;
  28. $userifo = new \WXBizDataCrypt($appid, $session_key);
  29. $errCode = $userifo->decryptData($encryptedData, $iv, $data);
  30. $info = json_decode($data);
  31. $nickName = $info->nickName;
  32. $avatarUrl = $info->avatarUrl;
  33. $province = $info->province;
  34. $city = $info->city;
  35. $alluser = new Alluser();
  36. if (!$alluser->find($openid))
  37. {
  38. $alluser->openid = $openid;
  39. $alluser->session_key = $session_key;
  40. $alluser->nickName = $nickName;
  41. $alluser->avatarUrl = $avatarUrl;
  42. $alluser->province = $province;
  43. $alluser->city = $city;
  44. $alluser->save();
  45. }
  46. if ($errCode == 0) {
  47. return ($data);
  48. } else {
  49. return ($errCode);
  50. }
  51. }
  52. }

最后 微信小程序编译 请求200 数据便可以正常入库!!

 
入库.png

微信小程序前台的用户数据入库(后台Laravel)的更多相关文章

  1. 微信小程序POST请求参数传递不到后台, 前台获取不到后端返回的数据, 以及 post 请求返回 404 但后台能收到数据

    1 微信小程序POST请求参数传递不到后台 需要在微信请求 wx.request 改变默认 header 配置为如下 wx.request({ url: 'test.php', //仅为示例,并非真实 ...

  2. 在微信小程序页面间传递数据总结

    在微信小程序页面间传递数据 原文链接:https://www.jianshu.com/p/dae1bac5fc75 在开发微信小程序过程之中,遇到这么一些需要在微信小程序页面之间进行数据的传递的情况, ...

  3. nodejs+koa+uniapp实现微信小程序登陆获取用户手机号及openId

    nodejs+koa+uniapp实现微信小程序登陆获取用户手机号及openId 前言: 我准备用nodejs+koa+uniapp实现一款餐饮点单小程序,以及nodejs+koa+vue实现后端管理 ...

  4. 微信小程序开发工具的数据,配置,日志等目录在哪儿? 怎么找?

    原文地址:http://www.wxapp-union.com/portal.php?mod=view&aid=359 本文由本站halfyawn原创:感谢原创者:如有疑问,请在评论内回复   ...

  5. 【微信小程序】获取用户地理位置权限,二次请求授权,逆解析获取地址

    摘要:微信小程序内获取用户地理位置信息授权,被拒绝后二次获取,获取权限后逆解析得到用户所在省市区等.. 场景:商城类小程序,在首页时需展示附近门店,即用户刚进入小程序时就需要获取到用户位置信息 ste ...

  6. 微信小程序授权 获取用户的openid和session_key【后端使用java语言编写】,我写的是get方式,目的是测试能否获取到微信服务器中的数据,后期我会写上post请求方式。

    在这里给大家分享下我的心得,1.写代码前一定要对整个流程有个了解.我就是因为在先不了解整个过程中去ctrl+c+v他人的博客代码,花费很多无用的时间去处理还不知道能不能跑的起来的代码. 2.本人比较喜 ...

  7. 微信小程序 服务器端生成用户登陆环节的 3rd_session

    一.环境: CentOS 6.8 nginx 1.8.0 php 7.0.10 二.背景 最近在开发一个微信小程序,不可避免的涉及到登陆的环节,登录时序图如下: 通过 wx.login() 获取到用户 ...

  8. 微信小程序授权获取用户详细信息openid

    小程序获取用户的头像昵称openid之类 第一种使用wx.getUserInfo直接获取微信头像,昵称 wx.getUserInfo({ success: function (res) { that. ...

  9. 微信小程序之获取用户位置权限(拒绝后提醒)

    微信小程序获取用户当前位置有三个方式: 1. wx.getLocation(多与wx.openLocation一起用) 获取当前的精度.纬度.速度.不需要授权.当type设置为gcj02 返回可用于w ...

随机推荐

  1. pip 配置国内源

      网上已经有很多人介绍了,我写在这儿就是为了找起来方便. https://www.cnblogs.com/schut/p/10410087.html 这篇博客还是很有意思的,他介绍了两种方法.可以一 ...

  2. Markdown 的效果

    这是一级标题 这是二级标题 这是三级标题 这是四级标题 这是五级标题 这是六级标题 这是加粗的文字 这是倾斜的文字 这是斜体加粗的文字 这是加删除线的文字 这是引用的内容 这是引用的内容 这是引用的内 ...

  3. Q&A in 2018 - Q1

    Those questions Simply write down questions that ever frustrated me a little: How to convert unix ti ...

  4. javascript 权威指南1

    JavaScript是面向web的编程语言 web(World Wide Web)即全球广域网,也称为万维网,它是一种基于超文本和HTTP的.全球性的.动态交互的.跨平台的分布式图形信息系统.是建立在 ...

  5. Python论做游戏外挂,Python输过谁?

    玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢? 我打开了4399小游戏网,点开了一个不知名的游戏,唔,做寿司的,有材料在一边,客人过来后说出他们的要求,你按照菜 ...

  6. Java定时任务之Timer

    Timer是Java中实现定时任务的方式之一,下面是一个简单的例子: import java.util.Timer; import java.util.TimerTask; public class ...

  7. MySQL进阶之索引

    一.索引的本质: 数据库查询是数据库的最主要的功能之一,数据库系统的设计者从查询算法的角度对数据库进行了一定的优化. 最基本的顺序查找算法的复杂度为O(n),在数据量很大的时候算法的效率是很低的.虽然 ...

  8. mysql 视图 触发器 存储过程 函数事务 索引

    mysql 视图 触发器 存储过程 函数事务 索引 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当 ...

  9. php 对象、json 、XML、数组互转

    对象转json $json=json_encode($postObj,JSON_FORCE_OBJECT); json转对象 $obj=json_encode($json); json转数组 $arr ...

  10. 885-螺旋矩阵 - III

    885-螺旋矩阵 - III 在 R 行 C 列的矩阵上,我们从 (r0, c0) 面朝东面开始 这里,网格的西北角位于第一行第一列,网格的东南角位于最后一行最后一列. 现在,我们以顺时针按螺旋状行走 ...