laravel7 微信小程序获取openid


通过微信公众号获取appid和appsecret

在小程序页面中编写代码获取code

在后端编写方法,换取openid

l 添加一个按钮,给按钮一个开放能力 open-type="getUserInfo"

l 在小程序逻辑文件中 实现在对应的事件方法  bind:getuserinfo 中通过event对象获取用户的信息。

l 发送信息给服务器,获取结果后进行数据入库

l 编写接收接口,以openid标识来查询,进行用户信息修改后入库

1:微信页面增加触摸事件


    "success"  bindtap="login" open-type="getUserInfo"  >授权登录

{1}:json

{
  "usingComponents": {

    "l-button":"/miniprogram_npm/lin-ui/button"
  }
}

2:微信js

    // pages/my/my.js
    Page({

        /**
         * 页面的初始数据
         */
        data: {

        },
        // 触发点击事件
        login(e){
          // 获取用户信息
        wx.getUserProfile({
        desc: 'desc',
         success:res=>{
        if(res.userInfo){
          // 昵称
          let nickName=res.userInfo.nickName
          // 头像
          let avatarUrl=res.userInfo.avatarUrl
          获取code码  // 
          wx.login({
              success:res=>{
          wx.request({
            // 请求的网址
            url: 'http://www.laravel7.com/openid', //仅为示例,并非真实的接口地址
            // 方式
            method:'post',
            // 发送的数据
            data: {
            code:res.code,
            nickName:nickName,
            avatarUrl:avatarUrl
            },
            header: {
              'content-type': 'application/json' // 默认值
            },
            // 结果
            success (res) {
             console.log(res.data.meg);
            }
          })
          
      
          }
          })
      
        }

      }
    })   
          }

    })   
3:laravel7路由也就是小程序请求的网址
//openid 获取
Route::post('openid', 'admin\XcxLoginController@sendCode');

4:控制器代码:

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Wxuser;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class XcxLoginController extends Controller
{
    //
    public function sendCode(Request $request){

        $params=$request->post();
//        获取appid
        $appid = "wx64832aa6eaea82b0";
        // 从微信公众平台获得secret
        $secret = "95e2acaf355dbcb443f5cd4748a152ed";
        // 发送请求换取openid和sessionkey
        $url = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=".$params['code']."&grant_type=authorization_code";
        // 暂使用file_get_contents()发送请求,你可以使用CURL扩展的形式实现,获取opid和session_key
        $res = json_decode(file_get_contents($url),true);
//        给$params追加openid
        $params['openid']=$res['openid'];
        //  给$params追加session_key
        $params['session_key']=$res['session_key'];
//        查看数据库里是否有openid,有就修改,没有就添加
       $res= Wxuser::where('openid',$params['openid'])->first();
//       禁止code码入库
       unset($params['code']);
//        有就修改用户的额openID
       if ($res){
           Wxuser::where('openid',$params['openid'])->update($params);
           return ['code'=>201,'meg'=>'修改成功','data'=>''];
       }else{
//           没有就添加新用户
           $add=Wxuser::add($params);
           return ['code'=>200,'meg'=>'添加成功','data'=>$add];
       }

    }
}

5:模型添加代码:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Wxuser extends Model
{
    //
    protected $table = 'wxuser';
    protected $guarded=[];
//添加
    public static function add($params)
    {
        $obj = new self();
        $obj->avatarUrl = $params['avatarUrl'];
        $obj->nickName = $params['nickName'];
        $obj->openid = $params['openid'];
        $obj->session_key = $params['session_key'];
        return $obj->save();
    }

}

表:

CREATE TABLE `wxuser` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nickName` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
  `openid` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
  `session_key` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
  `avatarUrl` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
  `updated_at` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created_at` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;











相关