class
WeiXinTool {
private
$appid
;
private
$appsecret
;
private
$access_token
;
private
$mediaType
=
array
(
'image'
=>
array
(
"jpg"
),
'voice'
=>
array
(
'amr'
,
'MP3'
),
'video'
=>
array
(
'mp4'
),
'thumb'
=>
array
(
"jpg"
));
private
$mediaMaxSize
=
array
(
'image'
=> 131072,
'voice'
=> 262144,
'video'
=> 1048576,
'thumb'
=> 65536);
private
$tem_file_path
=
""
;
const
AUTH_URL =
'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s'
;
const
UPLOAD_MEDIA_URL =
"http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=%s&type=%s"
;
const
GET_MEDIA_URL =
"http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=%s&media_id=%s"
;
const
UPLOAD_NEWS_URL =
"https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=%s"
;
public
function
__construct(
$options
) {
$this
->appid = isset(
$options
[
'appid'
]) ?
$options
[
'appid'
] :
''
;
$this
->appsecret = isset(
$options
[
'appsecret'
]) ?
$options
[
'appsecret'
] :
''
;
$this
->tem_file_path = YYUC_FRAME_PATH . YYUC_PUB .
'/'
. Session::get(
'upath'
);
}
public
function
uploadArticlesToWeiXinServer(
$wid
,
$aid
) {
$m
=
new
Model(
'website_article'
);
$m_pubs
=
new
Model(
'pubs'
);
$m_pubs
->find(
array
(
"id"
=>
$wid
));
$m
->find(
array
(
"wid"
=>
$wid
,
'id'
=>
$aid
));
$res
=
array
();
if
(
$m
->has_id() &&
$m_pubs
->has_id()) {
$res
[] =
$m
->get_model_array();
$m
->votetouser = json_decode(
$m
->votetouser, TRUE);
$articles
=
$m
->votetouser[0];
$m_article
=
new
Model(
'website_article'
);
$ress
=
$m_article
->where(
array
(
'wid'
=>
$wid
,
'id'
=>
$articles
))->list_all_array();
$res
=
array_merge
(
$res
,
$ress
);
}
else
{
$errarr
=
array
();
$errarr
[
'errcode'
] = 44003;
$errarr
[
'errmsg'
] = self::
$errorno
[
$errarr
[
'errcode'
]];
return
$errarr
;
}
$items
=
array
();
foreach
(
$res
as
$k
=>
$v
) {
$mediaid
=
$this
->uploadMedia(
$v
[
'picurl'
]);
if
(
$mediaid
[
'media_id'
]) {
$thumb_media_id
=
$mediaid
[
'media_id'
];
}
else
{
return
$mediaid
;
}
$item
=
array
(
"thumb_media_id"
=>
$thumb_media_id
,
"author"
=>
$m_pubs
->pubun,
"title"
=>
$v
[
'title'
],
"content_source_url"
=> WeiXinTool::complateUrl(WeiSite::parseArticleLinkData(
$v
)),
"content"
=>
$v
[
'reply_content'
],
"digest"
=>
$v
[
'description'
]
);
$items
[] =
$item
;
}
$postData
[
'articles'
] =
$items
;
$error
=
$this
->uploadNews(
$postData
);
return
$error
;
}
public
static
function
getArticleData(
$keyword
) {
global
$wid
;
$m
=
new
Model(
'website_article'
);
$m
->find(
array
(
'wid'
=>
$wid
,
'keyword@~'
=>
" "
.
$keyword
.
" "
));
$res
=
array
();
if
(
$m
->has_id()) {
$res
[] =
array
(
"tit"
=>
$m
->title,
"pic"
=>
$m
->picurl,
"dec"
=>
$m
->description,
"url"
=> WeiSite::parseArticleLinkData(
$m
->get_model_array()));
$m
->votetouser = json_decode(
$m
->votetouser, TRUE);
$articles
=
$m
->votetouser[0];
if
(!
empty
(
$articles
)) {
foreach
(
$articles
as
$v
) {
$m_article
=
new
Model(
'website_article'
);
$m_article
->find(
array
(
'wid'
=>
$wid
,
'id'
=>
$v
));
$res
[] =
array
(
"tit"
=>
$m_article
->title,
"pic"
=>
$m_article
->picurl,
"dec"
=>
$m_article
->description,
"url"
=> WeiSite::parseArticleLinkData(
$m_article
->get_model_array()));
}
}
return
$res
;
}
}
public
function
getAccessToken(
$flag
= FALSE) {
$url
= sprintf(self::AUTH_URL,
$this
->appid,
$this
->appsecret);
$result
= Cache::get(md5(
$url
));
if
(
$flag
||
empty
(
$result
)) {
$result
=
$this
->http_get(
$url
);
$result
= json_decode(
$result
, TRUE);
if
(
$result
[
'errcode'
]) {
return
$result
[
'errcode'
];
}
Cache::set(md5(
$url
),
$result
, 1);
}
$this
->access_token =
$result
[
'access_token'
];
return
true;
}
public
function
uploadMedia(
$file
,
$type
=
"image"
) {
$file
= self::complateUrl(
$file
);
$urlarr
=
parse_url
(
$file
);
$filetype
=
explode
(
"."
,
$urlarr
[
'path'
]);
$filetype
=
strtolower
(
$filetype
[
count
(
$filetype
) - 1]);
$resizeSize
= 100;
if
(!key_exists(
$type
,
$this
->mediaType) || !in_array(
$filetype
,
$this
->mediaType[
$type
])) {
$errarr
=
array
();
$errarr
[
'errcode'
] = 40005;
$errarr
[
'errmsg'
] = self::
$errorno
[
$errarr
[
'errcode'
]];
return
$errarr
;
}
$temp_file
=
$this
->tem_file_path .
'uploadMedia.'
.
$filetype
;
$temp_file_resize
=
$this
->tem_file_path .
'uploadMediaResize.'
.
$filetype
;
file_put_contents
(
$temp_file
, self::http_get(
$file
));
$handle
=
fopen
(
$temp_file
,
"r"
);
$fstat
=
fstat
(
$handle
);
if
(
$fstat
[
'size'
] >
$this
->mediaMaxSize[
$type
]) {
$resizeSize
=
intval
(
$this
->mediaMaxSize[
$type
] /
$fstat
[
'size'
] * 100);
ImageTool::resizeImage(
$temp_file_resize
,
$temp_file
, 400, 400,
$resizeSize
);
$temp_file
=
$temp_file_resize
;
}
$filePath
=
realpath
(
$temp_file
);
$uploadUrl
= sprintf(self::UPLOAD_MEDIA_URL,
$this
->access_token,
$type
);
$postData
=
array
(
"r"
=> time(),
'media'
=>
"@{$filePath}"
);
$result
= self::http_post(
$uploadUrl
,
$postData
);
$result
= json_decode(
$result
, TRUE);
return
$result
;
}
public
function
sendArticles(
$touser
,
$media_id
) {
$errarr
=
array
();
$postData
=
array
();
$postData
[
'mpnews'
] =
array
(
"media_id"
=>
$media_id
);
$postData
[
'msgtype'
] =
"mpnews"
;
if
(
is_array
(
$touser
)) {
$postData
[
'touser'
] =
$touser
;
$url
=
'https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=%s'
;
}
else
{
$group
=
intval
(
$touser
);
$groups
=
$this
->getGroups(true);
if
(key_exists(
$group
,
$groups
[
'list'
])) {
$postData
[
'filter'
] =
array
(
"group_id"
=>
$group
);
}
else
{
$errarr
[
'errcode'
] = 40050;
$errarr
[
'errmsg'
] = self::
$errorno
[
$errarr
[
'errcode'
]];
return
$errarr
;
}
$url
=
'https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=%s'
;
}
$url
= sprintf(
$url
,
$this
->access_token);
$result
= self::http_post(
$url
, self::json_encode(
$postData
));
$result
= json_decode(
$result
, TRUE);
return
$result
;
}
public
function
delSend(
$msgid
) {
$url
=
'https://api.weixin.qq.com/cgi-bin/message/mass/delete?access_token=%s'
;
$url
= sprintf(
$url
,
$this
->access_token);
$postData
=
array
(
'msgid'
=>
$msgid
,
'r'
=> time());
$result
= self::http_post(
$url
, self::json_encode(
$postData
));
$result
= json_decode(
$result
, TRUE);
return
$result
;
}
public
function
uploadNews(
$postData
) {
$uploadUrl
= sprintf(self::UPLOAD_NEWS_URL,
$this
->access_token);
$result
= self::http_post(
$uploadUrl
, self::json_encode(
$postData
));
$result
= json_decode(
$result
, TRUE);
return
$result
;
}
public
function
getAllConnects(
$nextOpenId
=
""
) {
$url
=
'https://api.weixin.qq.com/cgi-bin/user/get?access_token=%s&next_openid=%s'
;
$url
= sprintf(
$url
,
$this
->access_token,
$nextOpenId
);
$result
= self::http_get(
$url
);
$result
= json_decode(
$result
, TRUE);
$count
=
count
(
$result
[
'data'
][
'openid'
]);
$list
=
$result
[
'data'
][
'openid'
];
if
(
$result
[
'data'
][
'openid'
][
$count
- 1] ==
$result
[
'next_openid'
]) {
return
$result
[
'data'
][
'openid'
];
}
else
{
$templist
=
$this
->getAllConnects(
$result
[
'next_openid'
]);
$list
=
array_merge
(
$list
,
$templist
);
return
$list
;
}
}
public
function
getFansInfo(
$openid
) {
$url
=
'https://api.weixin.qq.com/cgi-bin/user/info?access_token=%s&openid=%s&lang=zh_CN'
;
$url
= sprintf(
$url
,
$this
->access_token,
$openid
);
$result
= self::http_get(
$url
);
$result
= json_decode(
$result
, TRUE);
return
$result
;
}
public
function
updateFansGroups(
$openid
,
$groupid
) {
$url
=
'https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token=%s'
;
$url
= sprintf(
$url
,
$this
->access_token);
$postData
=
array
(
"to_groupid"
=>
$groupid
,
'openid'
=>
$openid
);
$result
= self::http_post(
$url
, self::json_encode(
$postData
));
$result
= json_decode(
$result
, TRUE);
$this
->getGroups(true);
return
$result
;
}
public
function
getFansGroupInfo(
$openid
) {
$url
=
'https://api.weixin.qq.com/cgi-bin/groups/getid?access_token=%s'
;
$url
= sprintf(
$url
,
$this
->access_token);
$postData
=
array
(
"r"
=> time(),
'openid'
=>
$openid
);
$result
= self::http_post(
$url
, self::json_encode(
$postData
));
$result
= json_decode(
$result
, TRUE);
return
$result
[
'groupid'
];
}
public
function
getKey(
$key
) {
return
md5(
$this
->appid .
$this
->appsecret .
$key
);
}
public
function
getMedia(
$mediaid
) {
$url
= sprintf(self::GET_MEDIA_URL,
$this
->access_token,
$mediaid
);
$result
= self::http_get(
$url
);
$temp_file
=
$this
->tem_file_path .
'getMedia.jpg'
;
file_put_contents
(
$temp_file
,
$result
);
return
$temp_file
;
}
public
function
getGroups(
$flag
= false) {
$key
=
$this
->appid .
'gasdfev'
.
$this
->appsecret;
$result
= Cache::get(
$key
);
if
(
empty
(
$result
) ||
$flag
) {
$url
=
'https://api.weixin.qq.com/cgi-bin/groups/get?access_token=%s'
;
$url
= sprintf(
$url
,
$this
->access_token);
$result
= self::http_get(
$url
);
$result
= json_decode(
$result
, TRUE);
$temg
=
array
();
$temlist
=
array
();
foreach
(
$result
[
'groups'
]
as
$k
=>
$v
) {
$temg
[
$v
[
'id'
]] =
$v
;
$temlist
[
$v
[
'id'
]] =
$v
[
'name'
];
}
$result
[
'map'
] =
$temg
;
$result
[
'list'
] =
$temlist
;
Cache::set(
$key
,
$result
);
}
return
$result
;
}
public
function
createGroup(
$name
) {
$url
=
'https://api.weixin.qq.com/cgi-bin/groups/create?access_token=%s'
;
$url
= sprintf(
$url
,
$this
->access_token);
$result
= self::http_post(
$url
, self::json_encode(
array
(
'group'
=>
array
(
'name'
=>
$name
))));
$result
= json_decode(
$result
, TRUE);
return
$result
;
}
public
function
modifyGroup(
$id
,
$name
) {
$url
=
'https://api.weixin.qq.com/cgi-bin/groups/update?access_token=%s'
;
$url
= sprintf(
$url
,
$this
->access_token);
$result
= self::http_post(
$url
, self::json_encode(
array
(
'group'
=>
array
(
'id'
=>
$id
,
'name'
=>
$name
))));
$result
= json_decode(
$result
, TRUE);
return
$result
;
}
public
static
function
responseService(
$postObj
) {
global
$wid
;
$fromUsername
=
$postObj
->FromUserName;
$toUsername
=
$postObj
->ToUserName;
$textTpl
= "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[transfer_customer_service]]></MsgType>
</xml>";
$resstr
= sprintf(
$textTpl
,
$fromUsername
,
$toUsername
, time());
echo
$resstr
;
}
public
static
function
response_morearts(
$res
,
$postObj
) {
global
$wid
;
$fromUsername
=
$postObj
->FromUserName;
$toUsername
=
$postObj
->ToUserName;
$textTpl
= "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>%s</ArticleCount>
<Articles>
ITEM
</Articles>
</xml>";
$resstr
= sprintf(
$textTpl
,
$fromUsername
,
$toUsername
, time(),
"news"
,
count
(
$res
));
$item
=
''
;
$subitem
= "<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>";
foreach
(
$res
as
$r
) {
$r
[
'url'
] = self::parseUrl(
$r
[
'url'
]);
$item
.= sprintf(
$subitem
,
$r
[
'tit'
],
$r
[
'des'
], self::complateUrl(
$r
[
'pic'
]), self::replaceToWXUrl(self::complateUrl(
$r
[
'url'
]),
$postObj
));
}
$resstr
=
str_replace
(
'ITEM'
,
$item
,
$resstr
);
echo
$resstr
;
}
public
static
function
complateUrl(
$url
) {
if
(false ===
stristr
(
$url
,
"http://"
)) {//查找http:// 如果不存在
if
(0 ===
strpos
(
$url
,
'/'
)) {
$url
=
substr
(
$url
, 1);
}
$url
=
"http://"
.
$_SERVER
[
'HTTP_HOST'
] .
'/'
.
$url
; //拼接完整路径
}
return
$url
;
}
public
static
function
replaceToWXUrl(
$url
,
$postObj
) {
global
$wechatid
;
return
str_ireplace
(
'fromUsername'
,
$wechatid
,
$url
);
}
public
static
function
parseUrl(
$url
,
$other
=
array
()) {
$url
= self::parseUrlParam(
$url
);
$url
= self::setUrlPublicParam(
$url
);
if
(
is_array
(
$other
) && !
empty
(
$other
)) {
$url
[
'param'
] =
array_merge
(
$url
[
'param'
],
$other
);
}
$url
= self::buildUrlParam(
$url
);
return
$url
;
}
public
static
function
parseUrlParam(
$url
) {
$temp
=
explode
(
"?"
,
$url
);
$url0
=
$temp
[0];
$url1
=
$temp
[1];
$p
=
explode
(
"&"
,
$url1
);
$param
=
array
();
foreach
(
$p
as
$v
) {
$tempp
=
explode
(
"="
,
$v
);
$param
[
$tempp
[0]] =
$tempp
[1];
}
return
array
(
"url"
=>
$url0
,
"param"
=>
$param
);
}
public
static
function
buildUrlParam(
$arr
) {
$url
=
$arr
[
'url'
];
$param
=
$arr
[
'param'
];
$param_arr
=
array
();
foreach
(
$param
as
$k
=>
$v
) {
if
(
$k
==
""
)
continue
;
$param_arr
[] =
$k
.
"="
.
$v
;
}
return
$url
.
"?"
. implode(
"&"
,
$param_arr
) .
"#mp.weixin.qq.com"
;
}
public
static
function
setUrlPublicParam(
$url
) {
global
$uid
,
$wid
,
$wechatid
;
$url
[
'param'
][
'wid'
] =
$wid
;
$url
[
'param'
][
'wxid'
] =
$wechatid
;
$url
[
'param'
][
'wechatid'
] =
$wechatid
;
return
$url
;
}
public
static
$errorno
=
array
(
'-1'
=>
'系统繁忙'
,
'0'
=>
'请求成功'
,
'40001'
=>
'获取access_token时AppSecret错误,或者access_token无效'
,
'40002'
=>
'不合法的凭证类型'
,
'40003'
=>
'不合法的OpenID'
,
'40004'
=>
'不合法的媒体文件类型'
,
'40005'
=>
'不合法的文件类型'
,
'40006'
=>
'不合法的文件大小'
,
'40007'
=>
'不合法的媒体文件id'
,
'40008'
=>
'不合法的消息类型'
,
'40009'
=>
'不合法的图片文件大小'
,
'40010'
=>
'不合法的语音文件大小'
,
'40011'
=>
'不合法的视频文件大小'
,
'40012'
=>
'不合法的缩略图文件大小'
,
'40013'
=>
'不合法的APPID'
,
'40014'
=>
'不合法的access_token'
,
'40015'
=>
'不合法的菜单类型'
,
'40016'
=>
'不合法的按钮个数'
,
'40017'
=>
'不合法的按钮个数'
,
'40018'
=>
'不合法的按钮名字长度'
,
'40019'
=>
'不合法的按钮KEY长度'
,
'40020'
=>
'不合法的按钮URL长度'
,
'40021'
=>
'不合法的菜单版本号'
,
'40022'
=>
'不合法的子菜单级数'
,
'40023'
=>
'不合法的子菜单按钮个数'
,
'40024'
=>
'不合法的子菜单按钮类型'
,
'40025'
=>
'不合法的子菜单按钮名字长度'
,
'40026'
=>
'不合法的子菜单按钮KEY长度'
,
'40027'
=>
'不合法的子菜单按钮URL长度'
,
'40028'
=>
'不合法的自定义菜单使用用户'
,
'40029'
=>
'不合法的oauth_code'
,
'40030'
=>
'不合法的refresh_token'
,
'40031'
=>
'不合法的openid列表'
,
'40032'
=>
'不合法的openid列表长度'
,
'40033'
=>
'不合法的请求字符,不能包含\uxxxx格式的字符'
,
'40035'
=>
'不合法的参数'
,
'40038'
=>
'不合法的请求格式'
,
'40039'
=>
'不合法的URL长度'
,
'40050'
=>
'不合法的分组id'
,
'40051'
=>
'分组名字不合法'
,
'40059'
=>
'不合法的消息id'
,
'41001'
=>
'缺少access_token参数'
,
'41002'
=>
'缺少appid参数'
,
'41003'
=>
'缺少refresh_token参数'
,
'41004'
=>
'缺少secret参数'
,
'41005'
=>
'缺少多媒体文件数据'
,
'41006'
=>
'缺少media_id参数'
,
'41007'
=>
'缺少子菜单数据'
,
'41008'
=>
'缺少oauth code'
,
'41009'
=>
'缺少openid'
,
'42001'
=>
'access_token超时'
,
'42002'
=>
'refresh_token超时'
,
'42003'
=>
'oauth_code超时'
,
'43001'
=>
'需要GET请求'
,
'43002'
=>
'需要POST请求'
,
'43003'
=>
'需要HTTPS请求'
,
'43004'
=>
'需要接收者关注'
,
'43005'
=>
'需要好友关系'
,
'44001'
=>
'多媒体文件为空'
,
'44002'
=>
'POST的数据包为空'
,
'44003'
=>
'图文消息内容为空'
,
'44004'
=>
'文本消息内容为空'
,
'45001'
=>
'多媒体文件大小超过限制'
,
'45002'
=>
'消息内容超过限制'
,
'45003'
=>
'标题字段超过限制'
,
'45004'
=>
'描述字段超过限制'
,
'45005'
=>
'链接字段超过限制'
,
'45006'
=>
'图片链接字段超过限制'
,
'45007'
=>
'语音播放时间超过限制'
,
'45008'
=>
'图文消息超过限制'
,
'45009'
=>
'接口调用超过限制'
,
'45010'
=>
'创建菜单个数超过限制'
,
'45015'
=>
'回复时间超过限制'
,
'45016'
=>
'系统分组,不允许修改'
,
'45017'
=>
'分组名字过长'
,
'45018'
=>
'分组数量超过上限'
,
'46001'
=>
'不存在媒体数据'
,
'46002'
=>
'不存在的菜单版本'
,
'46003'
=>
'不存在的菜单数据'
,
'46004'
=>
'不存在的用户'
,
'47001'
=>
'解析JSON/XML内容错误'
,
'48001'
=>
'api功能未授权'
,
'50001'
=>
'用户未授权该api'
);
public
static
function
http_get(
$url
) {
if
(!function_exists(
'curl_init'
)) {
die
(
'curl 未开启'
);
};
$oCurl
= curl_init();
if
(
stripos
(
$url
,
"https://"
) !== FALSE) {
curl_setopt(
$oCurl
, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt(
$oCurl
, CURLOPT_SSL_VERIFYHOST, FALSE);
}
curl_setopt(
$oCurl
, CURLOPT_URL,
$url
);
curl_setopt(
$oCurl
, CURLOPT_RETURNTRANSFER, 1);
$sContent
= curl_exec(
$oCurl
);
$aStatus
= curl_getinfo(
$oCurl
);
curl_close(
$oCurl
);
if
(
intval
(
$aStatus
[
"http_code"
]) == 200) {
return
$sContent
;
}
else
{
return
false;
}
}
public
static
function
http_post(
$url
,
$param
,
$httpBuildQuery
= false) {
if
(!function_exists(
'curl_init'
)) {
die
(
'curl 未开启'
);
};
$oCurl
= curl_init();
if
(
stripos
(
$url
,
"https://"
) !== FALSE) {
curl_setopt(
$oCurl
, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt(
$oCurl
, CURLOPT_SSL_VERIFYHOST, false);
}
curl_setopt(
$oCurl
, CURLOPT_URL,
$url
);
curl_setopt(
$oCurl
, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(
$oCurl
, CURLOPT_POST, 1);
if
(
$httpBuildQuery
) {
$param
= http_build_query(
$param
);
}
curl_setopt(
$oCurl
, CURLOPT_POSTFIELDS,
$param
);
$sContent
= curl_exec(
$oCurl
);
$aStatus
= curl_getinfo(
$oCurl
);
curl_close(
$oCurl
);
if
(
intval
(
$aStatus
[
"http_code"
]) == 200) {
return
$sContent
;
}
else
{
return
false;
}
}
static
function
json_encode(
$arr
) {
$parts
=
array
();
$is_list
= false;
$keys
=
array_keys
(
$arr
);
$max_length
=
count
(
$arr
) - 1;
if
((
$keys
[0] === 0) && (
$keys
[
$max_length
] ===
$max_length
)) {
$is_list
= true;
for
(
$i
= 0;
$i
<
count
(
$keys
);
$i
++) {
if
(
$i
!=
$keys
[
$i
]) {
$is_list
= false;
break
;
}
}
}
foreach
(
$arr
as
$key
=>
$value
) {
if
(
is_array
(
$value
)) {
if
(
$is_list
)
$parts
[] = self::json_encode(
$value
);
else
$parts
[] =
'"'
.
$key
.
'":'
. self::json_encode(
$value
);
}
else
{
$str
=
''
;
if
(!
$is_list
)
$str
=
'"'
.
$key
.
'":'
;
if
(
is_numeric
(
$value
) &&
$value
< 2000000000)
$str
.=
$value
;
elseif
(
$value
=== false)
$str
.=
'false'
;
elseif
(
$value
=== true)
$str
.=
'true'
;
else
$str
.=
'"'
.
addslashes
(
$value
) .
'"'
;
$parts
[] =
$str
;
}
}
$json
= implode(
','
,
$parts
);
if
(
$is_list
)
return
'['
.
$json
.
']'
;
return
'{'
.
$json
.
'}'
;
}
}