mirror of
https://gitee.com/zoujingli/ThinkAdmin.git
synced 2025-04-06 03:58:04 +08:00
[修复]微信支持服务类
This commit is contained in:
parent
6d4ef5c301
commit
6088057319
29
application/extra/wechat.php
Normal file
29
application/extra/wechat.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
// +----------------------------------------------------------------------
|
||||
// | Think.Admin
|
||||
// +----------------------------------------------------------------------
|
||||
// | 版权所有 2016~2017 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | 官方网站: http://think.ctolog.com
|
||||
// +----------------------------------------------------------------------
|
||||
// | 开源协议 ( http://www.apache.org/licenses/LICENSE-2.0 )
|
||||
// +----------------------------------------------------------------------
|
||||
// | github开源项目:https://github.com/zoujingli/Think.Admin
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* 小程序配置参数
|
||||
* @return array
|
||||
*/
|
||||
return [
|
||||
'token' => 'mytoken',
|
||||
'appid' => 'wx60a43dd8161666d4',
|
||||
'appsecret' => '5ac28d66f7c4dc20ca9e729ccb09b9b1',
|
||||
'encodingaeskey' => 'eHSmk5yJN2vSsuYscC8aHIiXnrgXZSKA4MRL9csEwTv',
|
||||
'mch_id' => '1332187001',
|
||||
'partnerkey' => 'A82DC5BD1F3359081049C568D8502BC5',
|
||||
'ssl_cer' => '',
|
||||
'ssl_key' => '',
|
||||
'cachepath' => RUNTIME_PATH . 'wechat/pay',
|
||||
];
|
8
composer.lock
generated
8
composer.lock
generated
@ -378,12 +378,12 @@
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/zoujingli/wechat-php-sdk.git",
|
||||
"reference": "b80720891d847dfd58cd465c44492a36bb2c13ee"
|
||||
"reference": "a7590727eac59b918274399eea3c16eb01242087"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://files.phpcomposer.com/files/zoujingli/wechat-php-sdk/b80720891d847dfd58cd465c44492a36bb2c13ee.zip",
|
||||
"reference": "b80720891d847dfd58cd465c44492a36bb2c13ee",
|
||||
"url": "https://files.phpcomposer.com/files/zoujingli/wechat-php-sdk/a7590727eac59b918274399eea3c16eb01242087.zip",
|
||||
"reference": "a7590727eac59b918274399eea3c16eb01242087",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -404,7 +404,7 @@
|
||||
"keywords": [
|
||||
"wechat-php-sdk"
|
||||
],
|
||||
"time": "2017-03-20 03:40:39"
|
||||
"time": "2017-03-27 06:30:12"
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
|
@ -14,6 +14,7 @@
|
||||
|
||||
namespace controller;
|
||||
|
||||
use service\WechatService;
|
||||
use think\Controller;
|
||||
|
||||
class BasicWechat extends Controller {
|
||||
@ -91,7 +92,7 @@ class BasicWechat extends Controller {
|
||||
exit('网页授权失败,请稍候再试!');
|
||||
}
|
||||
session('openid', $this->openid = $result['openid']);
|
||||
$this->fansinfo = FansService::get($this->openid);
|
||||
$this->fansinfo = WechatService::getFansInfo($this->openid);
|
||||
# 微信粉丝信息处理
|
||||
if (empty($this->fansinfo['expires_in']) || $this->fansinfo['expires_in'] < time()) {
|
||||
switch ($result['scope']) {
|
||||
@ -112,8 +113,8 @@ class BasicWechat extends Controller {
|
||||
$user['expires_in'] = $result['expires_in'] + time() - 100;
|
||||
$user['refresh_token'] = $result['refresh_token'];
|
||||
$user['access_token'] = $result['access_token'];
|
||||
!FansService::set($user) && exit('微信授权失败 [ save userinfo faild ]');
|
||||
$this->fansinfo = FansService::get($this->openid);
|
||||
!WechatService::setFansInfo($user, $wechat->appid) && exit('微信授权失败 [ save userinfo faild ]');
|
||||
$this->fansinfo = WechatService::getFansInfo($this->openid);
|
||||
}
|
||||
empty($this->fansinfo) && exit('获取微信用户信息失败!');
|
||||
!!$redirect_url && exit(redirect($redirect_url)->send());
|
||||
|
@ -158,11 +158,11 @@ class WechatService {
|
||||
return false;
|
||||
}
|
||||
foreach (array_chunk($result['data']['openid'], 100) as $openids) {
|
||||
if (false === ($info = $wechat->getUserBatchInfo($openids)) || !isset($info['user_info_list'])) {
|
||||
if (false === ($info = $wechat->getUserBatchInfo($openids)) || !is_array($info)) {
|
||||
Log::error("获取用户信息失败,$wechat->errMsg");
|
||||
return false;
|
||||
}
|
||||
foreach ($info['user_info_list'] as $userInfo) {
|
||||
foreach ($info as $userInfo) {
|
||||
if (false === self::setFansInfo($userInfo, $wechat->appid)) {
|
||||
Log::error('更新粉丝信息更新失败!');
|
||||
return false;
|
||||
|
2
vendor/autoload.php
vendored
2
vendor/autoload.php
vendored
@ -4,4 +4,4 @@
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInitf1ad271c62d17afe200e83a25aa54de5::getLoader();
|
||||
return ComposerAutoloaderInit2bdb1a4ea6b2ecb142c59aa1efc16953::getLoader();
|
||||
|
14
vendor/composer/autoload_real.php
vendored
14
vendor/composer/autoload_real.php
vendored
@ -2,7 +2,7 @@
|
||||
|
||||
// autoload_real.php @generated by Composer
|
||||
|
||||
class ComposerAutoloaderInitf1ad271c62d17afe200e83a25aa54de5
|
||||
class ComposerAutoloaderInit2bdb1a4ea6b2ecb142c59aa1efc16953
|
||||
{
|
||||
private static $loader;
|
||||
|
||||
@ -19,15 +19,15 @@ class ComposerAutoloaderInitf1ad271c62d17afe200e83a25aa54de5
|
||||
return self::$loader;
|
||||
}
|
||||
|
||||
spl_autoload_register(array('ComposerAutoloaderInitf1ad271c62d17afe200e83a25aa54de5', 'loadClassLoader'), true, true);
|
||||
spl_autoload_register(array('ComposerAutoloaderInit2bdb1a4ea6b2ecb142c59aa1efc16953', 'loadClassLoader'), true, true);
|
||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInitf1ad271c62d17afe200e83a25aa54de5', 'loadClassLoader'));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInit2bdb1a4ea6b2ecb142c59aa1efc16953', 'loadClassLoader'));
|
||||
|
||||
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
|
||||
if ($useStaticLoader) {
|
||||
require_once __DIR__ . '/autoload_static.php';
|
||||
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInitf1ad271c62d17afe200e83a25aa54de5::getInitializer($loader));
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInit2bdb1a4ea6b2ecb142c59aa1efc16953::getInitializer($loader));
|
||||
} else {
|
||||
$map = require __DIR__ . '/autoload_namespaces.php';
|
||||
foreach ($map as $namespace => $path) {
|
||||
@ -48,19 +48,19 @@ class ComposerAutoloaderInitf1ad271c62d17afe200e83a25aa54de5
|
||||
$loader->register(true);
|
||||
|
||||
if ($useStaticLoader) {
|
||||
$includeFiles = Composer\Autoload\ComposerStaticInitf1ad271c62d17afe200e83a25aa54de5::$files;
|
||||
$includeFiles = Composer\Autoload\ComposerStaticInit2bdb1a4ea6b2ecb142c59aa1efc16953::$files;
|
||||
} else {
|
||||
$includeFiles = require __DIR__ . '/autoload_files.php';
|
||||
}
|
||||
foreach ($includeFiles as $fileIdentifier => $file) {
|
||||
composerRequiref1ad271c62d17afe200e83a25aa54de5($fileIdentifier, $file);
|
||||
composerRequire2bdb1a4ea6b2ecb142c59aa1efc16953($fileIdentifier, $file);
|
||||
}
|
||||
|
||||
return $loader;
|
||||
}
|
||||
}
|
||||
|
||||
function composerRequiref1ad271c62d17afe200e83a25aa54de5($fileIdentifier, $file)
|
||||
function composerRequire2bdb1a4ea6b2ecb142c59aa1efc16953($fileIdentifier, $file)
|
||||
{
|
||||
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
||||
require $file;
|
||||
|
8
vendor/composer/autoload_static.php
vendored
8
vendor/composer/autoload_static.php
vendored
@ -4,7 +4,7 @@
|
||||
|
||||
namespace Composer\Autoload;
|
||||
|
||||
class ComposerStaticInitf1ad271c62d17afe200e83a25aa54de5
|
||||
class ComposerStaticInit2bdb1a4ea6b2ecb142c59aa1efc16953
|
||||
{
|
||||
public static $files = array (
|
||||
'9b552a3cc426e3287cc811caefa3cf53' => __DIR__ . '/..' . '/topthink/think-helper/src/helper.php',
|
||||
@ -274,9 +274,9 @@ class ComposerStaticInitf1ad271c62d17afe200e83a25aa54de5
|
||||
public static function getInitializer(ClassLoader $loader)
|
||||
{
|
||||
return \Closure::bind(function () use ($loader) {
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInitf1ad271c62d17afe200e83a25aa54de5::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInitf1ad271c62d17afe200e83a25aa54de5::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInitf1ad271c62d17afe200e83a25aa54de5::$classMap;
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInit2bdb1a4ea6b2ecb142c59aa1efc16953::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInit2bdb1a4ea6b2ecb142c59aa1efc16953::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInit2bdb1a4ea6b2ecb142c59aa1efc16953::$classMap;
|
||||
|
||||
}, null, ClassLoader::class);
|
||||
}
|
||||
|
8
vendor/composer/installed.json
vendored
8
vendor/composer/installed.json
vendored
@ -88,18 +88,18 @@
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/zoujingli/wechat-php-sdk.git",
|
||||
"reference": "b80720891d847dfd58cd465c44492a36bb2c13ee"
|
||||
"reference": "a7590727eac59b918274399eea3c16eb01242087"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://files.phpcomposer.com/files/zoujingli/wechat-php-sdk/b80720891d847dfd58cd465c44492a36bb2c13ee.zip",
|
||||
"reference": "b80720891d847dfd58cd465c44492a36bb2c13ee",
|
||||
"url": "https://files.phpcomposer.com/files/zoujingli/wechat-php-sdk/a7590727eac59b918274399eea3c16eb01242087.zip",
|
||||
"reference": "a7590727eac59b918274399eea3c16eb01242087",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.3"
|
||||
},
|
||||
"time": "2017-03-20 03:40:39",
|
||||
"time": "2017-03-27 06:30:12",
|
||||
"type": "project",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
|
@ -29,7 +29,7 @@ class Common {
|
||||
public $postxml;
|
||||
public $_msg;
|
||||
public $errCode = 0;
|
||||
public $errMsg = "no access";
|
||||
public $errMsg = "";
|
||||
public $config = array();
|
||||
private $_retry = FALSE;
|
||||
|
||||
|
@ -139,7 +139,7 @@ class Tools {
|
||||
* @param array|string $postdata
|
||||
* @return bool|mixed
|
||||
*/
|
||||
static public function httpPost($url, $postdata) {
|
||||
static public function httpPost($url, $data) {
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_URL, $url);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
|
||||
@ -147,14 +147,15 @@ class Tools {
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
|
||||
curl_setopt($ch, CURLOPT_HEADER, FALSE);
|
||||
curl_setopt($ch, CURLOPT_POST, TRUE);
|
||||
if (is_array($postdata)) {
|
||||
foreach ($postdata as &$value) {
|
||||
if (is_array($data)) {
|
||||
foreach ($data as &$value) {
|
||||
if (is_string($value) && stripos($value, '@') === 0 && class_exists('CURLFile', FALSE)) {
|
||||
$value = new CURLFile(realpath(trim($value, '@')));
|
||||
}
|
||||
}
|
||||
$data = http_build_query($data);
|
||||
}
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
||||
$data = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
if ($data) {
|
||||
|
@ -18,7 +18,7 @@ class WechatUser extends Common {
|
||||
/* 获取粉丝信息 */
|
||||
const USER_INFO_URL = '/user/info?';
|
||||
/* 批量获取粉丝信息 */
|
||||
const USER_BATCH_INFO_URL = '/user/info/batchget';
|
||||
const USER_BATCH_INFO_URL = '/user/info/batchget?';
|
||||
/* 更新粉丝标注 */
|
||||
const USER_UPDATEREMARK_URL = '/user/info/updateremark?';
|
||||
|
||||
@ -112,15 +112,15 @@ class WechatUser extends Common {
|
||||
* @param string $lang 指定返回语言
|
||||
* @return bool|mixed
|
||||
*/
|
||||
public function getUserBatchInfo(array $openids, $lang = 'zh-CN') {
|
||||
public function getUserBatchInfo(array $openids, $lang = 'zh_CN') {
|
||||
if (!$this->access_token && !$this->getAccessToken()) {
|
||||
return false;
|
||||
}
|
||||
$data = array();
|
||||
foreach ($openids as $openid) {
|
||||
$data[] = array('openid' => $openid, 'lang' => $lang);
|
||||
$data = array('user_list' => array());
|
||||
foreach (array_unique($openids) as $openid) {
|
||||
$data['user_list'][] = array('openid' => $openid, 'lang' => $lang);
|
||||
}
|
||||
$result = Tools::httpPost(self::API_URL_PREFIX . self::USER_BATCH_INFO_URL . "access_token={$this->access_token}", $data);
|
||||
$result = Tools::httpPost(self::API_URL_PREFIX . self::USER_BATCH_INFO_URL . "access_token={$this->access_token}", Tools::json_encode($data));
|
||||
if ($result) {
|
||||
$json = json_decode($result, true);
|
||||
if (isset($json['errcode']) && !isset($json['user_info_list'])) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user