Files
littleTiger/application/common/logic/saas/wechat/WxCommon.php

188 lines
6.3 KiB
PHP
Raw Normal View History

2019-02-28 19:48:21 +08:00
<?php
/**
* tpshop
* ============================================================================
* 版权所有 2015-2027 深圳搜豹网络科技有限公司,并保留所有权利。
* 网站地址: http://www.tp-shop.cn
* ----------------------------------------------------------------------------
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
* 不允许对程序代码以任何形式任何目的的再发布。
* 如果商业用途务必到官方购买正版授权, 以免引起不必要的法律纠纷.
* ============================================================================
* @author lhb
*/
namespace app\common\logic\saas\wechat;
use app\common\logic\wechat\WxCode;
/**
* 微信小程序第三方平台操作类
*/
class WxCommon
{
protected $errorMsg = '微信默认错误信息'; //错误字符串信息
protected $debug = false; //是否开启调试
protected $isLogFile = true; //是否记录错误到文本
protected $logFile = "./wechat-debug.log"; //记录错误的文本路径
protected $errCode = 0;
public function getError()
{
return $this->errorMsg;
}
protected function setError($error)
{
if (!is_string($error)) {
$error = json_encode($error, JSON_UNESCAPED_UNICODE);
}
$this->errorMsg = $error;
}
public function getErrCode()
{
return $this->errCode;
}
public function isDedug()
{
return $this->debug;
}
public function logDebugFile($content)
{
if (!$this->isLogFile) {
return;
}
if (!is_string($content)) {
$encode = json_encode($content, JSON_UNESCAPED_UNICODE);
$encode && $content = $encode;
}
file_put_contents($this->logFile, date('Y-m-d H:i:s').' -- '.$content."\n", FILE_APPEND);
}
/**
* http请求
* @param string $url
* @param string $method
* @param string|array $fields
* @return string
*/
protected function httpRequest($url, $method = 'GET', $fields = [])
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
$method = strtoupper($method);
if ($method == 'GET' && !empty($fields)) {
is_array($fields) && $fields = http_build_query($fields);
$url = $url . (strpos($url,"?")===false ? "?" : "&") . $fields;
}
curl_setopt($ch, CURLOPT_URL, $url);
if ($method != 'GET') {
$hadFile = false;
curl_setopt($ch, CURLOPT_POST, true);
if (!empty($fields)) {
if (is_array($fields)) {
/* 支持文件上传 */
if (class_exists('\CURLFile')) {
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
foreach ($fields as $key => $value) {
if ($this->isPostHasFile($value)) {
$fields[$key] = new \CURLFile(realpath(ltrim($value, '@')));
$hadFile = true;
}
}
} elseif (defined('CURLOPT_SAFE_UPLOAD')) {
foreach ($fields as $key => $value) {
if ($this->isPostHasFile($value)) {
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
$hadFile = true;
break;
}
}
}
}
$fields = (!$hadFile && is_array($fields)) ? http_build_query($fields) : $fields;
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
}
}
/* 关闭https验证 */
if ("https" == substr($url, 0, 5)) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
$content = curl_exec($ch);
curl_close($ch);
return $content;
}
protected function isPostHasFile($value)
{
if (is_string($value) && strpos($value, '@') === 0 && is_file(realpath(ltrim($value, '@')))) {
return true;
}
return false;
}
/**
* 请求并对结果进行初步检查
* @param string $url 请求的url
* @param string $method 请求的方式
* @param array|string $fields 请求的值
* @param bool $json 是否对结果进行json处理
* @return bool|mixed|string
*/
protected function requestAndCheck($url, $method = 'GET', $fields = [], $json = true)
{
$return = $this->httpRequest($url, $method, $fields);
if ($return === false) {
$this->setError("http请求出错");
return false;
}
$wxdata = json_decode($return, true);
if (!$json && $wxdata === null) {
return $return; //不能解码,如图片
}
$this->logDebugFile(['url' => $url,'fields' => $fields,'wxdata' => $wxdata]);
if (isset($wxdata['errcode']) && $wxdata['errcode'] != 0) {
$this->errCode = $wxdata['errcode'];
$errmsg = WxCode::getItem($wxdata['errcode']);
if ($this->debug) {
$this->setError("微信错误码:{$wxdata['errcode']};<br>中文信息:$errmsg<br>原信息:{$wxdata['errmsg']}<br>链接:$url");
} else {
if ($errmsg === false) {
$errmsg = $wxdata['errmsg'];
if (($pos = strpos($errmsg, ' hint')) > 0) {
$errmsg = substr($errmsg, 0, $pos);
}
}
$this->setError("微信提醒:{$errmsg}[{$wxdata['errcode']}]");
}
return false;
}
if (strtoupper($method) === 'GET' && empty($wxdata)) {
if ($this->debug) {
$this->setError("微信http请求返回为空请求链接$url");
} else {
$this->setError("微信http请求返回为空操作失败");
}
return false;
}
return $wxdata;
}
public function toJson($data)
{
return json_encode($data, JSON_UNESCAPED_UNICODE);
}
}