多域名微信公众号获取授权(前后端分离,后端获取微信用户openid)

1.通过后端站点http://b.cn  跳转至前端链接 http://aa.cn/v1/demo/demo

    public function index(){$ident=input('ident');$this->redirect('http://aa.cn/?ident='.$ident);}

2.前端http://aa.cn 再跳转到后端 https://c.com(此域名绑定微信公众号:需备案)

onShow() {console.log('URL参数111:', this.identValue);uni.redirectTo({url: '/pages/index/webview/webview?url=' + encodeURIComponent('https://c.com/v1/demo/demo?ident='+this.identValue)});var ua = window.navigator.userAgent.toLowerCase();console.log(ua);},

3.https://c.com (用此域名获取微信用户openid) 然后在跳转到前端域名

    public function demo(){$ident=input('ident');Checking::writeLog('ident:'.$ident,'input','wx.log');$wechat=new Wechat();$user=$wechat->getUserOpenId();Checking::writeLog(json_encode($user,JSON_UNESCAPED_UNICODE),'openid','wx.log');$this->redirect('http://aa.cn/#/pages/index/home?ident='.$ident.'&openid='.$user);halt($user);}
<?php
/*** Created by PhpStorm.* User: Administrator* Date: 2018/8/6* Time: 22:41*/namespace app\v1\controller;
use app\common\controller\Checking;
use think\Controller;class Wechat extends Controller
{protected $accessTokenUrl = 'https://api.weixin.qq.com/cgi-bin/token';protected $wechatAuthCodeUrl = 'https://open.weixin.qq.com/connect/oauth2/authorize?';protected $userOpenIdUrl = 'https://api.weixin.qq.com/sns/oauth2/access_token?';protected $appId;protected $secret;protected $code;protected $openId;/*** 加载微信配置*/protected function _initialize(){$this->appId = '';$this->secret = '';}/*** 作用:格式化参数,签名过程需要使用* @param $paraMap* @param $urlencode* @return bool|string*/protected function formatBizQueryParaMap($paraMap, $urlencode){$buff = "";ksort($paraMap);foreach ($paraMap as $k => $v){if($urlencode){$v = urlencode($v);}$buff .= $k . "=" . $v . "&";}$reqPar = '';if (strlen($buff) > 0){$reqPar = substr($buff, 0, strlen($buff)-1);}return $reqPar;}/*** 网页授权获取用户openId -- 1.获取授权code url*/public function getWechatAuthCode(){// 获取来源地址$url = $this->get_url();// 获取code$urlObj["appid"] = $this->appId;$urlObj["redirect_uri"] = "$url";$urlObj["response_type"] = "code";$urlObj["scope"] = "snsapi_base";$urlObj["state"] = "STATE"."#wechat_redirect";$bizString = $this->formatBizQueryParaMap($urlObj, false);$codeUrl =  $this->wechatAuthCodeUrl.$bizString;return $codeUrl;}/*** 网页授权获取用户openId -- 2.获取openid* @return mixed*/public function getUserOpenId(){if (!isset($_GET['code'])){$codeUrl = $this->getWechatAuthCode();Header("Location: $codeUrl");die;}else{$code = $_GET['code'];$this->code = $code;// 请求openid$param = ['appid'     =>  $this->appId,'secret'    =>  $this->secret,'code'      =>  $this->code,'grant_type'=>  "authorization_code",];$user_info = $this->curl($this->userOpenIdUrl.http_build_query($param).'&lang=zh_CN');//取出openid$data = json_decode($user_info,true);$this->openId = $data['openid'];return $this->openId;}}/*** 获取来源地址* @return string*/public function get_url() {//获取来源地址$url = "http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];return $url;}// php CURL请求public function curl($url, $post = false){$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);if ($post) {curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $post);}$result = curl_exec($ch);curl_close($ch);return $result;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/36677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库怎么同步

数据库要怎么同步呢&#xff0c;有很多方法&#xff0c;看你用什么数据库&#xff0c;如果是Sqlserver,你要数据库同步&#xff0c;那么可以使用自带的订阅发布&#xff0c;订阅发布应该是不错的方法&#xff0c;但是我上次要配置双向同步&#xff0c;它的对等发布好像没部署成…

Ansible-综合练习-生产案例

斌的招儿 网上教程大多都是官网模板化的教程和文档&#xff0c;这里小斌用自己实际生产环境使用的例子给大家做一个详解。涉及到一整套ansible的使用&#xff0c;对于roles的使用&#xff0c;也仅涉及到tasks和files目录&#xff0c;方便大家快速上手并规范化管理。 0.环境配置…

想关掉一个qwidget是用deleteLater还是用close

在Qt中关闭一个QWidget可以选择使用close()或者deleteLater()两种方法&#xff0c;根据具体需求&#xff0c;两者有不同的适用场景&#xff1a; close()方法&#xff1a; close()会触发QWidget的closeEvent&#xff0c;也就是说&#xff0c;它会产生一个关闭事件&#xff0c;可…

聚星文社AI工具

聚星文社AI工具是一种基于人工智能技术开发的工具&#xff0c;旨在辅助作者和写作人员提升创作效率和质量。 点击下载 该工具可以提供多项功能&#xff0c;包括语法纠错、智能推荐、文章自动摘要等。 通过使用聚星文社AI工具&#xff0c;用户可以在写作过程中得到即时的纠错建…

memcached服务介绍

memcached 基础概念安装使用 基础概念 Memcached 是一个高性能的分布式内存对象缓存系统&#xff0c;用于减少数据库负载&#xff0c;加速动态 Web 应用。 Memcached 的基本概念 缓存&#xff1a;Memcached 的核心功能是缓存数据&#xff0c;它将经常访问的数据存储在内存中…

ECMAScript6介绍及环境搭建

这实际上说明&#xff0c;对象的解构赋值是下面形式的简写。 let { foo: foo, bar: bar } { foo: ‘aaa’, bar: ‘bbb’ }; 也就是说&#xff0c;对象的解构赋值的内部机制&#xff0c;是先找到同名属性&#xff0c;然后再赋给对应的变量。真正被赋值的是后者&#xff0c;而…

数据结构_绪论

1.数据结构的研究内容 研究数据的特性和数据之间的关系 用计算机解决一个问题的步骤 1.具体问题抽象成数学模型 实质: 分析问题--->提取操作对象--->找出操作对象之间的关系(数据结构)--->用数学语言描述 操作对象对象之间的关系 2.设计算法 3.编程,调试,运行 …

GO语言面试题目,使用3个协程按照顺序从1打印到100

GO语言面试题目&#xff0c;使用3个协程按照顺序从1打印到100 稍微把题目拓展了下&#xff0c;使用N个协程 打印M个数&#xff0c;应该很好理解&#xff0c;创建一个N个协程的列表&#xff0c;然后每打印一个数&#xff0c;就传到下一个chan中&#xff0c;一次循环 package m…

【数据结构与算法】哈希函数 详解

哈希函数的构造方法有哪些&#xff1f; 直接定址法&#xff1a;直接使用关键字或者关键字的某个线性函数值作为哈希地址。 数字分析法&#xff1a;对关键字进行分析&#xff0c;选择关键字中的某几位或者进行某种运算得到的结果作为哈希地址。 平方取中法&#xff1a;先计算关…

通信协议总结

IIC 基本特点 同步&#xff0c;半双工 标准100KHz&#xff0c;最高400KHz&#xff08;IIC主要应用于低速设备&#xff09; 硬件组成 需外接上拉电阻 通信过程 空闲状态 SDA和SCL都处于高电平 开始信号S和终止信号P 在数据传输过程中&#xff0c;当SCL0时&#xff0c;SDA才…

十常侍乱政 | 第2集 | 愿领精兵五千,斩关入内,册立新君,诛杀宦党,扫清朝廷,以安天下 | 三国演义 | 逐鹿群雄

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f4cc;这篇博客是毛毛张分享三国演义文学剧本中的经典台词和语句&#xff0c;本篇分享的是《三国演义》第Ⅰ部分《群雄逐鹿》的第2️⃣集《十常侍乱政治》&am…

汇聚荣做拼多多运营第一步是什么?

汇聚荣做拼多多运营第一步是什么?在众多电商平台中&#xff0c;拼多多凭借其独特的社交电商模式迅速崛起&#xff0c;吸引了大量消费者和商家的目光。对于希望在拼多多上开店的商家而言&#xff0c;了解如何进行有效运营是成功的关键。那么&#xff0c;汇聚荣做拼多多运营的第…

【Android面试八股文】Looper如何在子线程中创建?

文章目录 一、Looper的几个重要方法二、子线程中使用Looper的方式1三、子线程中使用Looper的方式23.1 使用HandlerThread实现3.2 HandlerThread源码解析创建子线程的 Looper必须要通过 Looper.prepare()初始化looper,然后再通过 Looper.loop()方法让 Loop运行起来。 那么具…

算法入门:二分查找及其Java实现

在程序开发中&#xff0c;算法是解决问题的核心。本篇博客将详细讲解一种高效的查找算法——二分查找&#xff0c;并通过Java代码示例帮助你理解其实现和应用。 如果你觉得这篇文章对你有帮助&#xff0c;不要忘记点赞、收藏和关注我&#xff0c;这将是对我最大的支持和鼓励&am…

VMware 最新的安全漏洞公告VMSA-2024-0013

#深度好文计划# 一、摘要 2024年6月26日&#xff0c;VMware 发布了最新的安全漏洞公告 VMSA-2024-0013&#xff0c;修复了 VMware ESXi 和 VMware vCenter 中的多个安全漏洞。 VMSA-2024-0013&#xff1a;VMware ESXi 和 vCenter Server 更新修正了多个安全性漏洞 &#xff…

Unity3D 物体的运动

运动方式1 修改 position / localPosition &#xff0c;可以让物体运动 例如&#xff0c; Vector3 pos this.transform.localPosition; pos.z distance; this.transform.localPosition pos; 此时&#xff0c;小车向Z 方向运动 具体代码如下 using System.Collection…

C语言入门课程学习笔记10:结构体联合体位域

C语言入门课程学习笔记10 第48课 - 自定义数据类型&#xff08;上&#xff09;实验-typedef实验小结 第49课 - 自定义数据类型&#xff08;中&#xff09;实验实验小结 第50课 - 自定义数据类型&#xff08;下&#xff09;实验实验小结 第51课 - 多文件程序设计实验实验实验小结…

uni-app picker多列选项

预期实现的效果&#xff1a; 选中后的效果&#xff1a; // Dom部分 <template><picker mode"multiSelector" :range"ssqRange" range-key"name" columnchange"ssqColumnChange" change"ssqChange" class"p…

研究发现GPT-4o等较新的多模态AI模型的安全机制有不足之处

在 ChatGPT 和类似的生成式人工智能模型推出后&#xff0c;很多人都在强调安全问题&#xff0c;政府也参与其中&#xff0c;OpenAI 甚至成立了一个超级协调小组&#xff0c;以阻止未来的人工智能失控&#xff0c;但由于对人工智能安全的发展方向存在分歧&#xff0c;该小组于今…

03逻辑门电路

分立门电路&#xff1a; 集成门电路&#xff1a; TTL门电路 MOS门电路&#xff1a;NMOS门电路、PMOS门电路、CMOS门电路 BICMOS门电路&#xff1a;CMOS的高输入阻抗和TTL的高放大倍数的结合 向更低功耗、更高速度发展 MOS管的Rdson在可变电阻区的阻值也一般会小于1000欧姆 …