<?php

namespace app\wechat\controller;

use think\Controller;
use think\Request;

/**
* 微信授权登录类
* User: summer
* Date: 2017/11/27
* Time: 13:57
*/
class WeChat extends Controller
{

private $appid = '*********'; //微信公众号APPID
private $appsecret = '***************'; //密匙
private $url = '********************'; //微信回调地址

public function start()
{

$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $this->appid . '&redirect_uri=' . urlencode($this->url) . '&response_type=code&scope=snsapi_userinfo&state=state#wechat_redirect';

header('location:' . $url);
}

/**
* 登录
*/
public function login()
{
$code = $_GET['code'];

$access_token = $this->getUserAccessToken($code);
$UserInfo = $this->getUserInfo($access_token);
var_dump($UserInfo);
}

/**
* 获取授权token
* @param $code
* @return bool|string
*/
private function getUserAccessToken($code)
{
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$this->appid&secret=$this->appsecret&code=$code&grant_type=authorization_code";

$res = file_get_contents($url);
return json_decode($res);
}

/**
* 获取用户信息
* @param $accessToken
* @return mixed
*/
private function getUserInfo($accessToken)
{
$url = "https://api.weixin.qq.com/sns/userinfo?access_token=$accessToken->access_token&openid=$accessToken->openid&lang=zh_CN";
$UserInfo = file_get_contents($url);
return json_decode($UserInfo, true);
}

/**
* 此AccessToken 与 getUserAccessToken不一样
* 获得AccessToken
* @return mixed
*/
private function getAccessToken()
{
// 获取缓存
$access = cache('access_token');
// 缓存不存在-重新创建
if (empty($access)) {
// 获取 access token
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this -> appid}&secret={$this->appsecret}";
$accessToken = file_get_contents($url);

$accessToken = json_decode($accessToken);
// 保存至缓存
$access = $accessToken->access_token;
cache('access_token', $access, 7000);
}
return $access;
}

/**
* 获取JS证明
* @param $accessToken
* @return mixed
*/
private function _getJsapiTicket($accessToken)
{

// 获取缓存
$ticket = cache('jsapi_ticket');
// 缓存不存在-重新创建
if (empty($ticket)) {
// 获取js_ticket
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" . $accessToken . "&type=jsapi";
$jsTicket = file_get_contents($url);
$jsTicket = json_decode($jsTicket);
// 保存至缓存
$ticket = $jsTicket->ticket;
cache('jsapi_ticket', $ticket, 7000);
}
return $ticket;
}

/**
* 获取JS-SDK调用权限
*/
public function shareAPi(Request $request)
{
header("Access-Control-Allow-Origin:*");
// 获取accesstoken
$accessToken = $this->getAccessToken();
// 获取jsapi_ticket
$jsapiTicket = $this->_getJsapiTicket($accessToken);

// -------- 生成签名 --------
$wxConf = [
'jsapi_ticket' => $jsapiTicket,
'noncestr' => md5(time() . '!@#$%^&*()_+'),
'timestamp' => time(),
'url' => $request->post('url'), //这个就是你要自定义分享页面的Url啦
];
$string1 = sprintf('jsapi_ticket=%s&noncestr=%s×tamp=%s&url=%s', $wxConf['jsapi_ticket'], $wxConf['noncestr'], $wxConf['timestamp'], $wxConf['url']);
// 计算签名
$wxConf['signature'] = sha1($string1);
$wxConf['appid'] = $this->appid;
return json($wxConf);
}

}

--------------------
作者:zscsummer
来源:CSDN
原文:https://blog.csdn.net/zscsummer/article/details/78655322
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/2019gdiceboy/p/11090256.html

thinkphp 微信授权登录 以及微信实现分享相关推荐

  1. Android:微信授权登录与微信分享全解析

    前言 在移动互联网浪潮中,联网APP已经把单机拍死在沙滩上,很多公司都希望自家应用能够有一套帐号系统,可是许多用户却并不一定买账:我凭啥注册你家应用的帐号?微博,微信,QQ几乎成了每个人手机中的必装应 ...

  2. 从前后端交互逻辑出发、基于企业开发标准,Web微信授权登录系统开发项目分享

    背景 首先,在网页中开发第三方登录系统的案例越来越多,用户的操作习惯也逐渐被引导改变,更加简洁有效的登录交互系统将会成为网页开发中必要的一环.从项目的用户使用背景.微信公众号的开发模式.企业代码的标准 ...

  3. java 微信文章评论点赞,基于SpringBoot的微信授权登录+仿微信朋友圈+文章查看(评论)系统...

    springboot技术内幕架构设计与实现 53.1元 包邮 (需用券) 去购买 > 本系统是基于Spring Boot 技术实现的文章发布系统,该系统是我和我朋友一起做的,本文仅介绍自己的这部 ...

  4. 微信授权登录(微信订阅号使用测试账号)

    1.微信授权登录: 微信公众号测试登录: 准备: 1.1 花生壳! 下载地址:http://hsk.oray.com/download/ 1.2 微信公众号:https://mp.weixin.qq. ...

  5. pc、h5微信授权登录

    pc登录 微信登录(通过后端返回一个qrcode重定向到页面上,进行扫码授权,获取code即可,再根据code获取登录信息) h5登录 微信授权登录:(支持微信浏览器,其它浏览器无法拉起微信的授权): ...

  6. 微信授权登录问题【公众号登录、PC扫描登录】

    微信授权登录问题 微信的授权登录比较多,主要分两大类,一类是微信客户端的公众号网站授权登录 微信公众号网页授权:第二种是网站或者android.ios的授权登录 网站应用微信扫描授权; 具体的andr ...

  7. ios微信登录不上服务器,iOS微信授权登录

    首先需要确保你的App应用在微信开发平台上注册创建并获得对应的接口,对应登录.支付等功能还涉及付费,具体申请流程就不再这里说了.到开放平台->管理中心->移动应用->查看应用,确认你 ...

  8. 关于微信授权登录的用户取消-2的问题

    之前在做微信授权登录的时候,遇到了用户取消:-2的问题,从网上查了一下,也没有找到什么解决方案,最后自己还是把它解决了,和大家分享一下,弄了半天,原来是自己申请错了,我给申请成了网站应用了,使用的网站 ...

  9. ThinkPHP3.2.3 实现微信小程序微信授权登录

    网上找了很多教程都不好使,最后自己又研究了一番,终于成功了 一.总体设计 小程序登录流程:客户端通过调用wx.login(),获取登录凭证(code),将此code发往服务器,服务器通过调用 auth ...

最新文章

  1. AI从入门到放弃2:CNN的导火索,用MLP做图像分类识别?
  2. 从放弃到入门-Yaf(框架生成)
  3. 机房收费系统-- MDI子窗体显示技巧(续vb.net版)
  4. 用神经网络的分类行为理解质量到底是什么?
  5. 学习笔记:文本过滤_____unix 下的通配符
  6. C语言的指针函数与函数指针
  7. 用wxpython做ui_wxPython - 如何强制UI刷新?
  8. CodeForces - 570E(dp------------- Codeforces Round #316 (Div. 2)E
  9. 教你配置支付宝应用网关和授权回调地址
  10. android 滑动接听源码,android仿摩拜单车APP、炫酷RecyclerView、卡片滑动、仿饿了么点餐、自定义索引等源码...
  11. Trident API 概览
  12. android中多态的应用_动态代理原理及在 Android 中的应用
  13. Java的HttpClient类以POST方式提交数据,目标端收到后中文乱码
  14. 使用WSDL工具生成C#使用的WebService声明文件
  15. win10企业版永久关闭自动更新
  16. 【数据工具】ArcGIS批量出图工具箱
  17. 仿药易通输入单位信息后如果没有则自动加入功能
  18. 【prince2考试扫盲】Prince2 跟 pmp 有什么区别?项目经理考哪一个?详细解答来了
  19. linux误删分区表,恢复被误删的Linux分区表
  20. “Defaulting to user installation because normal site-packages is not writeable“

热门文章

  1. 2014西安 H 有向图博弈 UVALive-7042
  2. 求字符串中汉字的个数
  3. 与Andrey Breslav谈论Kotlin 1.0的发布
  4. 寄存器位查看小工具.exe
  5. Redis在windows下的安装
  6. 应用软件(E-MAIL-FTP-WEB)
  7. SQL Server自带备份整个数据库脚本工具
  8. 构建一个业务连续的网络
  9. HDU_1087-Super Jumping! Jumping! Jumping!
  10. RBAC角色权限设计