多域名微信公眾號獲取授權(前后端分離,后端獲取微信用戶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.pswp.cn/diannao/36677.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36677.shtml
英文地址,請注明出處:http://en.pswp.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歐姆 …