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

 
api-login.jpg

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

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

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

 
iv和encryptedData

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

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

很简单 通过wx.getUserInfo

wx.getUserInfo({
success: function(res) {
var iv= res.iv
var .encryptedData=res.encryptedData
}
})

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

wx.login({
success: function (res) {
console.log(res.code)
if (res.code) {
wx.getUserInfo({
withCredentials: true,
success: function (res_user) {
wx.request({
//后台接口地址
url: '你后台的接口的地址',
data: {
code: res.code, // code 必须给
encryptedData: res_user.encryptedData, //密文串 必须给
iv: res_user.iv //加密初始量 必给
},
method: 'GET',
header: {
'content-type': 'application/json'
},
success: function (res) {
wx.setStorageSync('openId', res.data.openId); //拿到openid 存入session
}
})
}

于是来到后台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模型

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

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

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

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

 
Common结构

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

如下

"autoload": {
"classmap": [
"database",
"app/Common/PHP/"
],

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

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

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Input;
use GuzzleHttp\Client;
use App\Model\Alluser; class apiController extends Controller
{ // 获取微信用户信息
public function getcode(Request $request)
{ $code = $request->get('code');
$encryptedData = $request->get('encryptedData');
$iv = $request->get('iv');
$appid = "你的appid";
$secret = "你的secret"; $client = new \GuzzleHttp\Client();
$res = $client->request('GET', 'https://api.weixin.qq.com/sns/jscode2session', [
'query' => ['appid' =>$appid,
'secret' => $secret,
'js_code' => $code,
'grant_type' => 'authorization_code']
]);
$body = json_decode($res->getBody());
$openid = $body->openid;
$session_key = $body->session_key; $userifo = new \WXBizDataCrypt($appid, $session_key); $errCode = $userifo->decryptData($encryptedData, $iv, $data); $info = json_decode($data);
$nickName = $info->nickName;
$avatarUrl = $info->avatarUrl;
$province = $info->province;
$city = $info->city; $alluser = new Alluser();
if (!$alluser->find($openid))
{
$alluser->openid = $openid;
$alluser->session_key = $session_key;
$alluser->nickName = $nickName;
$alluser->avatarUrl = $avatarUrl;
$alluser->province = $province;
$alluser->city = $city;
$alluser->save();
} if ($errCode == 0) {
return ($data);
} else {
return ($errCode);
} }
}

最后 微信小程序编译 请求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. 转换:使用vue-axios和vue-resource解决vue中调用网易云接口跨域的问题

    本人配置成功https://segmentfault.com/a/1190000011072725

  2. QPixmap和QImage

    1.QPixmap QPixmap的设计本来就是用来加速显示,用paint绘图时用QPixmap会比其他类的效果好很多.一般小图片用QPixmap. 2.QImage 依赖软件,直接像素访问,适合大图 ...

  3. PyQt5【入门-窗口】

    一.窗口 #设置窗口标题 setWindowTitle("标题") #设置窗口坐标和大小 setGeometry(0,0,800,600) """ 项 ...

  4. Api跨域设置

    跨域设置:(服务端) webconfig文件中,system.webServer节点下添加 <!--跨域请求:三个配置信息--> <httpProtocol> <cust ...

  5. P3768 简单的数学题 [杜教筛,莫比乌斯反演]

    \[\sum_{i=1}^{n}\sum_{j=1}^{n} ij\gcd(i,j)\] \[=\sum_{d=1}^{n} d \sum_{i=1}^{n}\sum_{j=1}^{n} ij[\gc ...

  6. 调用手机摄像头并上传图片--jquery ajax

    1.图片框样式与进度条样式 .alert_img_content { width: 44%; float: left; margin: 3%; border: 1px solid #ddd; back ...

  7. 深入理解Java内存模型中的虚拟机栈

    深入理解Java内存模型中的虚拟机栈 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域都会有各自的用途,以及创建和销毁的时间,有的区域会随着虚拟机进程的启 ...

  8. PAT (Basic Level) Practice (中文)1076 Wifi密码 (15 分)

    下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1:B-2:C-3:D-4:请同学们自己作答,每两日一 ...

  9. Android 基础知识 -- BroadcastReceiver

    BroadcastReceiver 广播,是一种事件传递机制,可以跨应用进行事件传递(系统级). 在使用广播的时候,不宜添加过多的逻辑或者耗时(广播内不允许开辟线程)操作,超过10秒,导致ANR 1 ...

  10. 126.自动处理上传的文件,获取上传文件的url

    使用模型来处理上传的文件: 在定义模型的时候,我们可以给存储的文件的字段指定为FileField,这个field可以传递一个upload_to参数,用来指定上传上来的文件保存到哪里,比如我们让它保存到 ...