更新内核

增加自定义表单(未完成)
This commit is contained in:
2017-07-04 12:13:24 +08:00
parent 8af311aa07
commit aef819d417
82 changed files with 12328 additions and 59 deletions

View File

@@ -0,0 +1,122 @@
<?php
namespace Wechat;
use Wechat\Lib\Common;
use Wechat\Lib\Tools;
/**
* 微信前端 JavaScript 签名SDK
*
* @author Anyon <zoujingli@qq.com>
* @date 2016/06/28 11:24
*/
class WechatScript extends Common {
/**
* JSAPI授权TICKET
* @var string
*/
public $jsapi_ticket;
/**
* 删除JSAPI授权TICKET
* @param string $appid
* @return bool
*/
public function resetJsTicket($appid = '') {
$this->jsapi_ticket = '';
$authname = 'wechat_jsapi_ticket_' . empty($appid) ? $this->appid : $appid;
Tools::removeCache($authname);
return true;
}
/**
* 获取JSAPI授权TICKET
* @param string $appid 用于多个appid时使用,可空
* @param string $jsapi_ticket 手动指定jsapi_ticket非必要情况不建议用
* @param string $access_token 获取 jsapi_ticket 指定 access_token
* @return bool|string
*/
public function getJsTicket($appid = '', $jsapi_ticket = '', $access_token = '') {
if (empty($access_token)) {
if (!$this->access_token && !$this->getAccessToken()) {
return false;
}
$access_token = $this->access_token;
}
if (empty($appid)) {
$appid = $this->appid;
}
# 手动指定token优先使用
if ($jsapi_ticket) {
$this->jsapi_ticket = $jsapi_ticket;
return $this->jsapi_ticket;
}
# 尝试从缓存中读取
$cache = 'wechat_jsapi_ticket_' . $appid;
$jt = Tools::getCache($cache);
if ($jt) {
return $this->jsapi_ticket = $jt;
}
# 检测事件注册
if (isset(Loader::$callback[__FUNCTION__])) {
return $this->jsapi_ticket = call_user_func_array(Loader::$callback[__FUNCTION__], array(&$this, &$cache));
}
# 调接口获取
$result = Tools::httpGet(self::API_URL_PREFIX . self::GET_TICKET_URL . "access_token={$access_token}" . '&type=jsapi');
if ($result) {
$json = json_decode($result, true);
if (!$json || !empty($json['errcode'])) {
$this->errCode = $json['errcode'];
$this->errMsg = $json['errmsg'];
return $this->checkRetry(__FUNCTION__, func_get_args());
}
$this->jsapi_ticket = $json['ticket'];
Tools::setCache($cache, $this->jsapi_ticket, $json['expires_in'] ? intval($json['expires_in']) - 100 : 3600);
return $this->jsapi_ticket;
}
return false;
}
/**
* 获取JsApi使用签名
* @param string $url 网页的URL自动处理#及其后面部分
* @param int $timestamp 当前时间戳 (为空则自动生成)
* @param string $noncestr 随机串 (为空则自动生成)
* @param string $appid 用于多个appid时使用,可空
* @param string $access_token 获取 jsapi_ticket 指定 access_token
* @return array|bool 返回签名字串
*/
public function getJsSign($url, $timestamp = 0, $noncestr = '', $appid = '', $access_token = '') {
if (!$this->jsapi_ticket && !$this->getJsTicket($appid, '', $access_token) || empty($url)) {
return false;
}
$data = array(
"jsapi_ticket" => $this->jsapi_ticket,
"timestamp" => empty($timestamp) ? time() : $timestamp,
"noncestr" => '' . empty($noncestr) ? Tools::createNoncestr(16) : $noncestr,
"url" => trim($url),
);
return array(
"url" => $url,
'debug' => false,
"appId" => empty($appid) ? $this->appid : $appid,
"nonceStr" => $data['noncestr'],
"timestamp" => $data['timestamp'],
"signature" => Tools::getSignature($data, 'sha1'),
'jsApiList' => array(
'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone',
'hideOptionMenu', 'showOptionMenu', 'hideMenuItems', 'showMenuItems', 'hideAllNonBaseMenuItem', 'showAllNonBaseMenuItem',
'chooseImage', 'previewImage', 'uploadImage', 'downloadImage', 'closeWindow', 'scanQRCode', 'chooseWXPay',
'translateVoice', 'getNetworkType', 'openLocation', 'getLocation',
'openProductSpecificView', 'addCard', 'chooseCard', 'openCard',
'startRecord', 'stopRecord', 'onVoiceRecordEnd', 'playVoice', 'pauseVoice', 'stopVoice', 'onVoicePlayEnd', 'uploadVoice', 'downloadVoice',
'openWXDeviceLib', 'closeWXDeviceLib', 'getWXDeviceInfos', 'sendDataToWXDevice', 'disconnectWXDevice', 'getWXDeviceTicket', 'connectWXDevice',
'startScanWXDevice', 'stopScanWXDevice', 'onWXDeviceBindStateChange', 'onScanWXDeviceResult', 'onReceiveDataFromWXDevice',
'onWXDeviceBluetoothStateChange', 'onWXDeviceStateChange'
)
);
}
}