微信小程序前台的用户数据入库(后台Laravel)

首先 我们可以看到微信小程序官方 文档 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

原文地址:https://www.cnblogs.com/yzloo/p/10802226.html

时间: 2024-10-29 04:20:29

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

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

原文地址:http://www.wxapp-union.com/portal.php?mod=view&aid=359 本文由本站halfyawn原创:感谢原创者:如有疑问,请在评论内回复 还是先把问题列出来,让问题来驱动探索: 微信小程序开发工具的数据,配置,日志等目录在哪儿? 怎么找? 首先分析了一下源码,日志目录应该同NW.JS的应用目录相关,,,查查查,,一直查到NW.JS的C++源码,搞得太复杂,大概知道位置,但还是不确切.决定不往这条线找,换另一条路: 把日志文件修改输出到我指定目录

微信小程序实现获取用户信息并存入数据库操作示例

微信小程序获取用户信息简单,但是在存入自己服务器数据库的过程中研究了一天多的时间,并且网上搜索不到该资源,故发出来供大家参考. index.js ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 Page({  data: {   nickNam

微信小程序 WXS实现json数据需要做过滤转义(filter)

前言 最近有在做小程序开发,在开发的过程中碰到一点小问题,描述一下先. 本人在职的公司对于后台获取的 json 数据需要做过滤转义的很多,不同的状态码会对应不同的文字,但是在微信小程序中又没有类似 vue 中的 | 方法进行快速的过滤,大都是用数据遍历洗数据来实现的,说实话,很麻烦,即使提取了公共方法那也麻烦,总之要洗数据就麻烦 WXS 为何物 在上代码之前先简单的介绍一下 WXS 是什么,以及和 javascript 有什么区别,虽然官方文档中都有,但我认为博客的存在意义就是尽量减少看官们的页

python获取微信小程序openid及用户信息

填坑记录:1.个人微信公众订阅号是不能申请微信认证的.公众号的类型在注册时一旦选择就不能更改,微信公众号认证的功能除个人订阅号外,都可以申请认证,因而个人订阅号不能申请认证.这句话的意思就是个人订阅号无法开发小程序. 2.个体户营业执照(个体户)可申请微信服务号并申请开发小程序,但需微信认证复用资质并用新邮箱注册小程序账号 3.微信开发工具创建微信小程序填写的appid是小程序的appid(不是微信公众号的),不能是个人小程序的appid,个人小程序没有获取用户信息的权限 4.调用接口获取用户信

微信小程序用AES加密和java后台对接

哇,我真的厉害,又对接成功了. 在原博客https://www.cnblogs.com/fuckingPangzi/p/10281990.html,继续完成的. 在前台js加密的时候,是有一个vi(偏移量)和AES的密钥差不多是16位的. 然后你在后台解密的时候,需要在设置vi时候,弄一下getBytes("UTF-8")就ok了.如图 刚把AES和RSA的微信小程序加密整理到一个项目里面去了. 原文地址:https://www.cnblogs.com/fuckingPangzi/p/

微信小程序——动态修改页面数据及参数传递

动态修改页面数据 在小程序中我们经常要动态渲染数据,对于新手而言我们常常遇到修改的数据在控制台显示和页面显示不一致,因为我们用“=”修改数据的,这种是可以修改,但无法改变页面的状态的,还会造成数据不一致,代码如下: data: { array: [{ text: '数组' }] } onLoad:function(){ this.data.array[0].text=1; console.log(this.data.array[0].text); } 修改代码: onLoad:function(

微信小程序之登录用户不是该小程序的开发者

当uniapp项目转为小程序项目的时候,预览会显示“您不是登录用户...”,所以没有办法发布,这个时候打开“project.config.json”设置一下appid,与你公众号appid一致就可以 原文地址:https://www.cnblogs.com/lynna/p/12048124.html

微信小程序监听用户上滑下滑事件

今天做了一个要根据用户上滑或者下滑来显示不同内容的功能. 思路:先监听用户是上滑还是下滑,监听到结果后改变data数据中用来判断模块显示隐藏的变量,两个需要切换的模块使用两个hidden,data中定义两个变量来接受更改后的true或者false 页面 hidden='{{bottom}}' hidden='{{top}}' data{ //初始化状态 top:true, bottom:false, } //判断浏览器滚动条上下滚动 if (t.scrollTop > a.data.scroll

微信小程序怎么获取用户输入

能够获取用户输入的组件,需要使用组件的属性bindchange将用户的输入内容同步到 AppService. <input id="myInput" bindchange="bindChange" /> <checkbox id="myCheckbox" bindchange="bindChange" /> var inputContent = {} Page({ data: { inputConten