微信小程序前台的用户数据入库(后台Laravel)
首先 我们可以看到微信小程序官方 文档 wx.login

通过此图 我们知道 前台要传 一个 code给后台,后台拿到code 并结合appid和appsecret请求微信接口服务,拿到openid和session_key
查阅文档 我们可以清楚知道
后台要获得用户数据 就需要前台除了传code 还需要传 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文件

然后来到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 数据便可以正常入库!!

微信小程序前台的用户数据入库(后台Laravel)的更多相关文章
- 微信小程序POST请求参数传递不到后台, 前台获取不到后端返回的数据, 以及 post 请求返回 404 但后台能收到数据
1 微信小程序POST请求参数传递不到后台 需要在微信请求 wx.request 改变默认 header 配置为如下 wx.request({ url: 'test.php', //仅为示例,并非真实 ...
- 在微信小程序页面间传递数据总结
在微信小程序页面间传递数据 原文链接:https://www.jianshu.com/p/dae1bac5fc75 在开发微信小程序过程之中,遇到这么一些需要在微信小程序页面之间进行数据的传递的情况, ...
- nodejs+koa+uniapp实现微信小程序登陆获取用户手机号及openId
nodejs+koa+uniapp实现微信小程序登陆获取用户手机号及openId 前言: 我准备用nodejs+koa+uniapp实现一款餐饮点单小程序,以及nodejs+koa+vue实现后端管理 ...
- 微信小程序开发工具的数据,配置,日志等目录在哪儿? 怎么找?
原文地址:http://www.wxapp-union.com/portal.php?mod=view&aid=359 本文由本站halfyawn原创:感谢原创者:如有疑问,请在评论内回复 ...
- 【微信小程序】获取用户地理位置权限,二次请求授权,逆解析获取地址
摘要:微信小程序内获取用户地理位置信息授权,被拒绝后二次获取,获取权限后逆解析得到用户所在省市区等.. 场景:商城类小程序,在首页时需展示附近门店,即用户刚进入小程序时就需要获取到用户位置信息 ste ...
- 微信小程序授权 获取用户的openid和session_key【后端使用java语言编写】,我写的是get方式,目的是测试能否获取到微信服务器中的数据,后期我会写上post请求方式。
在这里给大家分享下我的心得,1.写代码前一定要对整个流程有个了解.我就是因为在先不了解整个过程中去ctrl+c+v他人的博客代码,花费很多无用的时间去处理还不知道能不能跑的起来的代码. 2.本人比较喜 ...
- 微信小程序 服务器端生成用户登陆环节的 3rd_session
一.环境: CentOS 6.8 nginx 1.8.0 php 7.0.10 二.背景 最近在开发一个微信小程序,不可避免的涉及到登陆的环节,登录时序图如下: 通过 wx.login() 获取到用户 ...
- 微信小程序授权获取用户详细信息openid
小程序获取用户的头像昵称openid之类 第一种使用wx.getUserInfo直接获取微信头像,昵称 wx.getUserInfo({ success: function (res) { that. ...
- 微信小程序之获取用户位置权限(拒绝后提醒)
微信小程序获取用户当前位置有三个方式: 1. wx.getLocation(多与wx.openLocation一起用) 获取当前的精度.纬度.速度.不需要授权.当type设置为gcj02 返回可用于w ...
随机推荐
- 【Android】LitePal的基础
一.环境配置 LitePal 在GitHub地址为:https://github.com/LitePalFramework/LitePal 我们使用起来也很方便,直接在gradle中配置即可. 如果你 ...
- vscode侧边栏字体大小修改
1.找到安装路径下,workbench.desktop.main.css 文件 C:\z_my_install\Microsoft VS Code\resources\app\out\vs\workb ...
- mac本地安装全局包报错npm WARN checkPermissions
安装本地全局包时,本地报错 npm WARN checkPermissions Missing write access to /Users/xxx/.nvm/versions/node/v11.10 ...
- pads无模命令
W<n>………改变线宽,比如 30. 栅格(Grids) G<xx>………过孔和设计栅格设置.GD<xx>………显示栅格设置.GP………打开或关闭极性栅格.GP r ...
- 用sort实现对struct的排序
用sort 排序 struct +++ //method 1 struct node{ int k,s; }p[5005]; bool cmp1(node x,node y){ return x.s& ...
- python 3.6 安装 opencv 3.4
一种说法是,到opencv官网下载相应的版本opencv,解压,把cv2.pyd放到 python安装文件夹下的\Lib\site-packages里即可, 此时import cv2即可成功 我的没有 ...
- spring boot的一个小项目小型进销存系统
项目所需的依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...
- P4075 [SDOI2016]模式字符串
总结 P4075 [SDOI2016]模式字符串 题目描述 给出n个结点的树结构T,其中每一个结点上有一个字符,这里我们所说的字符只考虑大写字母A到Z,再给出长度为m的模式串s,其中每一位仍然是A到z ...
- P2048 [NOI2010]超级钢琴 [堆+st表]
考虑只能取长度为 [L,R] 的,然后不难想到用堆搞. 搞个前缀和的st表,里面维护的是一个 最大值的位置 struct rmq { int mx[N][20] ; void qwq(int n) { ...
- 0009 基于DRF框架开发(02 创建模型)
上一节介绍了DRF开发的基本流程,共五个步骤: 1 创建模型 2 创建序列化器 3 编写视图 4 配置URL 5 运行测试 本节主要讲解创建模型. 构建学校,教师,学生三个模型,这三个模型之间的关系是 ...