215 lines
7.1 KiB
PHP
Executable File
215 lines
7.1 KiB
PHP
Executable File
<?php
|
||
require '../vendor/wechat/vendor/autoload.php';
|
||
class pptWXBase
|
||
{
|
||
protected $openid;
|
||
public function __construct(){
|
||
session_start();
|
||
//$_SESSION['openid'] = null;
|
||
if(!isset($_SESSION['openid'])){
|
||
$openid = $this->getHeaderValue('openid');
|
||
if(empty($openid)){
|
||
//去登录
|
||
$code = isset($_GET['code']) ? $_GET['code'] : '';
|
||
$this->wxLogin($code);
|
||
exit();
|
||
}else{
|
||
//已经有openid了,不用登录
|
||
$_SESSION['openid'] = $openid;
|
||
}
|
||
}
|
||
$this->openid = $_SESSION['openid'];
|
||
}
|
||
/**
|
||
* 获取请求头
|
||
* @param [string] $keyName [头名]
|
||
* @return [string] [头值]
|
||
*/
|
||
public function getHeaderValue($keyName){
|
||
$headerValue = '';
|
||
if (function_exists('apache_request_headers') && $result = apache_request_headers()) {
|
||
$headerValue = $result[$keyName];
|
||
} else {
|
||
foreach ($_SERVER as $key => $val) {
|
||
if (0 === strpos($key, 'HTTP_')) {
|
||
$key = str_replace('_', '-', strtolower(substr($key, 5)));
|
||
if($key == $keyName){
|
||
$headerValue = $val;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return $headerValue;
|
||
}
|
||
/**
|
||
* 调用微信登录
|
||
* @return [type] [description]
|
||
*/
|
||
public function wxLogin($code){
|
||
//登录过程
|
||
if(!$code){
|
||
//调取授权
|
||
$this->getAuth();
|
||
}else{
|
||
//获取openid,同时获取用户信息
|
||
$authInfo = $this->getOpenid($code,true);
|
||
if(isset($authInfo['openid'])){
|
||
$_SESSION['openid'] = $authInfo['openid'];
|
||
$this->openid = $_SESSION['openid'];
|
||
echo "<script>document.location.reload()</script>";exit();
|
||
}
|
||
}
|
||
}
|
||
/**
|
||
*第一步:用户同意授权,获取code
|
||
*getAuth();
|
||
*第二步:通过code换取网页授权access_token
|
||
*getOpenid($code,$type=false){
|
||
*第三步:拉取用户信息(需scope为 snsapi_userinfo)
|
||
*微信用户信息
|
||
*第一种,直接在第二步获取openid时获取
|
||
*getOpenid($code,$type=true);
|
||
*第二种 通过用户授权accress_token获取
|
||
*getUserInfo($userAuthAccessToken, $openid);
|
||
*第三种 通过公众号accressToken获取
|
||
*getUserInfoByToken($accessToken, $openid)
|
||
*
|
||
*
|
||
*/
|
||
|
||
/**
|
||
* 获取用户授权CODE,回调为当前地址,需要判断Code
|
||
*
|
||
*/
|
||
public function getAuth(){
|
||
\WeChat\Core\User::code(); # 重载微信授权
|
||
}
|
||
/**
|
||
* 通过code获取openid,access_token或用户信息
|
||
* @param [string] $code [用户授权code]
|
||
* @param [string] $type [true:同时获取用户信息 | false:只获取用户openid]
|
||
* @return [string] [openid]
|
||
*/
|
||
public function getOpenid($code, $type=false){
|
||
return \WeChat\Core\User::openid($code, $type);
|
||
}
|
||
/**
|
||
* 通过用户授权access_token获取用户信息
|
||
* @param [string] $userAuthAaccessToken [用户授权access_token]
|
||
* @param [string] $openid [用户openid]
|
||
* @return [array] []
|
||
*/
|
||
public function getUserInfo($userAuthAccessToken, $openid){
|
||
return \WeChat\Core\User::userInfo($userAuthAccessToken, $openid);
|
||
}
|
||
/**
|
||
* 通过公众号accessToken获取用户信息
|
||
* @param [string] $accessToken [公众号access_token]
|
||
* @param [string] $openid [用户openid]
|
||
* @return [array] []
|
||
*/
|
||
public function getUserInfoByToken($openid){
|
||
return \WeChat\Core\User::newUserInfo($openid);
|
||
}
|
||
/**
|
||
* 获取公众号下所有模板信息
|
||
* @return [array] [模板列表]
|
||
*/
|
||
public function getAllTemplateMsg(){
|
||
$accessToken = $this->getAccessToken();
|
||
return \WeChat\Core\Template::gain($accessToken);
|
||
}
|
||
/**
|
||
* 获取用户accessToken
|
||
* @return [string] accessToken
|
||
*/
|
||
public function getAccessToken(){
|
||
$accessToken = \WeChat\Core\Token::gain(); # 获取微信access_token
|
||
$accessToken = $accessToken['access_token'];
|
||
return $accessToken;
|
||
}
|
||
/**
|
||
* 发送模板消息
|
||
* @param [string] $templateId [模板ID]
|
||
* @param [string] $openid [用户openid]
|
||
* @param [array] $data [消息数据]
|
||
* @param [string] $url [点击跳转地址]
|
||
* @param string $color [标题颜色]
|
||
* @return [array] 消息是否成功发送
|
||
* errcode: 0成功,其他失败
|
||
* errmsg: 错误信息,ok成功,其他失败
|
||
* msgid: 消息id
|
||
*
|
||
*/
|
||
public function sendTemplateMsg($templateId, $openid, $data, $url, $color = '#7B68EE'){
|
||
//\WeChat\Core\User::code($appID); # 重载微信授权
|
||
$accessToken = $this->getAccessToken();
|
||
return \WeChat\Core\Send::push($accessToken, $templateId, $openid, $data, $url, $color);
|
||
}
|
||
}
|
||
// $templateId = 'ObkTv-txyqsv8Toie4HC8PnBFJmwygw9zPJbx8h0FcM';
|
||
// $openid = 'objYQuHNqKTi2sjSTzLTc7C7PjDo';
|
||
// $url = 'http://t.ect99.com';
|
||
// //模板消息
|
||
// $data = [
|
||
// 'first'=>['value'=>'您的活动已通过','color'=>"#FF0000"],
|
||
// 'keyword1'=>['value'=>'测试文章标题'], //keyword需要与配置的模板消息对应
|
||
// 'keyword2'=>['value'=>date("Y-m-d H:i:s")],
|
||
// 'keyword3'=>['value'=>'测试发布人'],
|
||
// 'keyword4'=>['value'=>'测试状态'],
|
||
// 'remark' =>['value'=>'备注:这是测试']
|
||
// ];
|
||
// var_dump(pptWX->sendTemplateMsg($templateId, $openid, $data, $url));
|
||
// //登录过程
|
||
// $code = isset($_GET['code']) ? $_GET['code'] : '';
|
||
// if(!$code){
|
||
// //调取授权
|
||
// pptWXBase::getAuth();
|
||
// }else{
|
||
// //获取授权信息,只获取openid
|
||
// //$authInfo = pptWXBase::getOpenid($code);
|
||
// // 返回代码示例
|
||
// // array(5) {
|
||
// // ["access_token"]=>
|
||
// // string(89) "22_HQ4kM7_gbUZ-fGP1TnFLeh-wxk-jWyjc_PzrbYpICXyuGCNKWEi_Yz5_qnStDGP56I8OD4xJvNRVS98U1TC6Zw"
|
||
// // ["expires_in"]=>
|
||
// // int(7200)
|
||
// // ["refresh_token"]=>
|
||
// // string(89) "22_bdxpWwS0wADfSNO1y6Sq7txoWBK3hG4x3vvx_WOe-sovDig-yWZ43MsBtzJlY2svcxmlvLxKwBughKbJL14b8A"
|
||
// // ["openid"]=>
|
||
// // string(28) "objYQuHNqKTi2sjSTzLTc7C7PjDo"
|
||
// // ["scope"]=>
|
||
// // string(15) "snsapi_userinfo"
|
||
// // }
|
||
// //获取用户信息
|
||
// //通过授权token,获取用户信息
|
||
// //$userInfo = pptWXBase::getUserInfo($authInfo['access_token'], $authInfo['openid']);
|
||
// //获取openid,同时获取用户信息
|
||
// $authInfo = pptWXBase::getOpenid($code,true);
|
||
// // 返回代码示例
|
||
// // array(9) {
|
||
// // ["openid"]=>
|
||
// // string(28) "objYQuHNqKTi2sjSTzLTc7C7PjDo"
|
||
// // ["nickname"]=>
|
||
// // string(12) "网事悠悠"
|
||
// // ["sex"]=>
|
||
// // int(1)
|
||
// // ["language"]=>
|
||
// // string(5) "zh_CN"
|
||
// // ["city"]=>
|
||
// // string(6) "枣庄"
|
||
// // ["province"]=>
|
||
// // string(6) "山东"
|
||
// // ["country"]=>
|
||
// // string(6) "中国"
|
||
// // ["headimgurl"]=>
|
||
// // string(130) "http://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJW7ghRsPm6dJReYJ97lUMicgjQLVdSaPr3SKBZ29riaZ3KOFaw1nmKyt4LtibvN2FkzFTTESgetm9QQ/132"
|
||
// // ["privilege"]=>
|
||
// // array(0) {
|
||
// // }
|
||
// // }
|
||
|
||
// var_dump($authInfo);
|
||
// }
|