微信公众号开发
<p>微信公众号开发时:关注回复等需要单独开发;</p><p>根据提供的url地址:</p>
<p>1、公众中开启开发配置,</p>
<p>启用AppSecret,设置ip白名单,白名单中加入</p>
<p>然后进行服务器配置</p>
<p>URL地址的填写就是微信公众的消息等访问地址路径;http://www.aa.com/wx/index/index.html</p>
<p>Token是自己设置的,首先要有URL这个路径,</p>
<p>url中的验证:</p>
<div class="cnblogs_code">
<pre><?<span style="color: rgba(0, 0, 0, 1)">php
namespace app\wx\controller;
</span><span style="color: rgba(0, 0, 255, 1)">use</span><span style="color: rgba(0, 0, 0, 1)"> think\Controller;
</span><span style="color: rgba(0, 128, 128, 1)">header</span>("Content-type: text/html; charset=utf-8"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">define</span>("TOKEN","hengyuanjiaoyu"); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">定义识别码 需要跟微信公众平台上保持一致</span>
<span style="color: rgba(0, 0, 255, 1)">class</span> Index <span style="color: rgba(0, 0, 255, 1)">extends</span><span style="color: rgba(0, 0, 0, 1)"> Controller
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> index()
{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 微信验证token</span>
<span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">valid();
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">微信验证</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> valid(){
</span><span style="color: rgba(128, 0, 128, 1)">$echoStr</span> = <span style="color: rgba(128, 0, 128, 1)">$_GET</span>["echostr"<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">checkSignature()){
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(128, 0, 128, 1)">$echoStr</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">exit</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">检查微信签名</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> checkSignature(){
</span><span style="color: rgba(128, 0, 128, 1)">$signature</span> = <span style="color: rgba(128, 0, 128, 1)">$_GET</span>["signature"<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$timestamp</span> = <span style="color: rgba(128, 0, 128, 1)">$_GET</span>["timestamp"<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$nonce</span> = <span style="color: rgba(128, 0, 128, 1)">$_GET</span>["nonce"<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$token</span> =<span style="color: rgba(0, 0, 0, 1)"> TOKEN;
</span><span style="color: rgba(128, 0, 128, 1)">$tmpArr</span> = <span style="color: rgba(0, 0, 255, 1)">array</span>(<span style="color: rgba(128, 0, 128, 1)">$token</span>, <span style="color: rgba(128, 0, 128, 1)">$timestamp</span>, <span style="color: rgba(128, 0, 128, 1)">$nonce</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">sort</span>(<span style="color: rgba(128, 0, 128, 1)">$tmpArr</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$tmpStr</span> = <span style="color: rgba(0, 128, 128, 1)">implode</span>(<span style="color: rgba(128, 0, 128, 1)">$tmpArr</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$tmpStr</span> = <span style="color: rgba(0, 128, 128, 1)">sha1</span>(<span style="color: rgba(128, 0, 128, 1)">$tmpStr</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span>( <span style="color: rgba(128, 0, 128, 1)">$tmpStr</span> == <span style="color: rgba(128, 0, 128, 1)">$signature</span><span style="color: rgba(0, 0, 0, 1)"> ){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
}</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
}</span></pre>
</div>
<p> </p>
<p>消息加密秘钥自动生成,</p>
<p>消息加解密方式选择明文模式就可</p>
<p><img src="https://img2018.cnblogs.com/blog/803621/201908/803621-20190806165207466-991979370.png"></p>
<p> </p>
<p>在地址中进行开发回复:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">require</span>(<span style="color: rgba(0, 128, 128, 1)">dirname</span>(<span style="color: rgba(255, 0, 255, 1)">__FILE__</span>) . '/api.class.php'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">require</span>(<span style="color: rgba(0, 128, 128, 1)">dirname</span>(<span style="color: rgba(255, 0, 255, 1)">__FILE__</span>) . '/wechat.class.php'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$weixin</span> = <span style="color: rgba(0, 0, 255, 1)">new</span> core_lib_wechat(<span style="color: rgba(128, 0, 128, 1)">$weixinconfig</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$weixin</span>-><span style="color: rgba(0, 0, 0, 1)">valid();
</span><span style="color: rgba(128, 0, 128, 1)">$api</span> = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> weixinapi();
</span><span style="color: rgba(128, 0, 128, 1)">$weburl</span> .= <span style="color: rgba(128, 0, 128, 1)">$api</span>-><span style="color: rgba(0, 128, 128, 1)">dir</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$type</span> = <span style="color: rgba(128, 0, 128, 1)">$weixin</span>->getRev()-><span style="color: rgba(0, 0, 0, 1)">getRevType();
</span><span style="color: rgba(128, 0, 128, 1)">$wxid</span> = <span style="color: rgba(128, 0, 128, 1)">$weixin</span>->getRev()-><span style="color: rgba(0, 0, 0, 1)">getRevFrom();
</span><span style="color: rgba(128, 0, 128, 1)">$data</span> = <span style="color: rgba(128, 0, 128, 1)">$weixin</span>-><span style="color: rgba(0, 0, 0, 1)">getRevData();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">上报地理信息</span>
<span style="color: rgba(128, 0, 128, 1)">$loc</span> = <span style="color: rgba(128, 0, 128, 1)">$weixin</span>->getRev()-><span style="color: rgba(0, 0, 0, 1)">getUserLocation();
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$loc</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$api</span>->updatelocation(<span style="color: rgba(128, 0, 128, 1)">$wxid</span>, <span style="color: rgba(128, 0, 128, 1)">$loc</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(128, 0, 128, 1)">$reMsg</span> = ""<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">switch</span> (<span style="color: rgba(128, 0, 128, 1)">$type</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">case</span> 'text':
<span style="color: rgba(128, 0, 128, 1)">$content</span> = <span style="color: rgba(128, 0, 128, 1)">$weixin</span>->getRev()-><span style="color: rgba(0, 0, 0, 1)">getRevContent();
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> 'event':
<span style="color: rgba(128, 0, 128, 1)">$event</span> = <span style="color: rgba(128, 0, 128, 1)">$weixin</span>->getRev()-><span style="color: rgba(0, 0, 0, 1)">getRevEvent();
</span><span style="color: rgba(128, 0, 128, 1)">$content</span> =json_encode(<span style="color: rgba(128, 0, 128, 1)">$event</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> 'image':
<span style="color: rgba(128, 0, 128, 1)">$content</span> = json_encode(<span style="color: rgba(128, 0, 128, 1)">$weixin</span>->getRev()-><span style="color: rgba(0, 0, 0, 1)">getRevPic());
</span><span style="color: rgba(128, 0, 128, 1)">$reMsg</span> = "图片很美!"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">case</span> 'location':
<span style="color: rgba(128, 0, 128, 1)">$content</span> = json_encode(<span style="color: rgba(128, 0, 128, 1)">$weixin</span>->getRev()-><span style="color: rgba(0, 0, 0, 1)">getRevGeo());
</span><span style="color: rgba(128, 0, 128, 1)">$reMsg</span> = "您所在的位置很安全!"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">default</span>:
<span style="color: rgba(128, 0, 128, 1)">$reMsg</span> = <span style="color: rgba(128, 0, 128, 1)">$weixinconfig</span>['help'<span style="color: rgba(0, 0, 0, 1)">];
}
</span><span style="color: rgba(128, 0, 128, 1)">$api</span>->saveMsg(<span style="color: rgba(128, 0, 128, 1)">$content</span>, <span style="color: rgba(128, 0, 128, 1)">$wxid</span>, <span style="color: rgba(128, 0, 128, 1)">$type</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$reMsg</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(128, 0, 128, 1)">$weixin</span>->text(<span style="color: rgba(128, 0, 128, 1)">$reMsg</span>)->reply();<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">公众号回复</span>
<span style="color: rgba(0, 0, 255, 1)">exit</span><span style="color: rgba(0, 0, 0, 1)">;
}</span></pre>
</div>
<p> 微信公众号开发类</p>
<div class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_fdc329f9-6084-427f-9895-ecbea72abadb" class="code_img_opened lazyload" style="display: none" alt="" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_fdc329f9-6084-427f-9895-ecbea72abadb" class="cnblogs_code_hide">
<pre><?<span style="color: rgba(0, 0, 0, 1)">php
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 微信公众平台PHP-SDK, 官方API
*@version 1.2
*usage:
* $options = array(
* 'token'=>'tokenaccesskey', //填写你设定的key
* 'appid'=>'wxdk1234567890', //填写高级调用功能的app id
* 'appsecret'=>'xxxxxxxxxxxxxxxxxxx', //填写高级调用功能的密钥
* );
* $weObj = new Wechat($options);
* $weObj->valid();
* $type = $weObj->getRev()->getRevType();
* switch($type) {
* case Wechat::MSGTYPE_TEXT:
* $weObj->text("hello, I'm wechat")->reply();
* exit;
* break;
* case Wechat::MSGTYPE_EVENT:
* ....
* break;
* case Wechat::MSGTYPE_IMAGE:
* ...
* break;
* default:
* $weObj->text("help info")->reply();
* }
* //获取菜单操作:
* $menu = $weObj->getMenu();
* //设置菜单
* $newmenu =array(
* "button"=>
* array(
* array('type'=>'click','name'=>'最新消息','key'=>'MENU_KEY_NEWS'),
* array('type'=>'view','name'=>'我要搜索','url'=>'http://www.baidu.com'),
* )
* );
* $result = $weObj->createMenu($newmenu);
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> core_lib_wechat
{
</span><span style="color: rgba(0, 0, 255, 1)">const</span> MSGTYPE_TEXT = 'text'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> MSGTYPE_IMAGE = 'image'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> MSGTYPE_LOCATION = 'location'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> MSGTYPE_LINK = 'link'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> MSGTYPE_EVENT = 'event'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> MSGTYPE_MUSIC = 'music'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> MSGTYPE_NEWS = 'news'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> MSGTYPE_VOICE = 'voice'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> MSGTYPE_VIDEO = 'video'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> API_URL_PREFIX = 'https://api.weixin.qq.com/cgi-bin'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> AUTH_URL = '/token?grant_type=client_credential&'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> MENU_CREATE_URL = '/menu/create?'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> MENU_GET_URL = '/menu/get?'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> MENU_DELETE_URL = '/menu/delete?'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> MEDIA_GET_URL = '/media/get?'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> QRCODE_CREATE_URL='/qrcode/create?'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> QR_SCENE = 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> QR_LIMIT_SCENE = 1<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> QRCODE_IMG_URL='https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket='<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> USER_GET_URL='/user/get?'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> USER_INFO_URL='/user/info?'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> GROUP_GET_URL='/groups/get?'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> GROUP_CREATE_URL='/groups/create?'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> GROUP_UPDATE_URL='/groups/update?'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> GROUP_MEMBER_UPDATE_URL='/groups/members/update?'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> CUSTOM_SEND_URL='/message/custom/send?'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> OAUTH_PREFIX = 'https://open.weixin.qq.com/connect/oauth2'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> OAUTH_AUTHORIZE_URL = '/authorize?'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> OAUTH_TOKEN_PREFIX = 'https://api.weixin.qq.com/sns/oauth2'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> OAUTH_TOKEN_URL = '/access_token?'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> OAUTH_REFRESH_URL = '/refresh_token?'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> OAUTH_USERINFO_URL = 'https://api.weixin.qq.com/sns/userinfo?'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(128, 0, 128, 1)">$token</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(128, 0, 128, 1)">$appid</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(128, 0, 128, 1)">$appsecret</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(128, 0, 128, 1)">$access_token</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(128, 0, 128, 1)">$user_token</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(128, 0, 128, 1)">$_msg</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(128, 0, 128, 1)">$_funcflag</span> = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(128, 0, 128, 1)">$_receive</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(128, 0, 128, 1)">$debug</span> =<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(128, 0, 128, 1)">$errCode</span> = 40001<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(128, 0, 128, 1)">$errMsg</span> = "no access"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(128, 0, 128, 1)">$_logcallback</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(128, 0, 128, 1)">$_charset</span> = 'utf-8'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> __construct(<span style="color: rgba(128, 0, 128, 1)">$options</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->token = <span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$options</span>['token'])?<span style="color: rgba(128, 0, 128, 1)">$options</span>['token']:''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->appid = <span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$options</span>['appid'])?<span style="color: rgba(128, 0, 128, 1)">$options</span>['appid']:''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->appsecret = <span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$options</span>['appsecret'])?<span style="color: rgba(128, 0, 128, 1)">$options</span>['appsecret']:''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->debug = <span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$options</span>['debug'])?<span style="color: rgba(128, 0, 128, 1)">$options</span>['debug']:<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->_logcallback = <span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$options</span>['logcallback'])?<span style="color: rgba(128, 0, 128, 1)">$options</span>['logcallback']:<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* For weixin server validation
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> checkSignature()
{
</span><span style="color: rgba(128, 0, 128, 1)">$signature</span> = <span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$_GET</span>["signature"])?<span style="color: rgba(128, 0, 128, 1)">$_GET</span>["signature"]:''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$timestamp</span> = <span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$_GET</span>["timestamp"])?<span style="color: rgba(128, 0, 128, 1)">$_GET</span>["timestamp"]:''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$nonce</span> = <span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$_GET</span>["nonce"])?<span style="color: rgba(128, 0, 128, 1)">$_GET</span>["nonce"]:''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$token</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">token;
</span><span style="color: rgba(128, 0, 128, 1)">$tmpArr</span> = <span style="color: rgba(0, 0, 255, 1)">array</span>(<span style="color: rgba(128, 0, 128, 1)">$token</span>, <span style="color: rgba(128, 0, 128, 1)">$timestamp</span>, <span style="color: rgba(128, 0, 128, 1)">$nonce</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">sort</span>(<span style="color: rgba(128, 0, 128, 1)">$tmpArr</span>,<span style="color: rgba(0, 0, 0, 1)"> SORT_STRING);
</span><span style="color: rgba(128, 0, 128, 1)">$tmpStr</span> = <span style="color: rgba(0, 128, 128, 1)">implode</span>( <span style="color: rgba(128, 0, 128, 1)">$tmpArr</span><span style="color: rgba(0, 0, 0, 1)"> );
</span><span style="color: rgba(128, 0, 128, 1)">$tmpStr</span> = <span style="color: rgba(0, 128, 128, 1)">sha1</span>( <span style="color: rgba(128, 0, 128, 1)">$tmpStr</span><span style="color: rgba(0, 0, 0, 1)"> );
</span><span style="color: rgba(0, 0, 255, 1)">if</span>( <span style="color: rgba(128, 0, 128, 1)">$tmpStr</span> == <span style="color: rgba(128, 0, 128, 1)">$signature</span><span style="color: rgba(0, 0, 0, 1)"> ){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
}</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* For weixin server validation
* @param bool $return 是否返回
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> valid(<span style="color: rgba(128, 0, 128, 1)">$return</span>=<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$echoStr</span> = <span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$_GET</span>["echostr"]) ? <span style="color: rgba(128, 0, 128, 1)">$_GET</span>["echostr"]: ''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$return</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$echoStr</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">checkSignature())
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$echoStr</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
} </span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">checkSignature();
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$echoStr</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">checkSignature())
</span><span style="color: rgba(0, 0, 255, 1)">die</span>(<span style="color: rgba(128, 0, 128, 1)">$echoStr</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">die</span>('no access'<span style="color: rgba(0, 0, 0, 1)">);
}</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">checkSignature())
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">die</span>('no access'<span style="color: rgba(0, 0, 0, 1)">);
}
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 设置发送消息
* @param array $msg 消息数组
* @param bool $append 是否在原消息数组追加
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> Message(<span style="color: rgba(128, 0, 128, 1)">$msg</span> = '',<span style="color: rgba(128, 0, 128, 1)">$append</span> = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 128, 128, 1)">is_null</span>(<span style="color: rgba(128, 0, 128, 1)">$msg</span><span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->_msg =<span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">();
}</span><span style="color: rgba(0, 0, 255, 1)">elseif</span> (<span style="color: rgba(0, 128, 128, 1)">is_array</span>(<span style="color: rgba(128, 0, 128, 1)">$msg</span><span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$append</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->_msg = <span style="color: rgba(0, 128, 128, 1)">array_merge</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_msg,<span style="color: rgba(128, 0, 128, 1)">$msg</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(128, 0, 128, 1)">$this</span>->_msg = <span style="color: rgba(128, 0, 128, 1)">$msg</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">return $this->_msg;</span>
} <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">return $this->_msg;</span>
<span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span>->iconvUtf(<span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">_msg);
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> setFuncFlag(<span style="color: rgba(128, 0, 128, 1)">$flag</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->_funcflag = <span style="color: rgba(128, 0, 128, 1)">$flag</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">function</span> <span style="color: rgba(0, 128, 128, 1)">log</span>(<span style="color: rgba(128, 0, 128, 1)">$log</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$this</span>->debug && <span style="color: rgba(0, 128, 128, 1)">function_exists</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">_logcallback)) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 128, 128, 1)">is_array</span>(<span style="color: rgba(128, 0, 128, 1)">$log</span>)) <span style="color: rgba(128, 0, 128, 1)">$log</span> = <span style="color: rgba(0, 128, 128, 1)">print_r</span>(<span style="color: rgba(128, 0, 128, 1)">$log</span>,<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 128, 128, 1)">call_user_func</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_logcallback,<span style="color: rgba(128, 0, 128, 1)">$log</span><span style="color: rgba(0, 0, 0, 1)">);
}
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取微信服务器发来的信息
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getRev()
{
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive) <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$postStr</span> = <span style="color: rgba(0, 128, 128, 1)">file_get_contents</span>("php://input"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 128, 128, 1)">log</span>(<span style="color: rgba(128, 0, 128, 1)">$postStr</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$postStr</span><span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive = (<span style="color: rgba(0, 0, 255, 1)">array</span>)<span style="color: rgba(0, 128, 128, 1)">simplexml_load_string</span>(<span style="color: rgba(128, 0, 128, 1)">$postStr</span>, 'SimpleXMLElement',<span style="color: rgba(0, 0, 0, 1)"> LIBXML_NOCDATA);
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive = <span style="color: rgba(128, 0, 128, 1)">$this</span>->iconvUtf(<span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">_receive);
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取微信服务器发来的信息
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getRevData()
{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span>->iconvUtf(<span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">_receive);
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取消息发送者
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getRevFrom() {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['FromUserName'<span style="color: rgba(0, 0, 0, 1)">]))
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['FromUserName'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取消息接受者
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getRevTo() {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['ToUserName'<span style="color: rgba(0, 0, 0, 1)">]))
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['ToUserName'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取接收消息的类型
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getRevType() {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['MsgType'<span style="color: rgba(0, 0, 0, 1)">]))
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['MsgType'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取消息ID
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getRevID() {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['MsgId'<span style="color: rgba(0, 0, 0, 1)">]))
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['MsgId'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取消息发送时间
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getRevCtime() {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['CreateTime'<span style="color: rgba(0, 0, 0, 1)">]))
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['CreateTime'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取接收消息内容正文
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getRevContent(){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Content'<span style="color: rgba(0, 0, 0, 1)">]))
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Content'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Recognition'])) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取语音识别文字内容,需申请开通</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Recognition'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取接收消息图片
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getRevPic(){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['PicUrl'<span style="color: rgba(0, 0, 0, 1)">]))
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['PicUrl'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取接收消息链接
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getRevLink(){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Url'<span style="color: rgba(0, 0, 0, 1)">])){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>'url'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Url'],
'title'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Title'],
'description'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Description'<span style="color: rgba(0, 0, 0, 1)">]
);
} </span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取接收地理位置
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getRevGeo(){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Location_X'<span style="color: rgba(0, 0, 0, 1)">])){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>'x'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Location_X'],
'y'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Location_Y'],
'scale'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Scale'],
'label'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Label'<span style="color: rgba(0, 0, 0, 1)">]
);
} </span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取接收事件推送
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getRevEvent(){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Event'<span style="color: rgba(0, 0, 0, 1)">])){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>'event'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Event'],
'key'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['EventKey'],
'Latitude'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Latitude'],
'Longitude'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Longitude'],
'Precision'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Precision'],<span style="color: rgba(0, 0, 0, 1)">
);
} </span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取接收语言推送
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getRevVoice(){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['MediaId'<span style="color: rgba(0, 0, 0, 1)">])){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>'mediaid'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['MediaId'],
'format'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Format'],<span style="color: rgba(0, 0, 0, 1)">
);
} </span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取接收视频推送
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getRevVideo(){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['MediaId'<span style="color: rgba(0, 0, 0, 1)">])){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>'mediaid'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['MediaId'],
'thumbmediaid'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['ThumbMediaId'<span style="color: rgba(0, 0, 0, 1)">]
);
} </span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取接收TICKET
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getRevTicket(){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Ticket'<span style="color: rgba(0, 0, 0, 1)">])){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Ticket'<span style="color: rgba(0, 0, 0, 1)">];
} </span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">function</span> xmlSafeStr(<span style="color: rgba(128, 0, 128, 1)">$str</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> '<!/",'',<span style="color: rgba(128, 0, 128, 1)">$str</span>).']]>'<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 数据XML编码
* @param mixed $data 数据
* @return string
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">function</span> data_to_xml(<span style="color: rgba(128, 0, 128, 1)">$data</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$xml</span> = ''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span> (<span style="color: rgba(128, 0, 128, 1)">$data</span> <span style="color: rgba(0, 0, 255, 1)">as</span> <span style="color: rgba(128, 0, 128, 1)">$key</span> => <span style="color: rgba(128, 0, 128, 1)">$val</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">is_numeric</span>(<span style="color: rgba(128, 0, 128, 1)">$key</span>) && <span style="color: rgba(128, 0, 128, 1)">$key</span> = "item id=\"<span style="color: rgba(128, 0, 128, 1)">$key</span>\""<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$xml</span> .="<<span style="color: rgba(128, 0, 128, 1)">$key</span>>"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$xml</span> .=( <span style="color: rgba(0, 128, 128, 1)">is_array</span>(<span style="color: rgba(128, 0, 128, 1)">$val</span>) || <span style="color: rgba(0, 128, 128, 1)">is_object</span>(<span style="color: rgba(128, 0, 128, 1)">$val</span>)) ? self::data_to_xml(<span style="color: rgba(128, 0, 128, 1)">$val</span>): self::xmlSafeStr(<span style="color: rgba(128, 0, 128, 1)">$val</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">list</span>(<span style="color: rgba(128, 0, 128, 1)">$key</span>, ) = <span style="color: rgba(0, 128, 128, 1)">explode</span>(' ', <span style="color: rgba(128, 0, 128, 1)">$key</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$xml</span> .="</<span style="color: rgba(128, 0, 128, 1)">$key</span>>"<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$xml</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* XML编码
* @param mixed $data 数据
* @param string $root 根节点名
* @param string $item 数字索引的子节点名
* @param string $attr 根节点属性
* @param string $id 数字索引子节点key转换的属性名
* @param string $encoding 数据编码
* @return string
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> xml_encode(<span style="color: rgba(128, 0, 128, 1)">$data</span>, <span style="color: rgba(128, 0, 128, 1)">$root</span>='xml', <span style="color: rgba(128, 0, 128, 1)">$item</span>='item', <span style="color: rgba(128, 0, 128, 1)">$attr</span>='', <span style="color: rgba(128, 0, 128, 1)">$id</span>='id', <span style="color: rgba(128, 0, 128, 1)">$encoding</span>='utf-8'<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">is_array</span>(<span style="color: rgba(128, 0, 128, 1)">$attr</span><span style="color: rgba(0, 0, 0, 1)">)){
</span><span style="color: rgba(128, 0, 128, 1)">$_attr</span> = <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span> (<span style="color: rgba(128, 0, 128, 1)">$attr</span> <span style="color: rgba(0, 0, 255, 1)">as</span> <span style="color: rgba(128, 0, 128, 1)">$key</span> => <span style="color: rgba(128, 0, 128, 1)">$value</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$_attr</span>[] = "{<span style="color: rgba(128, 0, 128, 1)">$key</span>}=\"{<span style="color: rgba(128, 0, 128, 1)">$value</span>}\""<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(128, 0, 128, 1)">$attr</span> = <span style="color: rgba(0, 128, 128, 1)">implode</span>(' ', <span style="color: rgba(128, 0, 128, 1)">$_attr</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(128, 0, 128, 1)">$attr</span> = <span style="color: rgba(0, 128, 128, 1)">trim</span>(<span style="color: rgba(128, 0, 128, 1)">$attr</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$attr</span> = <span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$attr</span>) ? '' : " {<span style="color: rgba(128, 0, 128, 1)">$attr</span>}"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$xml</span> = "<{<span style="color: rgba(128, 0, 128, 1)">$root</span>}{<span style="color: rgba(128, 0, 128, 1)">$attr</span>}>"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$xml</span> .= self::data_to_xml(<span style="color: rgba(128, 0, 128, 1)">$data</span>, <span style="color: rgba(128, 0, 128, 1)">$item</span>, <span style="color: rgba(128, 0, 128, 1)">$id</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$xml</span> .= "</{<span style="color: rgba(128, 0, 128, 1)">$root</span>}>"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$xml</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 设置回复消息
* Examle: $obj->text('hello')->reply();
* @param string $text
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> text(<span style="color: rgba(128, 0, 128, 1)">$text</span>=''<span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$FuncFlag</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->_funcflag ? 1 : 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$msg</span> = <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>'ToUserName' => <span style="color: rgba(128, 0, 128, 1)">$this</span>->getRevFrom(),
'FromUserName'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->getRevTo(),
'MsgType'=>self::MSGTYPE_TEXT,
'Content'=><span style="color: rgba(128, 0, 128, 1)">$text</span>,
'CreateTime'=><span style="color: rgba(0, 128, 128, 1)">time</span>(),
'FuncFlag'=><span style="color: rgba(128, 0, 128, 1)">$FuncFlag</span><span style="color: rgba(0, 0, 0, 1)">
);
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->Message(<span style="color: rgba(128, 0, 128, 1)">$msg</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 设置回复消息
* Examle: $obj->text('hello')->reply();
* @param string $text
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> image(<span style="color: rgba(128, 0, 128, 1)">$media_id</span>=''<span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$FuncFlag</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->_funcflag ? 1 : 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$msg</span> = <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>'ToUserName' => <span style="color: rgba(128, 0, 128, 1)">$this</span>->getRevFrom(),
'FromUserName'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->getRevTo(),
'CreateTime'=><span style="color: rgba(0, 128, 128, 1)">time</span>(),
'MsgType'=>self::MSGTYPE_IMAGE,
'Image'=><span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>'MediaId'=><span style="color: rgba(128, 0, 128, 1)">$media_id</span><span style="color: rgba(0, 0, 0, 1)">
)</span>,
'FuncFlag'=><span style="color: rgba(128, 0, 128, 1)">$FuncFlag</span><span style="color: rgba(0, 0, 0, 1)">
);
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->Message(<span style="color: rgba(128, 0, 128, 1)">$msg</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 设置回复音乐
* @param string $title
* @param string $desc
* @param string $musicurl
* @param string $hgmusicurl
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> music(<span style="color: rgba(128, 0, 128, 1)">$title</span>,<span style="color: rgba(128, 0, 128, 1)">$desc</span>,<span style="color: rgba(128, 0, 128, 1)">$musicurl</span>,<span style="color: rgba(128, 0, 128, 1)">$hgmusicurl</span>=''<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$FuncFlag</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->_funcflag ? 1 : 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$msg</span> = <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>'ToUserName' => <span style="color: rgba(128, 0, 128, 1)">$this</span>->getRevFrom(),
'FromUserName'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->getRevTo(),
'CreateTime'=><span style="color: rgba(0, 128, 128, 1)">time</span>(),
'MsgType'=>self::MSGTYPE_MUSIC,
'Music'=><span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>'Title'=><span style="color: rgba(128, 0, 128, 1)">$title</span>,
'Description'=><span style="color: rgba(128, 0, 128, 1)">$desc</span>,
'MusicUrl'=><span style="color: rgba(128, 0, 128, 1)">$musicurl</span>,
'HQMusicUrl'=><span style="color: rgba(128, 0, 128, 1)">$hgmusicurl</span><span style="color: rgba(0, 0, 0, 1)">
)</span>,
'FuncFlag'=><span style="color: rgba(128, 0, 128, 1)">$FuncFlag</span><span style="color: rgba(0, 0, 0, 1)">
);
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->Message(<span style="color: rgba(128, 0, 128, 1)">$msg</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 设置回复图文
* @param array $newsData
* 数组结构:
*array(
* =>array(
* 'Title'=>'msg title',
* 'Description'=>'summary text',
* 'PicUrl'=>'http://www.domain.com/1.jpg',
* 'Url'=>'http://www.domain.com/1.html'
* ),
* =>....
*)
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> news(<span style="color: rgba(128, 0, 128, 1)">$newsData</span>=<span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">())
{
</span><span style="color: rgba(128, 0, 128, 1)">$FuncFlag</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->_funcflag ? 1 : 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$count</span> = <span style="color: rgba(0, 128, 128, 1)">count</span>(<span style="color: rgba(128, 0, 128, 1)">$newsData</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$msg</span> = <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>'ToUserName' => <span style="color: rgba(128, 0, 128, 1)">$this</span>->getRevFrom(),
'FromUserName'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->getRevTo(),
'MsgType'=>self::MSGTYPE_NEWS,
'CreateTime'=><span style="color: rgba(0, 128, 128, 1)">time</span>(),
'ArticleCount'=><span style="color: rgba(128, 0, 128, 1)">$count</span>,
'Articles'=><span style="color: rgba(128, 0, 128, 1)">$newsData</span>,
'FuncFlag'=><span style="color: rgba(128, 0, 128, 1)">$FuncFlag</span><span style="color: rgba(0, 0, 0, 1)">
);
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->Message(<span style="color: rgba(128, 0, 128, 1)">$msg</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
*
* 回复微信服务器, 此函数支持链式操作
* @example $this->text('msg tips')->reply();
* @param string $msg 要发送的信息, 默认取$this->_msg
* @param bool $return 是否返回信息而不抛出到浏览器 默认:否
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> reply(<span style="color: rgba(128, 0, 128, 1)">$msg</span>=<span style="color: rgba(0, 0, 255, 1)">array</span>(),<span style="color: rgba(128, 0, 128, 1)">$return</span> = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$msg</span><span style="color: rgba(0, 0, 0, 1)">))
</span><span style="color: rgba(128, 0, 128, 1)">$msg</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">_msg;
</span><span style="color: rgba(128, 0, 128, 1)">$xmldata</span>=<span style="color: rgba(128, 0, 128, 1)">$this</span>->xml_encode(<span style="color: rgba(128, 0, 128, 1)">$msg</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 128, 128, 1)">log</span>(<span style="color: rgba(128, 0, 128, 1)">$xmldata</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$return</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$xmldata</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(128, 0, 128, 1)">$xmldata</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* GET 请求
* @param string $url
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">function</span> http_get(<span style="color: rgba(128, 0, 128, 1)">$url</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span> =<span style="color: rgba(0, 0, 0, 1)"> curl_init();
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">stripos</span>(<span style="color: rgba(128, 0, 128, 1)">$url</span>,"https://")!==<span style="color: rgba(0, 0, 255, 1)">FALSE</span><span style="color: rgba(0, 0, 0, 1)">){
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_SSL_VERIFYPEER, <span style="color: rgba(0, 0, 255, 1)">FALSE</span><span style="color: rgba(0, 0, 0, 1)">);
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_SSL_VERIFYHOST, <span style="color: rgba(0, 0, 255, 1)">FALSE</span><span style="color: rgba(0, 0, 0, 1)">);
}
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_URL, <span style="color: rgba(128, 0, 128, 1)">$url</span><span style="color: rgba(0, 0, 0, 1)">);
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_RETURNTRANSFER, 1<span style="color: rgba(0, 0, 0, 1)"> );
</span><span style="color: rgba(128, 0, 128, 1)">$sContent</span> = curl_exec(<span style="color: rgba(128, 0, 128, 1)">$oCurl</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$aStatus</span> = curl_getinfo(<span style="color: rgba(128, 0, 128, 1)">$oCurl</span><span style="color: rgba(0, 0, 0, 1)">);
curl_close(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">intval</span>(<span style="color: rgba(128, 0, 128, 1)">$aStatus</span>["http_code"])==200<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$sContent</span><span style="color: rgba(0, 0, 0, 1)">;
}</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* POST 请求
* @param string $url
* @param array $param
* @return string content
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">function</span> http_post(<span style="color: rgba(128, 0, 128, 1)">$url</span>,<span style="color: rgba(128, 0, 128, 1)">$param</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span> =<span style="color: rgba(0, 0, 0, 1)"> curl_init();
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">stripos</span>(<span style="color: rgba(128, 0, 128, 1)">$url</span>,"https://")!==<span style="color: rgba(0, 0, 255, 1)">FALSE</span><span style="color: rgba(0, 0, 0, 1)">){
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_SSL_VERIFYPEER, <span style="color: rgba(0, 0, 255, 1)">FALSE</span><span style="color: rgba(0, 0, 0, 1)">);
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_SSL_VERIFYHOST, <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 128, 128, 1)">is_string</span>(<span style="color: rgba(128, 0, 128, 1)">$param</span><span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(128, 0, 128, 1)">$strPOST</span> = <span style="color: rgba(128, 0, 128, 1)">$param</span><span style="color: rgba(0, 0, 0, 1)">;
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(128, 0, 128, 1)">$aPOST</span> = <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span>(<span style="color: rgba(128, 0, 128, 1)">$param</span> <span style="color: rgba(0, 0, 255, 1)">as</span> <span style="color: rgba(128, 0, 128, 1)">$key</span>=><span style="color: rgba(128, 0, 128, 1)">$val</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(128, 0, 128, 1)">$aPOST</span>[] = <span style="color: rgba(128, 0, 128, 1)">$key</span>."=".<span style="color: rgba(0, 128, 128, 1)">urlencode</span>(<span style="color: rgba(128, 0, 128, 1)">$val</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(128, 0, 128, 1)">$strPOST</span> =<span style="color: rgba(0, 128, 128, 1)">join</span>("&", <span style="color: rgba(128, 0, 128, 1)">$aPOST</span><span style="color: rgba(0, 0, 0, 1)">);
}
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_URL, <span style="color: rgba(128, 0, 128, 1)">$url</span><span style="color: rgba(0, 0, 0, 1)">);
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_RETURNTRANSFER, 1<span style="color: rgba(0, 0, 0, 1)"> );
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_POST,<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_POSTFIELDS,<span style="color: rgba(128, 0, 128, 1)">$strPOST</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$sContent</span> = curl_exec(<span style="color: rgba(128, 0, 128, 1)">$oCurl</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$aStatus</span> = curl_getinfo(<span style="color: rgba(128, 0, 128, 1)">$oCurl</span><span style="color: rgba(0, 0, 0, 1)">);
curl_close(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">intval</span>(<span style="color: rgba(128, 0, 128, 1)">$aStatus</span>["http_code"])==200<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$sContent</span><span style="color: rgba(0, 0, 0, 1)">;
}</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 通用auth验证方法,暂时仅用于菜单更新操作
* @param string $appid
* @param string $appsecret
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> checkAuth(<span style="color: rgba(128, 0, 128, 1)">$appid</span>='',<span style="color: rgba(128, 0, 128, 1)">$appsecret</span>=''<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$appid</span> || !<span style="color: rgba(128, 0, 128, 1)">$appsecret</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$appid</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">appid;
</span><span style="color: rgba(128, 0, 128, 1)">$appsecret</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">appsecret;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">TODO: get the cache access_token</span>
<span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http_get(self::API_URL_PREFIX.self::AUTH_URL.'appid='.<span style="color: rgba(128, 0, 128, 1)">$appid</span>.'&secret='.<span style="color: rgba(128, 0, 128, 1)">$appsecret</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$result</span>,<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$json</span> || <span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">])) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errCode = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errMsg = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errmsg'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token = <span style="color: rgba(128, 0, 128, 1)">$json</span>['access_token'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$expire</span> = <span style="color: rgba(128, 0, 128, 1)">$json</span>['expires_in'] ? <span style="color: rgba(0, 128, 128, 1)">intval</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['expires_in'])-100 : 3600<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">TODO: cache access_token</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">access_token;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 删除验证数据
* @param string $appid
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> resetAuth(<span style="color: rgba(128, 0, 128, 1)">$appid</span>=''<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token = ''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">TODO: remove cache</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 微信api不支持中文转义的json结构
* @param array $arr
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">function</span> json_encode(<span style="color: rgba(128, 0, 128, 1)">$arr</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$parts</span> = <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)"> ();
</span><span style="color: rgba(128, 0, 128, 1)">$is_list</span> = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Find out if the given array is a numerical array</span>
<span style="color: rgba(128, 0, 128, 1)">$keys</span> = <span style="color: rgba(0, 128, 128, 1)">array_keys</span> ( <span style="color: rgba(128, 0, 128, 1)">$arr</span><span style="color: rgba(0, 0, 0, 1)"> );
</span><span style="color: rgba(128, 0, 128, 1)">$max_length</span> = <span style="color: rgba(0, 128, 128, 1)">count</span> ( <span style="color: rgba(128, 0, 128, 1)">$arr</span> ) - 1<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">if</span> ((<span style="color: rgba(128, 0, 128, 1)">$keys</span> === 0) && (<span style="color: rgba(128, 0, 128, 1)">$keys</span> [<span style="color: rgba(128, 0, 128, 1)">$max_length</span>] === <span style="color: rgba(128, 0, 128, 1)">$max_length</span> )) { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">See if the first key is 0 and last key is length - 1</span>
<span style="color: rgba(128, 0, 128, 1)">$is_list</span> = <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(128, 0, 128, 1)">$i</span> = 0; <span style="color: rgba(128, 0, 128, 1)">$i</span> < <span style="color: rgba(0, 128, 128, 1)">count</span> ( <span style="color: rgba(128, 0, 128, 1)">$keys</span> ); <span style="color: rgba(128, 0, 128, 1)">$i</span> ++) { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">See if each key correspondes to its position</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$i</span> != <span style="color: rgba(128, 0, 128, 1)">$keys</span> [<span style="color: rgba(128, 0, 128, 1)">$i</span>]) { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">A key fails at position check.</span>
<span style="color: rgba(128, 0, 128, 1)">$is_list</span> = <span style="color: rgba(0, 0, 255, 1)">false</span>; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">It is an associative array.</span>
<span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
}
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span> ( <span style="color: rgba(128, 0, 128, 1)">$arr</span> <span style="color: rgba(0, 0, 255, 1)">as</span> <span style="color: rgba(128, 0, 128, 1)">$key</span> => <span style="color: rgba(128, 0, 128, 1)">$value</span><span style="color: rgba(0, 0, 0, 1)"> ) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 128, 128, 1)">is_array</span> ( <span style="color: rgba(128, 0, 128, 1)">$value</span> )) { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Custom handling for arrays</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$is_list</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(128, 0, 128, 1)">$parts</span> [] = self::json_encode ( <span style="color: rgba(128, 0, 128, 1)">$value</span> ); <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> :RECURSION: </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(128, 0, 128, 1)">$parts</span> [] = '"' . <span style="color: rgba(128, 0, 128, 1)">$key</span> . '":' . self::json_encode ( <span style="color: rgba(128, 0, 128, 1)">$value</span> ); <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> :RECURSION: </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(128, 0, 128, 1)">$str</span> = ''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (! <span style="color: rgba(128, 0, 128, 1)">$is_list</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(128, 0, 128, 1)">$str</span> = '"' . <span style="color: rgba(128, 0, 128, 1)">$key</span> . '":'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Custom handling for multiple data types</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 128, 128, 1)">is_numeric</span> ( <span style="color: rgba(128, 0, 128, 1)">$value</span> ) && <span style="color: rgba(128, 0, 128, 1)">$value</span><2000000000<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(128, 0, 128, 1)">$str</span> .= <span style="color: rgba(128, 0, 128, 1)">$value</span>; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Numbers</span>
<span style="color: rgba(0, 0, 255, 1)">elseif</span> (<span style="color: rgba(128, 0, 128, 1)">$value</span> === <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(128, 0, 128, 1)">$str</span> .= 'false'; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">The booleans</span>
<span style="color: rgba(0, 0, 255, 1)">elseif</span> (<span style="color: rgba(128, 0, 128, 1)">$value</span> === <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(128, 0, 128, 1)">$str</span> .= 'true'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(128, 0, 128, 1)">$str</span> .= '"' . <span style="color: rgba(0, 128, 128, 1)">addslashes</span> ( <span style="color: rgba(128, 0, 128, 1)">$value</span> ) . '"'; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">All other things
// :TODO: Is there any more datatype we should be in the lookout for? (Object?)</span>
<span style="color: rgba(128, 0, 128, 1)">$parts</span> [] = <span style="color: rgba(128, 0, 128, 1)">$str</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = <span style="color: rgba(0, 128, 128, 1)">implode</span> ( ',', <span style="color: rgba(128, 0, 128, 1)">$parts</span><span style="color: rgba(0, 0, 0, 1)"> );
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$is_list</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">return</span> '[' . <span style="color: rgba(128, 0, 128, 1)">$json</span> . ']'; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Return numerical JSON</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> '{' . <span style="color: rgba(128, 0, 128, 1)">$json</span> . '}'; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Return associative JSON</span>
<span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 创建菜单
* @param array $data 菜单数组数据
* example:
{
"button":[
{
"type":"click",
"name":"今日歌曲",
"key":"MENU_KEY_MUSIC"
},
{
"type":"view",
"name":"歌手简介",
"url":"http://www.qq.com/"
},
{
"name":"菜单",
"sub_button":[
{
"type":"click",
"name":"hello word",
"key":"MENU_KEY_MENU"
},
{
"type":"click",
"name":"赞一下我们",
"key":"MENU_KEY_GOOD"
}]
}]
}
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> createMenu(<span style="color: rgba(128, 0, 128, 1)">$data</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token && !<span style="color: rgba(128, 0, 128, 1)">$this</span>->checkAuth()) <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http_post(self::API_URL_PREFIX.self::MENU_CREATE_URL.'access_token='.<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token,self::json_encode(<span style="color: rgba(128, 0, 128, 1)">$data</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$result</span>,<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$json</span> || !<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">])) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errCode = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errMsg = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errmsg'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取菜单
* @return array('menu'=>array(....s))
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getMenu(){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token && !<span style="color: rgba(128, 0, 128, 1)">$this</span>->checkAuth()) <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http_get(self::API_URL_PREFIX.self::MENU_GET_URL.'access_token='.<span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">access_token);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$result</span>,<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$json</span> || <span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">])) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errCode = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errMsg = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errmsg'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$json</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 删除菜单
* @return boolean
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> deleteMenu(){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token && !<span style="color: rgba(128, 0, 128, 1)">$this</span>->checkAuth()) <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http_get(self::API_URL_PREFIX.self::MENU_DELETE_URL.'access_token='.<span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">access_token);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$result</span>,<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$json</span> || !<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">])) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errCode = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errMsg = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errmsg'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 根据媒体文件ID获取媒体文件
* @param string $media_id 媒体文件id
* @return raw data
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> getMedia(<span style="color: rgba(128, 0, 128, 1)">$media_id</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token && !<span style="color: rgba(128, 0, 128, 1)">$this</span>->checkAuth()) <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http_get(self::API_URL_PREFIX.self::MEDIA_GET_URL.'access_token='.<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token.'&media_id='.<span style="color: rgba(128, 0, 128, 1)">$media_id</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$result</span>,<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">])) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errCode = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errMsg = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errmsg'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$json</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 创建二维码ticket
* @param int $scene_id 自定义追踪id
* @param int $type 0:临时二维码;1:永久二维码(此时expire参数无效)
* @param int $expire 临时二维码有效期,最大为1800秒
* @return array('ticket'=>'qrcode字串','expire_seconds'=>1800)
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> getQRCode(<span style="color: rgba(128, 0, 128, 1)">$scene_id</span>,<span style="color: rgba(128, 0, 128, 1)">$type</span>=0,<span style="color: rgba(128, 0, 128, 1)">$expire</span>=1800<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token && !<span style="color: rgba(128, 0, 128, 1)">$this</span>->checkAuth()) <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$data</span> = <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>'action_name'=><span style="color: rgba(128, 0, 128, 1)">$type</span>?"QR_LIMIT_SCENE":"QR_SCENE",
'expire_seconds'=><span style="color: rgba(128, 0, 128, 1)">$expire</span>,
'action_info'=><span style="color: rgba(0, 0, 255, 1)">array</span>('scene'=><span style="color: rgba(0, 0, 255, 1)">array</span>('scene_id'=><span style="color: rgba(128, 0, 128, 1)">$scene_id</span><span style="color: rgba(0, 0, 0, 1)">))
);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$type</span> == 1<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">unset</span>(<span style="color: rgba(128, 0, 128, 1)">$data</span>['expire_seconds'<span style="color: rgba(0, 0, 0, 1)">]);
}
</span><span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http_post(self::API_URL_PREFIX.self::QRCODE_CREATE_URL.'access_token='.<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token,self::json_encode(<span style="color: rgba(128, 0, 128, 1)">$data</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$result</span>,<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$json</span> || !<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">])) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errCode = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errMsg = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errmsg'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$json</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取二维码图片
* @param string $ticket 传入由getQRCode方法生成的ticket参数
* @return string url 返回http地址
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> getQRUrl(<span style="color: rgba(128, 0, 128, 1)">$ticket</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> self::QRCODE_IMG_URL.<span style="color: rgba(128, 0, 128, 1)">$ticket</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 批量获取关注用户列表
* @param unknown $next_openid
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> getUserList(<span style="color: rgba(128, 0, 128, 1)">$next_openid</span>=''<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token && !<span style="color: rgba(128, 0, 128, 1)">$this</span>->checkAuth()) <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http_get(self::API_URL_PREFIX.self::USER_GET_URL.'access_token='.<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token.'&next_openid='.<span style="color: rgba(128, 0, 128, 1)">$next_openid</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$result</span>,<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">])) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errCode = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errMsg = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errmsg'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$json</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取关注者详细信息
* @param string $openid
* @return array
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> getUserInfo(<span style="color: rgba(128, 0, 128, 1)">$openid</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token && !<span style="color: rgba(128, 0, 128, 1)">$this</span>->checkAuth()) <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http_get(self::API_URL_PREFIX.self::USER_INFO_URL.'access_token='.<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token.'&openid='.<span style="color: rgba(128, 0, 128, 1)">$openid</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$result</span>,<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">])) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errCode = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errMsg = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errmsg'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(128, 0, 128, 1)">$json</span>['access_token'] = <span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">access_token;
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$json</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取用户分组列表
* @return boolean|array
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getGroup(){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token && !<span style="color: rgba(128, 0, 128, 1)">$this</span>->checkAuth()) <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http_get(self::API_URL_PREFIX.self::GROUP_GET_URL.'access_token='.<span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">access_token);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$result</span>,<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">])) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errCode = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errMsg = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errmsg'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$json</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 新增自定分组
* @param string $name 分组名称
* @return boolean|array
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> createGroup(<span style="color: rgba(128, 0, 128, 1)">$name</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token && !<span style="color: rgba(128, 0, 128, 1)">$this</span>->checkAuth()) <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$data</span> = <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>'group'=><span style="color: rgba(0, 0, 255, 1)">array</span>('name'=><span style="color: rgba(128, 0, 128, 1)">$name</span><span style="color: rgba(0, 0, 0, 1)">)
);
</span><span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http_post(self::API_URL_PREFIX.self::GROUP_CREATE_URL.'access_token='.<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token,self::json_encode(<span style="color: rgba(128, 0, 128, 1)">$data</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$result</span>,<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$json</span> || !<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">])) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errCode = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errMsg = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errmsg'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$json</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 更改分组名称
* @param int $groupid 分组id
* @param string $name 分组名称
* @return boolean|array
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> updateGroup(<span style="color: rgba(128, 0, 128, 1)">$groupid</span>,<span style="color: rgba(128, 0, 128, 1)">$name</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token && !<span style="color: rgba(128, 0, 128, 1)">$this</span>->checkAuth()) <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$data</span> = <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>'group'=><span style="color: rgba(0, 0, 255, 1)">array</span>('id'=><span style="color: rgba(128, 0, 128, 1)">$groupid</span>,'name'=><span style="color: rgba(128, 0, 128, 1)">$name</span><span style="color: rgba(0, 0, 0, 1)">)
);
</span><span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http_post(self::API_URL_PREFIX.self::GROUP_UPDATE_URL.'access_token='.<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token,self::json_encode(<span style="color: rgba(128, 0, 128, 1)">$data</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$result</span>,<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$json</span> || !<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">])) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errCode = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errMsg = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errmsg'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$json</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 移动用户分组
* @param int $groupid 分组id
* @param string $openid 用户openid
* @return boolean|array
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> updateGroupMembers(<span style="color: rgba(128, 0, 128, 1)">$groupid</span>,<span style="color: rgba(128, 0, 128, 1)">$openid</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token && !<span style="color: rgba(128, 0, 128, 1)">$this</span>->checkAuth()) <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$data</span> = <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>'openid'=><span style="color: rgba(128, 0, 128, 1)">$openid</span>,
'to_groupid'=><span style="color: rgba(128, 0, 128, 1)">$groupid</span><span style="color: rgba(0, 0, 0, 1)">
);
</span><span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http_post(self::API_URL_PREFIX.self::GROUP_MEMBER_UPDATE_URL.'access_token='.<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token,self::json_encode(<span style="color: rgba(128, 0, 128, 1)">$data</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$result</span>,<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$json</span> || !<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">])) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errCode = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errMsg = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errmsg'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$json</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 发送客服消息
* @param array $data 消息结构{"touser":"OPENID","msgtype":"news","news":{...}}
* @return boolean|array
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> sendCustomMessage(<span style="color: rgba(128, 0, 128, 1)">$data</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token && !<span style="color: rgba(128, 0, 128, 1)">$this</span>->checkAuth()) <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http_post(self::API_URL_PREFIX.self::CUSTOM_SEND_URL.'access_token='.<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token,self::json_encode(<span style="color: rgba(128, 0, 128, 1)">$data</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$result</span>,<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$json</span> || !<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">])) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errCode = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errMsg = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errmsg'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$json</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* oauth 授权跳转接口
* @param string $callback 回调URI
* @return string
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> getOauthRedirect(<span style="color: rgba(128, 0, 128, 1)">$callback</span>,<span style="color: rgba(128, 0, 128, 1)">$state</span>='',<span style="color: rgba(128, 0, 128, 1)">$scope</span>='snsapi_userinfo'<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> self::OAUTH_PREFIX.self::OAUTH_AUTHORIZE_URL.'appid='.<span style="color: rgba(128, 0, 128, 1)">$this</span>->appid.'&redirect_uri='.<span style="color: rgba(0, 128, 128, 1)">urlencode</span>(<span style="color: rgba(128, 0, 128, 1)">$callback</span>).'&response_type=code&scope='.<span style="color: rgba(128, 0, 128, 1)">$scope</span>.'&state='.<span style="color: rgba(128, 0, 128, 1)">$state</span>.'#wechat_redirect'<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* 通过code获取Access Token
* @return array {access_token,expires_in,refresh_token,openid,scope}
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getOauthAccessToken(){
</span><span style="color: rgba(128, 0, 128, 1)">$code</span> = <span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$_GET</span>['code'])?<span style="color: rgba(128, 0, 128, 1)">$_GET</span>['code']:''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$code</span>) <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http_get(self::OAUTH_TOKEN_PREFIX.self::OAUTH_TOKEN_URL.'appid='.<span style="color: rgba(128, 0, 128, 1)">$this</span>->appid.'&secret='.<span style="color: rgba(128, 0, 128, 1)">$this</span>->appsecret.'&code='.<span style="color: rgba(128, 0, 128, 1)">$code</span>.'&grant_type=authorization_code'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$result</span>,<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$json</span> || !<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">])) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errCode = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errMsg = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errmsg'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->user_token = <span style="color: rgba(128, 0, 128, 1)">$json</span>['access_token'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$json</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 刷新access token并续期
* @param string $refresh_token
* @return boolean|mixed
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> getOauthRefreshToken(<span style="color: rgba(128, 0, 128, 1)">$refresh_token</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http_get(self::OAUTH_TOKEN_PREFIX.self::OAUTH_REFRESH_URL.'appid='.<span style="color: rgba(128, 0, 128, 1)">$this</span>->appid.'&grant_type=refresh_token&refresh_token='.<span style="color: rgba(128, 0, 128, 1)">$refresh_token</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$result</span>,<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$json</span> || !<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">])) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errCode = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errMsg = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errmsg'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->user_token = <span style="color: rgba(128, 0, 128, 1)">$json</span>['access_token'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$json</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取授权后的用户资料
* @param string $access_token
* @param string $openid
* @return array {openid,nickname,sex,province,city,country,headimgurl,privilege}
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> getOauthUserinfo(<span style="color: rgba(128, 0, 128, 1)">$access_token</span>,<span style="color: rgba(128, 0, 128, 1)">$openid</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http_get(self::OAUTH_USERINFO_URL.'access_token='.<span style="color: rgba(128, 0, 128, 1)">$access_token</span>.'&openid='.<span style="color: rgba(128, 0, 128, 1)">$openid</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$result</span>,<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$json</span> || !<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">])) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errCode = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errMsg = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errmsg'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$json</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 进入客服模式
* Examle: $obj->kefu()->reply();
* @param string $text
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> kefu()
{
</span><span style="color: rgba(128, 0, 128, 1)">$msg</span> = <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>'ToUserName' => <span style="color: rgba(128, 0, 128, 1)">$this</span>->getRevFrom(),
'FromUserName'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->getRevTo(),
'MsgType'=>'transfer_customer_service',
'CreateTime'=><span style="color: rgba(0, 128, 128, 1)">time</span><span style="color: rgba(0, 0, 0, 1)">()
);
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->Message(<span style="color: rgba(128, 0, 128, 1)">$msg</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">编码转换</span>
<span style="color: rgba(0, 0, 255, 1)">function</span> iconvUtf(<span style="color: rgba(128, 0, 128, 1)">$content</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_charset != 'utf-8'<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(128, 0, 128, 1)">$content</span> = <span style="color: rgba(0, 128, 128, 1)">serialize</span>(<span style="color: rgba(128, 0, 128, 1)">$content</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$content</span> = <span style="color: rgba(0, 128, 128, 1)">iconv</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_charset,'UTF-8',<span style="color: rgba(128, 0, 128, 1)">$content</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$content</span> = <span style="color: rgba(0, 128, 128, 1)">unserialize</span>(<span style="color: rgba(128, 0, 128, 1)">$content</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$content</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取用户上报的地理信息</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getUserLocation(){
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Latitude'])) <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>'FromUserName'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['FromUserName'],
'Latitude'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Latitude'],
'Longitude'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Longitude'],
'Precision'=><span style="color: rgba(128, 0, 128, 1)">$this</span>->_receive['Precision'],<span style="color: rgba(0, 0, 0, 1)">
);
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>tp5中微信公众号开发,设置自定义菜单</p>
<div class="cnblogs_code"><img id="code_img_closed_83f15d08-149b-4038-8e1f-fb137e9835fa" class="code_img_closed lazyload" alt="" data-src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_83f15d08-149b-4038-8e1f-fb137e9835fa" class="code_img_opened lazyload" style="display: none" alt="" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_83f15d08-149b-4038-8e1f-fb137e9835fa" class="cnblogs_code_hide">
<pre><?<span style="color: rgba(0, 0, 0, 1)">php
namespace app\wx\controller;
</span><span style="color: rgba(0, 0, 255, 1)">use</span><span style="color: rgba(0, 0, 0, 1)"> think\Controller;
</span><span style="color: rgba(0, 128, 128, 1)">header</span>("Content-type: text/html; charset=utf-8"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">define</span>("TOKEN", "hengyuanjiaoyu"); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">定义识别码 需要跟微信公众平台上保持一致</span>
<span style="color: rgba(0, 0, 255, 1)">class</span> Index <span style="color: rgba(0, 0, 255, 1)">extends</span><span style="color: rgba(0, 0, 0, 1)"> Controller
{
</span><span style="color: rgba(0, 0, 255, 1)">const</span> API_URL_PREFIX = 'https://api.weixin.qq.com/cgi-bin'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> AUTH_URL = '/token?grant_type=client_credential&'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> MENU_CREATE_URL = '/menu/create?'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(128, 0, 128, 1)">$appid</span> = 'xxxxxxxxxxxxxxx'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(128, 0, 128, 1)">$appsecret</span> = 'XXXXXXXXXXXXXX'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(128, 0, 128, 1)">$access_token</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> index()
{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 微信验证token</span>
<span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">valid();
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">微信验证</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> valid()
{
</span><span style="color: rgba(128, 0, 128, 1)">$echoStr</span> = <span style="color: rgba(128, 0, 128, 1)">$_GET</span>["echostr"<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">checkSignature()) {
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(128, 0, 128, 1)">$echoStr</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">exit</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">检查微信签名</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> checkSignature()
{
</span><span style="color: rgba(128, 0, 128, 1)">$signature</span> = <span style="color: rgba(128, 0, 128, 1)">$_GET</span>["signature"<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$timestamp</span> = <span style="color: rgba(128, 0, 128, 1)">$_GET</span>["timestamp"<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$nonce</span> = <span style="color: rgba(128, 0, 128, 1)">$_GET</span>["nonce"<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$token</span> =<span style="color: rgba(0, 0, 0, 1)"> TOKEN;
</span><span style="color: rgba(128, 0, 128, 1)">$tmpArr</span> = <span style="color: rgba(0, 0, 255, 1)">array</span>(<span style="color: rgba(128, 0, 128, 1)">$token</span>, <span style="color: rgba(128, 0, 128, 1)">$timestamp</span>, <span style="color: rgba(128, 0, 128, 1)">$nonce</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">sort</span>(<span style="color: rgba(128, 0, 128, 1)">$tmpArr</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$tmpStr</span> = <span style="color: rgba(0, 128, 128, 1)">implode</span>(<span style="color: rgba(128, 0, 128, 1)">$tmpArr</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$tmpStr</span> = <span style="color: rgba(0, 128, 128, 1)">sha1</span>(<span style="color: rgba(128, 0, 128, 1)">$tmpStr</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$tmpStr</span> == <span style="color: rgba(128, 0, 128, 1)">$signature</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 创建菜单
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> createMenu()
{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 防止json_encode时报错,没有下级的不要有空数组</span>
<span style="color: rgba(128, 0, 128, 1)">$data</span> = <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">(
</span>'button' =><span style="color: rgba(0, 0, 0, 1)"> [
[
</span>'type' => 'scancode_push',
'name' => '扫码',
'key' => 'reselmenu_0_1'<span style="color: rgba(0, 0, 0, 1)">
]</span>,<span style="color: rgba(0, 0, 0, 1)">
[
</span>'type' => 'view',
'name' => '工作轨迹',
'url' => 'https://www.hengyuanjiaoyu.com/wx/gz/index.html'<span style="color: rgba(0, 0, 0, 1)">
]
]
);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token && !<span style="color: rgba(128, 0, 128, 1)">$this</span>->checkAuth()) <span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http_post(self::API_URL_PREFIX . self::MENU_CREATE_URL . 'access_token=' . <span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token, self::json_encode(<span style="color: rgba(128, 0, 128, 1)">$data</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$result</span>, <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$json</span> || !<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">])) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errCode = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errMsg = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errmsg'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取access_token
* @param string $appid
* @param string $appsecret
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> checkAuth(<span style="color: rgba(128, 0, 128, 1)">$appid</span> = '', <span style="color: rgba(128, 0, 128, 1)">$appsecret</span> = ''<span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$appid</span> || !<span style="color: rgba(128, 0, 128, 1)">$appsecret</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$appid</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">appid;
</span><span style="color: rgba(128, 0, 128, 1)">$appsecret</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">appsecret;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">TODO: 获取token</span>
<span style="color: rgba(128, 0, 128, 1)">$result</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http_get(self::API_URL_PREFIX . self::AUTH_URL . 'appid=' . <span style="color: rgba(128, 0, 128, 1)">$appid</span> . '&secret=' . <span style="color: rgba(128, 0, 128, 1)">$appsecret</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$result</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$result</span>, <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$json</span> || <span style="color: rgba(0, 0, 255, 1)">isset</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">])) {
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errCode = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errcode'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->errMsg = <span style="color: rgba(128, 0, 128, 1)">$json</span>['errmsg'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->access_token = <span style="color: rgba(128, 0, 128, 1)">$json</span>['access_token'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$expire</span> = <span style="color: rgba(128, 0, 128, 1)">$json</span>['expires_in'] ? <span style="color: rgba(0, 128, 128, 1)">intval</span>(<span style="color: rgba(128, 0, 128, 1)">$json</span>['expires_in']) - 100 : 3600; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">过期时间
//TODO: 获取 access_token</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$this</span>-><span style="color: rgba(0, 0, 0, 1)">access_token;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 微信api不支持中文转义的json结构
* @param array $arr
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">function</span> json_encode(<span style="color: rgba(128, 0, 128, 1)">$arr</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$parts</span> = <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(128, 0, 128, 1)">$is_list</span> = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Find out if the given array is a numerical array</span>
<span style="color: rgba(128, 0, 128, 1)">$keys</span> = <span style="color: rgba(0, 128, 128, 1)">array_keys</span>(<span style="color: rgba(128, 0, 128, 1)">$arr</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$max_length</span> = <span style="color: rgba(0, 128, 128, 1)">count</span>(<span style="color: rgba(128, 0, 128, 1)">$arr</span>) - 1<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">if</span> ((<span style="color: rgba(128, 0, 128, 1)">$keys</span> === 0) && (<span style="color: rgba(128, 0, 128, 1)">$keys</span>[<span style="color: rgba(128, 0, 128, 1)">$max_length</span>] === <span style="color: rgba(128, 0, 128, 1)">$max_length</span>)) { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">See if the first key is 0 and last key is length - 1</span>
<span style="color: rgba(128, 0, 128, 1)">$is_list</span> = <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(128, 0, 128, 1)">$i</span> = 0; <span style="color: rgba(128, 0, 128, 1)">$i</span> < <span style="color: rgba(0, 128, 128, 1)">count</span>(<span style="color: rgba(128, 0, 128, 1)">$keys</span>); <span style="color: rgba(128, 0, 128, 1)">$i</span>++) { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">See if each key correspondes to its position</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$i</span> != <span style="color: rgba(128, 0, 128, 1)">$keys</span>[<span style="color: rgba(128, 0, 128, 1)">$i</span>]) { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">A key fails at position check.</span>
<span style="color: rgba(128, 0, 128, 1)">$is_list</span> = <span style="color: rgba(0, 0, 255, 1)">false</span>; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">It is an associative array.</span>
<span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
}
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span> (<span style="color: rgba(128, 0, 128, 1)">$arr</span> <span style="color: rgba(0, 0, 255, 1)">as</span> <span style="color: rgba(128, 0, 128, 1)">$key</span> => <span style="color: rgba(128, 0, 128, 1)">$value</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 128, 128, 1)">is_array</span>(<span style="color: rgba(128, 0, 128, 1)">$value</span>)) { <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Custom handling for arrays</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$is_list</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(128, 0, 128, 1)">$parts</span>[] = self::json_encode(<span style="color: rgba(128, 0, 128, 1)">$value</span>); <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> :RECURSION: </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(128, 0, 128, 1)">$parts</span>[] = '"' . <span style="color: rgba(128, 0, 128, 1)">$key</span> . '":' . self::json_encode(<span style="color: rgba(128, 0, 128, 1)">$value</span>); <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> :RECURSION: </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(128, 0, 128, 1)">$str</span> = ''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(128, 0, 128, 1)">$is_list</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(128, 0, 128, 1)">$str</span> = '"' . <span style="color: rgba(128, 0, 128, 1)">$key</span> . '":'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Custom handling for multiple data types</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 128, 128, 1)">is_numeric</span>(<span style="color: rgba(128, 0, 128, 1)">$value</span>) && <span style="color: rgba(128, 0, 128, 1)">$value</span> < 2000000000<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(128, 0, 128, 1)">$str</span> .= <span style="color: rgba(128, 0, 128, 1)">$value</span>; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Numbers</span>
<span style="color: rgba(0, 0, 255, 1)">elseif</span> (<span style="color: rgba(128, 0, 128, 1)">$value</span> === <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(128, 0, 128, 1)">$str</span> .= 'false'; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">The booleans</span>
<span style="color: rgba(0, 0, 255, 1)">elseif</span> (<span style="color: rgba(128, 0, 128, 1)">$value</span> === <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(128, 0, 128, 1)">$str</span> .= 'true'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(128, 0, 128, 1)">$str</span> .= '"' . <span style="color: rgba(0, 128, 128, 1)">addslashes</span>(<span style="color: rgba(128, 0, 128, 1)">$value</span>) . '"'; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">All other things
// :TODO: Is there any more datatype we should be in the lookout for? (Object?)</span>
<span style="color: rgba(128, 0, 128, 1)">$parts</span>[] = <span style="color: rgba(128, 0, 128, 1)">$str</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
</span><span style="color: rgba(128, 0, 128, 1)">$json</span> = <span style="color: rgba(0, 128, 128, 1)">implode</span>(',', <span style="color: rgba(128, 0, 128, 1)">$parts</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">$is_list</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">return</span> '[' . <span style="color: rgba(128, 0, 128, 1)">$json</span> . ']'; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Return numerical JSON</span>
<span style="color: rgba(0, 0, 255, 1)">return</span> '{' . <span style="color: rgba(128, 0, 128, 1)">$json</span> . '}'; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Return associative JSON</span>
<span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* GET 请求
* @param string $url
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">function</span> http_get(<span style="color: rgba(128, 0, 128, 1)">$url</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span> =<span style="color: rgba(0, 0, 0, 1)"> curl_init();
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 128, 128, 1)">stripos</span>(<span style="color: rgba(128, 0, 128, 1)">$url</span>, "https://") !== <span style="color: rgba(0, 0, 255, 1)">FALSE</span><span style="color: rgba(0, 0, 0, 1)">) {
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_SSL_VERIFYPEER, <span style="color: rgba(0, 0, 255, 1)">FALSE</span><span style="color: rgba(0, 0, 0, 1)">);
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_SSL_VERIFYHOST, <span style="color: rgba(0, 0, 255, 1)">FALSE</span><span style="color: rgba(0, 0, 0, 1)">);
}
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_URL, <span style="color: rgba(128, 0, 128, 1)">$url</span><span style="color: rgba(0, 0, 0, 1)">);
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_RETURNTRANSFER, 1<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$sContent</span> = curl_exec(<span style="color: rgba(128, 0, 128, 1)">$oCurl</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$aStatus</span> = curl_getinfo(<span style="color: rgba(128, 0, 128, 1)">$oCurl</span><span style="color: rgba(0, 0, 0, 1)">);
curl_close(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 128, 128, 1)">intval</span>(<span style="color: rgba(128, 0, 128, 1)">$aStatus</span>["http_code"]) == 200<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$sContent</span><span style="color: rgba(0, 0, 0, 1)">;
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* POST 请求
* @param string $url
* @param array $param
* @return string content
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">function</span> http_post(<span style="color: rgba(128, 0, 128, 1)">$url</span>, <span style="color: rgba(128, 0, 128, 1)">$param</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span> =<span style="color: rgba(0, 0, 0, 1)"> curl_init();
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 128, 128, 1)">stripos</span>(<span style="color: rgba(128, 0, 128, 1)">$url</span>, "https://") !== <span style="color: rgba(0, 0, 255, 1)">FALSE</span><span style="color: rgba(0, 0, 0, 1)">) {
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_SSL_VERIFYPEER, <span style="color: rgba(0, 0, 255, 1)">FALSE</span><span style="color: rgba(0, 0, 0, 1)">);
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_SSL_VERIFYHOST, <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 128, 128, 1)">is_string</span>(<span style="color: rgba(128, 0, 128, 1)">$param</span><span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(128, 0, 128, 1)">$strPOST</span> = <span style="color: rgba(128, 0, 128, 1)">$param</span><span style="color: rgba(0, 0, 0, 1)">;
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(128, 0, 128, 1)">$aPOST</span> = <span style="color: rgba(0, 0, 255, 1)">array</span><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 0, 255, 1)">foreach</span> (<span style="color: rgba(128, 0, 128, 1)">$param</span> <span style="color: rgba(0, 0, 255, 1)">as</span> <span style="color: rgba(128, 0, 128, 1)">$key</span> => <span style="color: rgba(128, 0, 128, 1)">$val</span><span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(128, 0, 128, 1)">$aPOST</span>[] = <span style="color: rgba(128, 0, 128, 1)">$key</span> . "=" . <span style="color: rgba(0, 128, 128, 1)">urlencode</span>(<span style="color: rgba(128, 0, 128, 1)">$val</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(128, 0, 128, 1)">$strPOST</span> =<span style="color: rgba(0, 128, 128, 1)">join</span>("&", <span style="color: rgba(128, 0, 128, 1)">$aPOST</span><span style="color: rgba(0, 0, 0, 1)">);
}
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_URL, <span style="color: rgba(128, 0, 128, 1)">$url</span><span style="color: rgba(0, 0, 0, 1)">);
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_RETURNTRANSFER, 1<span style="color: rgba(0, 0, 0, 1)">);
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_POST, <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span>, CURLOPT_POSTFIELDS, <span style="color: rgba(128, 0, 128, 1)">$strPOST</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$sContent</span> = curl_exec(<span style="color: rgba(128, 0, 128, 1)">$oCurl</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$aStatus</span> = curl_getinfo(<span style="color: rgba(128, 0, 128, 1)">$oCurl</span><span style="color: rgba(0, 0, 0, 1)">);
curl_close(</span><span style="color: rgba(128, 0, 128, 1)">$oCurl</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 128, 128, 1)">intval</span>(<span style="color: rgba(128, 0, 128, 1)">$aStatus</span>["http_code"]) == 200<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$sContent</span><span style="color: rgba(0, 0, 0, 1)">;
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">设置菜单</span></div>
<h2 id="title" class="weui-desktop-page__title">微信网页授权</h2>
<p>1、首先进行微信认证;</p>
<p>2、开通“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名</p>
<p><img alt="" width="485" height="150" data-src="https://img2018.cnblogs.com/blog/803621/201908/803621-20190808114514450-1412473113.png">根据提示下载文件,配置好域名;</p>
<p>3、获取code,获取openID</p>
<div class="cnblogs_code"><img id="code_img_closed_f1c09e54-9a50-4156-8c85-6bf85cfe3026" class="code_img_closed lazyload" alt="" data-src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_f1c09e54-9a50-4156-8c85-6bf85cfe3026" class="code_img_opened lazyload" style="display: none" alt="" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_f1c09e54-9a50-4156-8c85-6bf85cfe3026" class="cnblogs_code_hide">
<pre><?<span style="color: rgba(0, 0, 0, 1)">php
namespace app\index\controller;
</span><span style="color: rgba(0, 0, 255, 1)">class</span> Qrcode <span style="color: rgba(0, 0, 255, 1)">extends</span><span style="color: rgba(0, 0, 0, 1)"> Controller
{
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> index(){
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)">(is_weixin()){
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">如果是微信扫码</span>
<span style="color: rgba(128, 0, 128, 1)">$code</span> = input('?code') ? input('code') : ''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(128, 0, 128, 1)">$code</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(128, 0, 128, 1)">$openid</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->getopenid(<span style="color: rgba(128, 0, 128, 1)">$code</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取openID</span>
}<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(128, 0, 128, 1)">$backurl</span>='https://'.<span style="color: rgba(128, 0, 128, 1)">$_SERVER</span>['HTTP_HOST'].<span style="color: rgba(128, 0, 128, 1)">$_SERVER</span>['REQUEST_URI'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$this</span>->getcode(<span style="color: rgba(128, 0, 128, 1)">$backurl</span><span style="color: rgba(0, 0, 0, 1)">);
}
}
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 微信获取openid
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> getopenid(<span style="color: rgba(128, 0, 128, 1)">$coded</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(128, 0, 128, 1)">$appid</span> = 'XXXXXXXX'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$appsecret</span> = 'XXXXXXXX'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$code</span> = <span style="color: rgba(128, 0, 128, 1)">$coded</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$token_url</span> = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.<span style="color: rgba(128, 0, 128, 1)">$appid</span>.'&secret='.<span style="color: rgba(128, 0, 128, 1)">$appsecret</span>.'&code='.<span style="color: rgba(128, 0, 128, 1)">$code</span>.'&grant_type=authorization_code'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$token_data</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>->http(<span style="color: rgba(128, 0, 128, 1)">$token_url</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(!<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$token_data</span>))
{
</span><span style="color: rgba(128, 0, 128, 1)">$tdata</span> = json_decode(<span style="color: rgba(128, 0, 128, 1)">$token_data</span>, <span style="color: rgba(0, 0, 255, 1)">TRUE</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$openid</span> = <span style="color: rgba(128, 0, 128, 1)">$tdata</span>['openid'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$openid</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">FALSE</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 获取微信code
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> getcode(<span style="color: rgba(128, 0, 128, 1)">$burl</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> $backurl='https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];</span>
<span style="color: rgba(128, 0, 128, 1)">$backurl</span> = <span style="color: rgba(128, 0, 128, 1)">$burl</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$redirect_uri</span> = <span style="color: rgba(0, 128, 128, 1)">urlencode</span>(<span style="color: rgba(128, 0, 128, 1)">$backurl</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$appid</span> = 'XXXXXXXX'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$state</span> = 123<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$url</span> = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.<span style="color: rgba(128, 0, 128, 1)">$appid</span>.'&redirect_uri='.<span style="color: rgba(128, 0, 128, 1)">$redirect_uri</span>.'&response_type=code&scope=snsapi_base&state='.<span style="color: rgba(128, 0, 128, 1)">$state</span>.'#wechat_redirect'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">header</span>("Location: <span style="color: rgba(128, 0, 128, 1)">$url</span>"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">exit</span><span style="color: rgba(0, 0, 0, 1)">();
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* Http方法
*
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> http(<span style="color: rgba(128, 0, 128, 1)">$url</span><span style="color: rgba(0, 0, 0, 1)">)
{
</span><span style="color: rgba(128, 0, 128, 1)">$ch</span> = curl_init(<span style="color: rgba(128, 0, 128, 1)">$url</span><span style="color: rgba(0, 0, 0, 1)">);
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$ch</span>, CURLOPT_CONNECTTIMEOUT, 30<span style="color: rgba(0, 0, 0, 1)">);
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$ch</span>, CURLOPT_TIMEOUT, 10<span style="color: rgba(0, 0, 0, 1)">);
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$ch</span>, CURLOPT_RETURNTRANSFER, <span style="color: rgba(0, 0, 255, 1)">TRUE</span><span style="color: rgba(0, 0, 0, 1)">);
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$ch</span>, CURLOPT_SSL_VERIFYPEER, <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">);
curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$ch</span>, CURLOPT_HEADER, <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(128, 0, 128, 1)">$output</span> = curl_exec(<span style="color: rgba(128, 0, 128, 1)">$ch</span>);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">输出内容</span>
curl_close(<span style="color: rgba(128, 0, 128, 1)">$ch</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">array</span>(<span style="color: rgba(128, 0, 128, 1)">$output</span><span style="color: rgba(0, 0, 0, 1)">);
}
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 是否是微信浏览器
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> is_weixin()
{
</span><span style="color: rgba(128, 0, 128, 1)">$useragent</span> = <span style="color: rgba(0, 128, 128, 1)">addslashes</span>(<span style="color: rgba(128, 0, 128, 1)">$_SERVER</span>['HTTP_USER_AGENT'<span style="color: rgba(0, 0, 0, 1)">]);
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 128, 128, 1)">strpos</span>(<span style="color: rgba(128, 0, 128, 1)">$useragent</span>, 'MicroMessenger') === <span style="color: rgba(0, 0, 255, 1)">false</span> && <span style="color: rgba(0, 128, 128, 1)">strpos</span>(<span style="color: rgba(128, 0, 128, 1)">$useragent</span>, 'Windows Phone') === <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)"> )
{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">
{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
}
}
</span>?> </pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> </p><br><br>
来源:https://www.cnblogs.com/ziyandeyanhuo/p/11081421.html
頁:
[1]