api/app/util/WechatUtil.php
2019-06-23 22:28:55 +08:00

105 lines
3.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Created by PhpStorm.
* User: yancheng<cheng@love.xiaoyan.me>
* Date: 2019/6/23
* Time: 11:29 AM
*/
namespace app\util;
use think\facade\Config;
use think\facade\Log;
define('WX_SERVER_URL', 'https://api.weixin.qq.com');
define('CODE_2_SESSION', WX_SERVER_URL . '/sns/jscode2session');
define('WX_APP_ID', Config::get('wechat.key'));
define('WX_APP_SECRET', Config::get('wechat.secret'));
class WechatUtil
{
public function __construct()
{
}
public function codeToSession(string $code): array
{
return $this->request(
CODE_2_SESSION, [
'js_code' => $code,
'grant_type' => 'authorization_code'
]
);
}
private function request(string $api, array $params = [], string $method = 'GET')
{
$params['appid'] = WX_APP_ID;
$params['secret'] = WX_APP_SECRET;
$method = strtolower($method);
if ($method == 'get') {
$api .= '?' . http_build_query($params);
}
$ch = null;
try {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $api);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1); //定义是否显示状态头 1显示 0不显示
curl_setopt($ch, CURLINFO_HEADER_OUT, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
//
$postHeader = array(
'Expect: ',
'User-Agent: YCF HTTP API V2',
'Content-Type: application/json;charset=UTF-8'
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $postHeader);
if ($method != 'get') {
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
}
switch ($method) {
case 'get':
break;
case 'post':
curl_setopt($ch, CURLOPT_POST, true);
break;
default:
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
break;
}
$res = curl_exec($ch);
$info = curl_getinfo($ch);
Log::debug("WechatUtil res=>".print_r($res,1));
// Log::debug("WechatUtil info=>".print_r($info,1));
list($header, $res) = explode("\r\n\r\n", $res, 2);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) !== 200) {
throw new \Exception('Server response error' . print_r($header, 1));
}
if ($res && is_string($res)) {
return json_decode($res, 1);
} else {
throw new YCHttpException('Server response data was empty');
}
return $res;
} catch (\Exception $e) {
throw $e;
} finally {
if (null != $ch) {
curl_close($ch);
}
}
return null;
}
}