
正文
laravel7 微信小程序获取openid
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
l 通过微信公众号获取appid和appsecret
l 在小程序页面中编写代码获取code
l 在后端编写方法,换取openid
l 添加一个按钮,给按钮一个开放能力 open-type="getUserInfo"
l 在小程序逻辑文件中 实现在对应的事件方法 bind:getuserinfo 中通过event对象获取用户的信息。
l 发送信息给服务器,获取结果后进行数据入库
l 编写接收接口,以openid标识来查询,进行用户信息修改后入库
1:微信页面增加触摸事件
<view>
<l-button type="success" bindtap="login" open-type="getUserInfo" >授权登录</l-button>
</view>
{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:控制器代码:
<?phpnamespace 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:模型添加代码:
<?phpnamespace 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;








