|
@@ -2,6 +2,8 @@
|
|
|
|
|
|
namespace App\Servers\WeChat;
|
|
|
|
|
|
+use App\Servers\Common\RedisDataServer;
|
|
|
+
|
|
|
class WeixinServer
|
|
|
{
|
|
|
|
|
@@ -126,4 +128,90 @@ class WeixinServer
|
|
|
curl_close($ch);
|
|
|
return $request;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ * 获取js授权信息
|
|
|
+ * @return mixed
|
|
|
+ */
|
|
|
+ function getJsConfig($url = '')
|
|
|
+ {
|
|
|
+ $hash = '';
|
|
|
+ $chars = 'ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz';
|
|
|
+ $max = strlen($chars) - 1;
|
|
|
+ for ($i = 0; $i < 16; $i++) {
|
|
|
+ $hash .= $chars[mt_rand(0, $max)];
|
|
|
+ }
|
|
|
+ $data['noncestr'] = $hash;
|
|
|
+ $data['jsapi_ticket'] = $this->getJsTicket();
|
|
|
+ $data['timestamp'] = time();
|
|
|
+ if (empty($url)) {
|
|
|
+ $data['url'] = $this->getServerUrl();
|
|
|
+ } else {
|
|
|
+ $data['url'] = $url;
|
|
|
+ }
|
|
|
+ ksort($data);
|
|
|
+ $str = '';
|
|
|
+ foreach ($data as $key => $val) {
|
|
|
+ $str .= '&';
|
|
|
+ $str .= $key . '=' . $val;
|
|
|
+ }
|
|
|
+ $str = mb_substr($str, 1);
|
|
|
+ $data['appid'] = $this->appid;
|
|
|
+ $data['signature'] = sha1($str);
|
|
|
+ unset($data['jsapi_ticket']);
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 获取 access_token
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ protected function getAccessToken($type = 1)
|
|
|
+ {
|
|
|
+ $key = 'vouchername';
|
|
|
+ $appId = $this->appid;
|
|
|
+ $appsecret = $this->appsecret;
|
|
|
+
|
|
|
+ $data = RedisDataServer::creatServer()->getData($key, 'json');
|
|
|
+ if (empty($data) || $data['endtime'] < time() || true) {
|
|
|
+ $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appId}&secret={$appsecret}";
|
|
|
+ $result = $this->sendRequest($url);
|
|
|
+ $result = json_decode($result, true);
|
|
|
+
|
|
|
+ if ( isset($result['access_token'])) {
|
|
|
+ RedisDataServer::creatServer()->setData($key, array('access_token' => $result['access_token'], 'endtime' => time() + 1800), 'json',1800);
|
|
|
+ return $result['access_token'];
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return $data['access_token'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 获取Js调用凭证
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ function getJsTicket()
|
|
|
+ {
|
|
|
+
|
|
|
+ $data = RedisDataServer::creatServer()->getData('js_ticket', 'json');
|
|
|
+ if (empty($data) || $data['endtime'] < time()) {
|
|
|
+ $access_token = $this->getAccessToken();
|
|
|
+ $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={$access_token}&type=jsapi";
|
|
|
+ $result = $this->sendRequest($url);
|
|
|
+ $result = json_decode($result, true);
|
|
|
+ if ($result['errcode'] == 0) {
|
|
|
+
|
|
|
+
|
|
|
+ RedisDataServer::creatServer()->setData('js_ticket', array('access_token' => $result['ticket'], 'endtime' => time() + 7000), 'json',7000);
|
|
|
+ return $result['ticket'];
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ } else {
|
|
|
+ return $data['access_token'];
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|