protected static function request($url, $data = null, $jsonEncode = true)
{
$executeUrl = str_replace('ACCESS_TOKEN', self::getApi()->getAccessToken(), $url);
if ($jsonEncode) {
$data = Json::encode($data);
}
try {
return Json::parseOrFail(Curl::execute($executeUrl, is_null($data) ? 'get' : 'post', $data));
} catch (WechatException $ex) {
//更新AccessToken再次请求
if ($ex->getCode() == 40001) {
$executeUrl = str_replace('ACCESS_TOKEN', self::getApi()->getAccessToken(false), $url);
return Json::parseOrFail(Curl::execute($executeUrl, is_null($data) ? 'get' : 'post', $data));
}
throw $ex;
}
}
/** * 公众号用于调用微信JS接口的临时票据 * * http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#.E9.99.84.E5.BD.951-JS-SDK.E4.BD.BF.E7.94.A8.E6.9D.83.E9.99.90.E7.AD.BE.E5.90.8D.E7.AE.97.E6.B3.95 * jsapi_ticket 的type为jsapi (腾讯demo中的JSSDK.php代码中type为1 不知为何) * 卡券 api_ticket 的type为 wx_card * * @param string $type * @return string */ public static function getJsApiTicket($type = 'jsapi') { $cacheKey = parent::getApi()->getAppId() . $type . 'jsapi_ticket'; $ticket = Cache::get($cacheKey); if ($ticket !== false) { return $ticket; } $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type={$type}&access_token=ACCESS_TOKEN"; $data = parent::request($url); $ticket = $data['ticket']; //jsapi_ticket的有效期为7200秒 Cache::set($cacheKey, $ticket, $data['expires_in'] - 200); return $ticket; }