微信小程序前台的用户数据入库(后台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 数据便可以正常入库!!

(此图片来源于网络,如有侵权,请联系删除! )

免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。

【小程序源码网资源版权风险说明】:
本站为避免不必要的纷争,分享的所有资源中一切可能有版权风险的资源将全部转载自第三方网站或平台,站长只为大家提供相关资源的介绍和跳转引导。 因可能有疏忽大意,所以如有遗漏资源侵犯了您的合法权利,请联系站长删除。
【小程序源码网资源下载使用说明】:
本站所分享的一切QQ小程序源码,thinkphp整站源码,微信小程序源码,图文教程等资源仅供用户学习参考使用,任何人不得作其他用途,违者自行承担所有责任。
【小程序源码网毫无人看的介绍】:
本站又称Z站,原名贼娘网,开站于2018年,换过三任站长,目前站长是第四任站长,本站是一个主要分享免费开源小程序源码/网站源码/免费素材/教程资源的网站,主要小程序资源有用于学习的小程序源码,也有正版原创可商用的小程序源码,是一个公益博客型网站。
【小程序源码网原创源码版权申明】:
未经小程序源码网许可,任何人不得擅自使用本站原创首发源码进行商业行为(除本站VIP用户在期限内,版权无使用限制),否则将依法承担相应赔偿责任。
【小程序源码网转载文章版权申明】:
本站所转载的QQ小程序或微信小程序源码与其他资源仅供学习,任何人不得作其他用途,违者自行承担所有责任。
【小程序源码网站长最后的屁话】:
如有您认为本站有任何侵犯您合法权益的文章,或者您有什么疑问需求,欢迎联系站长QQ,站长24小时在线,备注公司名称和源码版权问题或者需要小程序定制开发等站长业务类型可急速处理,如果您只是交流小程序的一些开发问题或源码问题可以加入QQ群讨论,就不用加站长啦,对于白嫖党,QQ群才是处理问题的天堂,当然站长也欢迎大家骚扰~
小程序源码网 » 微信小程序前台的用户数据入库(后台Laravel)
嘿,投喂下嘛!