<?php

/*
需要的微信公众号配置信息
APPID : 绑定支付的APPID
APPSECRET : 公众帐号secert
*/
class Index {
// 配置账号信息
private $wxPayConfig = array ();
protected function _initialize() {
// 如果有继承的父类,则需先访问父类构造方法
// parent::_initialize (); // APPID:绑定支付的APPID(必须配置,开户邮件中可查看)
$this->wxPayConfig ['APPID'] = 'wx426b3015555a46be';
// APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置, 登录公众平台,进入开发者中心可设置)
$this->wxPayConfig ['APPSECRET'] = '7813490da6f1265e4901ffb80afaa36f'; /**
* 这里设置代理机器,只有需要代理的时候才设置,不需要代理,则设置为0.0.0.0和0
* 本例程通过curl使用HTTP POST方法,此处可修改代理服务器,
* 默认CURL_PROXY_HOST=0.0.0.0和CURL_PROXY_PORT=0,此时不开启代理(如有需要才设置)
*/
$this->wxPayConfig ['CURL_PROXY_HOST'] = "0.0.0.0"; // "10.152.18.220";
$this->wxPayConfig ['CURL_PROXY_PORT'] = 0;
} // 通过code获得openid
public function getOpenid() { //snsapi_base (未关注,不弹出授权页面,直接跳转,只能获取用户openid)
//snsapi_userinfo (弹出授权页面,即使在未关注的情况下,只要用户授权,也能获取其信息,可通过openid拿到昵称、性别、所在地等)
$scope = "snsapi_base";//这里使用静默授权 // 判断如果没有传 code 则先获取 code
if (! isset ( $_GET ['code'] )) {
// 获取当前打开页面的完整访问路径
$baseUrl = 'http://' . $_SERVER ['HTTP_HOST'] . $_SERVER ['REQUEST_URI'] . $_SERVER ['QUERY_STRING'];
$baseUrl = urlencode ( $baseUrl );
//配置获取code 路径的相关参数
$paramsArr = array();
$paramsArr ["appid"] = $this->wxPayConfig ['APPID'];
$paramsArr ["redirect_uri"] = "$baseUrl";
$paramsArr ["response_type"] = "code"; //scope 应用授权作用域
$paramsArr ["scope"] = $scope; //state 非必须参数,重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
//结尾 #wechat_redirect 必须有,且该字符串前面不能带 & 所以连接到最后一个参数值后面,无论直接打开还是做页面302重定向时候,必须带此参数
$paramsArr ["state"] = "STATE" . "#wechat_redirect";
//将数组变成参数url
$paramsUrl = $this->arrToParams ( $paramsArr );
//构造获取code的访问路径,访问后,微信服务器会再跳回$baseUrl指定的页面(这里当前页),并返回 code 码
$codeUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?" . $paramsUrl;
Header ( "Location: $codeUrl" );
exit ();
} else {
// 获取code码,以获取openid
$code = $_GET ['code'];
//配置获取 openid 路径的相关参数
$paramsArr = array();
$paramsArr ["appid"] = $this->wxPayConfig ['APPID'];
$paramsArr ["secret"] = $this->wxPayConfig ['APPSECRET'];
$paramsArr ["code"] = $code;
$paramsArr ["grant_type"] = "authorization_code";
$paramsUrl = $this->arrToParams ( $paramsArr );
$openidUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?" . $paramsUrl; $data = $this->httpCurl ( $openidUrl );
$openid = $data ['openid'];
if($scope == 'snsapi_userinfo'){
//如果是显示授权,即需要用户点击授权,则还会返回 access_token 通过 access_token 及 openid 通过 echo file_get_contents("https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$openid}&lang=zh_CN");即可获取打印用户信息,或者用这里的curl方法httpCurl(https://api.weixin.qq.com/sns/userinfo?access_token=...)获取亦可
$access_token = $data['access_token'];
}
return $openid;
}
} /**
*
* 通过code从工作平台获取openid机器access_token
*
* @param string $code
* 微信跳转回来带上的code
*
* @return openid
*/
public function httpCurl($url) {
// 初始化curl
$ch = curl_init ();
// 设置30秒超时
curl_setopt ( $ch, CURLOPT_TIMEOUT, 30 );
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE );
curl_setopt ( $ch, CURLOPT_HEADER, FALSE );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, TRUE );
if ($this->wxPayConfig ['CURL_PROXY_HOST'] != "0.0.0.0" && $this->wxPayConfig ['CURL_PROXY_PORT'] != 0) {
curl_setopt ( $ch, CURLOPT_PROXY, $this->wxPayConfig ['CURL_PROXY_HOST'] );
curl_setopt ( $ch, CURLOPT_PROXYPORT, $this->wxPayConfig ['CURL_PROXY_PORT'] );
}
// 运行curl,结果以jason形式返回
$res = curl_exec ( $ch );
curl_close ( $ch );
// 取出openid
$data = json_decode ( $res, true );
return data;
} /**
*
* 拼接签名字符串
*
* @param array $paramsArr
*
* @return 返回已经拼接好的字符串
*/
private function arrToParams($paramsArr) {
$buff = "";
foreach ( $paramsArr as $k => $v ) {
if ($k != "sign") {
$buff .= $k . "=" . $v . "&";
}
} $buff = trim ( $buff, "&" );
return $buff;
}
}

微信获取 openid 静默及非静默的更多相关文章

  1. 微信h5静默和非静默授权获取用户openId和用户信息的方法和步骤:

    原文链接:https://blog.csdn.net/qq_35430000/article/details/79299529 一.openId是什么?openId是用户在当前公众号下的唯一标识('身 ...

  2. 微信-获取openid

    第一步 首先把微信的支付流程与相关的文档熟悉一遍,具体的支付逻辑是怎么实现的,心里要有一定的路数,开发的时候一边看文档,一边写,再一边调试这是最好的选择,首先阅读微信开发文档,因为我们这次是做公众号支 ...

  3. 简单的实现微信获取openid

    微信公众平台获取openid在公众号的开发中有很多用途,前段时间为实现用户使用公众号在登录一次以后可以免密登陆而使用了openid.开发过程中遇到了一些问题,在这里向需要且还没有获取到openid的米 ...

  4. 微信获取openId

    router.beforeEach(function(to, from, next){ //中间页等待跳转 if(to.meta.requireCheck=="WaitLogin" ...

  5. 【公众号】微信第三方登录(静默授权和非静默授权)(具体代码:U盘 新浪云SAE)

    一.微信联合登录是怎么登录的,有几种登录方式:微信联合登录和微信授权登录[授权登录(非静默授权)与静默授权] [主动授权]:需要用户确认登录,这样可以通过用户的个人确认,获取用户全面的信息,无论是否关 ...

  6. 微信H5中静默登录及非静默登录的正确使用姿势

    在微信中打开网页且需要调用微信登录接口时,微信官方给我们提供了两种登录调用方式:静默登录和非静默登录:但是官方文档中却没有说明在何种情况下使用静默登录,何种情况下使用非静默登录,所以在这里,我想将之前 ...

  7. 微信公众号授权回调用户信息,获取openid

    1.--------------------用户授权登录并获取code 授权登录方式有两个,一种为静默授权登录(scope=snsapi_base),一种为非静默授权登录(scope=snsapi_u ...

  8. Android项目实战(三十一):异步下载apk文件并安装(非静默安装)

    前言: 实现异步下载apk文件 并 安装.(进度条对话框显示下载进度的展现方式) 涉及技术点: 1.ProgressDialog   进度条对话框  用于显示下载进度 2.AsyncTask     ...

  9. node 微信授权 获取openid

    node获取微信授权拿到openid 需要了解的网站   1.微信授权. 先说一下流程(一张图代替所有): 流程步骤: 1.用户同意,获取code. 2.通过code获取网页授权access_toke ...

随机推荐

  1. python教程(六)·字符串

    我们已经学习了字符串的使用方法,我们还学习了使用索引和分片操作字符串,经历了这么长的时间,相信大家也有所掌握:本节将讨论并学习字符串的格式化与字符串的常用方法 字符串格式化 字符串是序列的一种,所以所 ...

  2. libcurl编译及使用

    环境: libcurl版本:7.54.1 VS:Visual Studio 2013 一.编译 1.下载最新版的libcurl(curl-7.54.1.zip)(地址:https://curl.hax ...

  3. PTA基础编程题目集6-7 统计某类完全平方数 (函数题)

    本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144.676等. 函数接口定义: int IsTheNumber ( const int N ); 其中 ...

  4. linux-VM无法连接mks套接字连接尝试次数太多

    打开服务管理界面 将VM的服务都设为自动,并将其启动 在VM中重新打开虚拟机即可

  5. 20155310 2016-2017-2 《Java程序设计》第四周学习总结

    20155310 2016-2017-2 <Java程序设计>第四周学习总结 一周两章新知识的自学与理解真的是很考验和锻炼我们,也对前面几章我们的学习进行了检测,遇到忘记和不懂的知识就再复 ...

  6. apache开启伪静态的方法 php篇

    打开apache的配置文件httpd.conf 找到 #LoadModule rewrite_module modules/mod_rewrite.so 把前面#去掉.没有则添加,但必选独占一行,使a ...

  7. equals和==方法比较(三)--Long中LongCache源码分析

    下面我们来分析,上篇博客中遗留的问题,为什么下方的两个一个是true,两一个是false那? //true Long l1=123l; Long l2=123l; System.out.println ...

  8. 六、EnterpriseFrameWork框架基础功能之权限管理

    回<[开源]EnterpriseFrameWork框架系列文章索引> 从本章开始进入框架的第二块内容“EnterpriseFrameWork框架的基础功能”,包括:权限管理.字典数据管理. ...

  9. 发送请求工具—Advanced REST Client的安装使用

    1. 0 下载得到Advanced-REST-client_v3.1.9.zip 链接:http://pan.baidu.com/s/1c0vUnJi 密码:z34d 1.1 解压Advanced-R ...

  10. vue Map 渲染DOM

    遍历对象(map),以键值对k:v的形式渲染DOM (1)DOM (2)数据模板