[修复]微信支持服务类

This commit is contained in:
邹景立 2017-03-27 14:49:09 +08:00
parent 6d4ef5c301
commit 6088057319
11 changed files with 67 additions and 36 deletions

View 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
View File

@ -378,12 +378,12 @@
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/zoujingli/wechat-php-sdk.git", "url": "https://github.com/zoujingli/wechat-php-sdk.git",
"reference": "b80720891d847dfd58cd465c44492a36bb2c13ee" "reference": "a7590727eac59b918274399eea3c16eb01242087"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://files.phpcomposer.com/files/zoujingli/wechat-php-sdk/b80720891d847dfd58cd465c44492a36bb2c13ee.zip", "url": "https://files.phpcomposer.com/files/zoujingli/wechat-php-sdk/a7590727eac59b918274399eea3c16eb01242087.zip",
"reference": "b80720891d847dfd58cd465c44492a36bb2c13ee", "reference": "a7590727eac59b918274399eea3c16eb01242087",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -404,7 +404,7 @@
"keywords": [ "keywords": [
"wechat-php-sdk" "wechat-php-sdk"
], ],
"time": "2017-03-20 03:40:39" "time": "2017-03-27 06:30:12"
} }
], ],
"packages-dev": [], "packages-dev": [],

View File

@ -14,6 +14,7 @@
namespace controller; namespace controller;
use service\WechatService;
use think\Controller; use think\Controller;
class BasicWechat extends Controller { class BasicWechat extends Controller {
@ -91,7 +92,7 @@ class BasicWechat extends Controller {
exit('网页授权失败,请稍候再试!'); exit('网页授权失败,请稍候再试!');
} }
session('openid', $this->openid = $result['openid']); 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()) { if (empty($this->fansinfo['expires_in']) || $this->fansinfo['expires_in'] < time()) {
switch ($result['scope']) { switch ($result['scope']) {
@ -112,8 +113,8 @@ class BasicWechat extends Controller {
$user['expires_in'] = $result['expires_in'] + time() - 100; $user['expires_in'] = $result['expires_in'] + time() - 100;
$user['refresh_token'] = $result['refresh_token']; $user['refresh_token'] = $result['refresh_token'];
$user['access_token'] = $result['access_token']; $user['access_token'] = $result['access_token'];
!FansService::set($user) && exit('微信授权失败 [ save userinfo faild ]'); !WechatService::setFansInfo($user, $wechat->appid) && exit('微信授权失败 [ save userinfo faild ]');
$this->fansinfo = FansService::get($this->openid); $this->fansinfo = WechatService::getFansInfo($this->openid);
} }
empty($this->fansinfo) && exit('获取微信用户信息失败!'); empty($this->fansinfo) && exit('获取微信用户信息失败!');
!!$redirect_url && exit(redirect($redirect_url)->send()); !!$redirect_url && exit(redirect($redirect_url)->send());

View File

@ -158,11 +158,11 @@ class WechatService {
return false; return false;
} }
foreach (array_chunk($result['data']['openid'], 100) as $openids) { 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"); Log::error("获取用户信息失败,$wechat->errMsg");
return false; return false;
} }
foreach ($info['user_info_list'] as $userInfo) { foreach ($info as $userInfo) {
if (false === self::setFansInfo($userInfo, $wechat->appid)) { if (false === self::setFansInfo($userInfo, $wechat->appid)) {
Log::error('更新粉丝信息更新失败!'); Log::error('更新粉丝信息更新失败!');
return false; return false;

2
vendor/autoload.php vendored
View File

@ -4,4 +4,4 @@
require_once __DIR__ . '/composer/autoload_real.php'; require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInitf1ad271c62d17afe200e83a25aa54de5::getLoader(); return ComposerAutoloaderInit2bdb1a4ea6b2ecb142c59aa1efc16953::getLoader();

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer // autoload_real.php @generated by Composer
class ComposerAutoloaderInitf1ad271c62d17afe200e83a25aa54de5 class ComposerAutoloaderInit2bdb1a4ea6b2ecb142c59aa1efc16953
{ {
private static $loader; private static $loader;
@ -19,15 +19,15 @@ class ComposerAutoloaderInitf1ad271c62d17afe200e83a25aa54de5
return self::$loader; 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(); 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'); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
if ($useStaticLoader) { if ($useStaticLoader) {
require_once __DIR__ . '/autoload_static.php'; require_once __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInitf1ad271c62d17afe200e83a25aa54de5::getInitializer($loader)); call_user_func(\Composer\Autoload\ComposerStaticInit2bdb1a4ea6b2ecb142c59aa1efc16953::getInitializer($loader));
} else { } else {
$map = require __DIR__ . '/autoload_namespaces.php'; $map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) { foreach ($map as $namespace => $path) {
@ -48,19 +48,19 @@ class ComposerAutoloaderInitf1ad271c62d17afe200e83a25aa54de5
$loader->register(true); $loader->register(true);
if ($useStaticLoader) { if ($useStaticLoader) {
$includeFiles = Composer\Autoload\ComposerStaticInitf1ad271c62d17afe200e83a25aa54de5::$files; $includeFiles = Composer\Autoload\ComposerStaticInit2bdb1a4ea6b2ecb142c59aa1efc16953::$files;
} else { } else {
$includeFiles = require __DIR__ . '/autoload_files.php'; $includeFiles = require __DIR__ . '/autoload_files.php';
} }
foreach ($includeFiles as $fileIdentifier => $file) { foreach ($includeFiles as $fileIdentifier => $file) {
composerRequiref1ad271c62d17afe200e83a25aa54de5($fileIdentifier, $file); composerRequire2bdb1a4ea6b2ecb142c59aa1efc16953($fileIdentifier, $file);
} }
return $loader; return $loader;
} }
} }
function composerRequiref1ad271c62d17afe200e83a25aa54de5($fileIdentifier, $file) function composerRequire2bdb1a4ea6b2ecb142c59aa1efc16953($fileIdentifier, $file)
{ {
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
require $file; require $file;

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload; namespace Composer\Autoload;
class ComposerStaticInitf1ad271c62d17afe200e83a25aa54de5 class ComposerStaticInit2bdb1a4ea6b2ecb142c59aa1efc16953
{ {
public static $files = array ( public static $files = array (
'9b552a3cc426e3287cc811caefa3cf53' => __DIR__ . '/..' . '/topthink/think-helper/src/helper.php', '9b552a3cc426e3287cc811caefa3cf53' => __DIR__ . '/..' . '/topthink/think-helper/src/helper.php',
@ -274,9 +274,9 @@ class ComposerStaticInitf1ad271c62d17afe200e83a25aa54de5
public static function getInitializer(ClassLoader $loader) public static function getInitializer(ClassLoader $loader)
{ {
return \Closure::bind(function () use ($loader) { return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInitf1ad271c62d17afe200e83a25aa54de5::$prefixLengthsPsr4; $loader->prefixLengthsPsr4 = ComposerStaticInit2bdb1a4ea6b2ecb142c59aa1efc16953::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitf1ad271c62d17afe200e83a25aa54de5::$prefixDirsPsr4; $loader->prefixDirsPsr4 = ComposerStaticInit2bdb1a4ea6b2ecb142c59aa1efc16953::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitf1ad271c62d17afe200e83a25aa54de5::$classMap; $loader->classMap = ComposerStaticInit2bdb1a4ea6b2ecb142c59aa1efc16953::$classMap;
}, null, ClassLoader::class); }, null, ClassLoader::class);
} }

View File

@ -88,18 +88,18 @@
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/zoujingli/wechat-php-sdk.git", "url": "https://github.com/zoujingli/wechat-php-sdk.git",
"reference": "b80720891d847dfd58cd465c44492a36bb2c13ee" "reference": "a7590727eac59b918274399eea3c16eb01242087"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://files.phpcomposer.com/files/zoujingli/wechat-php-sdk/b80720891d847dfd58cd465c44492a36bb2c13ee.zip", "url": "https://files.phpcomposer.com/files/zoujingli/wechat-php-sdk/a7590727eac59b918274399eea3c16eb01242087.zip",
"reference": "b80720891d847dfd58cd465c44492a36bb2c13ee", "reference": "a7590727eac59b918274399eea3c16eb01242087",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=5.3.3" "php": ">=5.3.3"
}, },
"time": "2017-03-20 03:40:39", "time": "2017-03-27 06:30:12",
"type": "project", "type": "project",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {

View File

@ -29,7 +29,7 @@ class Common {
public $postxml; public $postxml;
public $_msg; public $_msg;
public $errCode = 0; public $errCode = 0;
public $errMsg = "no access"; public $errMsg = "";
public $config = array(); public $config = array();
private $_retry = FALSE; private $_retry = FALSE;

View File

@ -139,7 +139,7 @@ class Tools {
* @param array|string $postdata * @param array|string $postdata
* @return bool|mixed * @return bool|mixed
*/ */
static public function httpPost($url, $postdata) { static public function httpPost($url, $data) {
$ch = curl_init(); $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
@ -147,14 +147,15 @@ class Tools {
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POST, TRUE);
if (is_array($postdata)) { if (is_array($data)) {
foreach ($postdata as &$value) { foreach ($data as &$value) {
if (is_string($value) && stripos($value, '@') === 0 && class_exists('CURLFile', FALSE)) { if (is_string($value) && stripos($value, '@') === 0 && class_exists('CURLFile', FALSE)) {
$value = new CURLFile(realpath(trim($value, '@'))); $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); $data = curl_exec($ch);
curl_close($ch); curl_close($ch);
if ($data) { if ($data) {

View File

@ -18,7 +18,7 @@ class WechatUser extends Common {
/* 获取粉丝信息 */ /* 获取粉丝信息 */
const USER_INFO_URL = '/user/info?'; 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?'; const USER_UPDATEREMARK_URL = '/user/info/updateremark?';
@ -112,15 +112,15 @@ class WechatUser extends Common {
* @param string $lang 指定返回语言 * @param string $lang 指定返回语言
* @return bool|mixed * @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()) { if (!$this->access_token && !$this->getAccessToken()) {
return false; return false;
} }
$data = array(); $data = array('user_list' => array());
foreach ($openids as $openid) { foreach (array_unique($openids) as $openid) {
$data[] = array('openid' => $openid, 'lang' => $lang); $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) { if ($result) {
$json = json_decode($result, true); $json = json_decode($result, true);
if (isset($json['errcode']) && !isset($json['user_info_list'])) { if (isset($json['errcode']) && !isset($json['user_info_list'])) {