|
@@ -81,6 +81,7 @@ class Wechat
|
|
|
const MENU_CREATE_URL = '/menu/create?';
|
|
|
const MENU_GET_URL = '/menu/get?';
|
|
|
const MENU_DELETE_URL = '/menu/delete?';
|
|
|
+ const GET_TICKET_URL = '/ticket/getticket?';
|
|
|
const CALLBACKSERVER_GET_URL = '/getcallbackip?';
|
|
|
const QRCODE_CREATE_URL='/qrcode/create?';
|
|
|
const QR_SCENE = 0;
|
|
@@ -163,6 +164,7 @@ class Wechat
|
|
|
private $appid;
|
|
|
private $appsecret;
|
|
|
private $access_token;
|
|
|
+ private $jsapi_ticket;
|
|
|
private $user_token;
|
|
|
private $partnerid;
|
|
|
private $partnerkey;
|
|
@@ -1081,7 +1083,7 @@ class Wechat
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 通用auth验证方法,暂时仅用于菜单更新操作
|
|
|
+ * 通用auth验证方法,获取access_token
|
|
|
* @param string $appid
|
|
|
* @param string $appsecret
|
|
|
* @param string $token 手动指定access_token,非必要情况不建议用
|
|
@@ -1130,6 +1132,73 @@ class Wechat
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 删除JSAPI授权TICKET
|
|
|
+ * @param string $appid 用于多个appid时使用
|
|
|
+ */
|
|
|
+ public function resetJsTicket($appid=''){
|
|
|
+ if (!$appid) $appid = $this->appid;
|
|
|
+ $this->jsapi_ticket = '';
|
|
|
+ $authname = 'wechat_jsapi_ticket'.$appid;
|
|
|
+ S($authname,null);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取JSAPI授权TICKET
|
|
|
+ * @param string $appid 用于多个appid时使用,可空
|
|
|
+ * @param string $jsapi_ticket 手动指定jsapi_ticket,非必要情况不建议用
|
|
|
+ */
|
|
|
+ public function getJsTicket($appid='',$jsapi_ticket=''){
|
|
|
+ if (!$this->access_token && !$this->checkAuth()) return false;
|
|
|
+ if ($jsapi_ticket) { //手动指定token,优先使用
|
|
|
+ $this->jsapi_ticket = $jsapi_ticket;
|
|
|
+ return $this->access_token;
|
|
|
+ }
|
|
|
+ $authname = 'wechat_jsapi_ticket'.$appid;
|
|
|
+ if ($rs = S($authname)) {
|
|
|
+ $this->jsapi_ticket = $rs;
|
|
|
+ return $rs;
|
|
|
+ }
|
|
|
+ $result = $this->http_get(self::API_URL_PREFIX.self::GET_TICKET_URL.'access_token='.$this->access_token.'&type=jsapi');
|
|
|
+ if ($result)
|
|
|
+ {
|
|
|
+ $json = json_decode($result,true);
|
|
|
+ if (!$json || !empty($json['errcode'])) {
|
|
|
+ $this->errCode = $json['errcode'];
|
|
|
+ $this->errMsg = $json['errmsg'];
|
|
|
+ var_dump($json);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $this->jsapi_ticket = $json['ticket'];
|
|
|
+ $expire = $json['expires_in'] ? intval($json['expires_in'])-100 : 3600;
|
|
|
+ S($authname,$this->access_token,$expire);
|
|
|
+ return $this->jsapi_ticket;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取JsApi使用签名
|
|
|
+ * @param string $url 网页的URL,不包含#及其后面部分
|
|
|
+ * @param string $timeStamp 当前时间戳(需与JS输出的一致)
|
|
|
+ * @param string $nonceStr 随机串(需与JS输出的一致)
|
|
|
+ * @param string $appid 用于多个appid时使用,可空
|
|
|
+ * @return string 返回签名字串
|
|
|
+ */
|
|
|
+ public function getJsSign($url, $timeStamp, $nonceStr, $appid=''){
|
|
|
+ if (!$this->jsapi_ticket && !$this->getJsTicket($appid)) return false;
|
|
|
+ $ret = strpos($url,'#');
|
|
|
+ if ($ret)
|
|
|
+ $url = strsub($url,0,$ret);
|
|
|
+ $url = trim($url);
|
|
|
+ if (empty($url))
|
|
|
+ return false;
|
|
|
+ $arrdata = array("timestamp" => $timeStamp, "noncestr" => $nonceStr, "url" => $url, "jsapi_ticket" => $this->jsapi_ticket);
|
|
|
+ return $this->getSignature($arrdata);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 微信api不支持中文转义的json结构
|
|
|
* @param array $arr
|
|
|
*/
|