租房掌柜微信小程序Api以及小程序前端模板
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

161 lines
5.0 KiB

<?php
// +----------------------------------------------------------------------
// | ThinkAdmin
// +----------------------------------------------------------------------
// | 版权所有 2014~2019 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
// +----------------------------------------------------------------------
// | 官方网站: http://demo.thinkadmin.top
// +----------------------------------------------------------------------
// | 开源协议 ( https://mit-license.org )
// +----------------------------------------------------------------------
// | gitee 代码仓库:https://gitee.com/zoujingli/ThinkAdmin
// | github 代码仓库:https://github.com/zoujingli/ThinkAdmin
// +----------------------------------------------------------------------
namespace app\service\handler;
use app\service\service\WechatService as WechatLogic;
use think\Db;
/**
* 微信网页授权接口
* Class WechatHandler
* @package app\wechat\handler
* @author Anyon <zoujingli@qq.com>
*/
class WechatHandler
{
/**
* 当前微信APPID
* @var string
*/
protected $appid;
/**
* 当前微信配置
* @var array
*/
protected $config;
/**
* 错误消息
* @var string
*/
protected $message;
/**
* Wechat constructor.
* @param array $config
*/
public function __construct($config = [])
{
$this->config = $config;
$this->appid = isset($config['authorizer_appid']) ? $config['authorizer_appid'] : '';
}
/**
* 检查微信配置服务初始化状态
* @return boolean
* @throws \think\Exception
*/
private function checkInit()
{
if (!empty($this->config)) return true;
throw new \think\Exception('Wechat Please bind Wechat first');
}
/**
* 获取当前公众号配置
* @return array|boolean
* @throws \think\Exception
*/
public function getConfig()
{
$this->checkInit();
$info = Db::name('WechatServiceConfig')->where(['authorizer_appid' => $this->appid])->find();
if (empty($info)) return false;
if (isset($info['id'])) unset($info['id']);
return $info;
}
/**
* 设置微信接口通知URL地址
* @param string $notifyUri 接口通知URL地址
* @return boolean
* @throws \think\Exception
* @throws \think\exception\PDOException
*/
public function setApiNotifyUri($notifyUri)
{
$this->checkInit();
if (empty($notifyUri)) throw new \think\Exception('请传入微信通知URL');
list($where, $data) = [['authorizer_appid' => $this->appid], ['appuri' => $notifyUri]];
return Db::name('WechatServiceConfig')->where($where)->update($data) !== false;
}
/**
* 更新接口Appkey(成功返回新的Appkey)
* @return bool|string
* @throws \think\Exception
* @throws \think\exception\PDOException
*/
public function updateApiAppkey()
{
$this->checkInit();
$data = ['appkey' => md5(uniqid())];
Db::name('WechatServiceConfig')->where(['authorizer_appid' => $this->appid])->update($data);
return $data['appkey'];
}
/**
* 获取公众号的配置参数
* @param string $name 参数名称
* @return array|string
* @throws \think\Exception
*/
public function config($name = null)
{
$this->checkInit();
return WechatLogic::WeChatScript($this->appid)->config->get($name);
}
/**
* 微信网页授权
* @param string $sessid 当前会话id(可用session_id()获取)
* @param string $selfUrl 当前会话URL地址(需包含域名的完整URL地址)
* @param int $fullMode 网页授权模式(0静默模式,1高级授权)
* @return array|bool
* @throws \think\Exception
*/
public function oauth($sessid, $selfUrl, $fullMode = 0)
{
$this->checkInit();
$fans = cache("{$this->appid}_{$sessid}_fans");
$openid = cache("{$this->appid}_{$sessid}_openid");
if (!empty($openid) && (empty($fullMode) || !empty($fans))) {
return ['openid' => $openid, 'fans' => $fans, 'url' => ''];
}
$service = WechatLogic::service();
$mode = empty($fullMode) ? 'snsapi_base' : 'snsapi_userinfo';
$url = url('@service/api.push/oauth', '', true, true);
$params = ['mode' => $fullMode, 'sessid' => $sessid, 'enurl' => encode($selfUrl)];
$authurl = $service->getOauthRedirect($this->appid, $url . '?' . http_build_query($params), $mode);
return ['openid' => $openid, 'fans' => $fans, 'url' => $authurl];
}
/**
* 微信网页JS签名
* @param string $url 当前会话URL地址(需包含域名的完整URL地址)
* @return array|boolean
* @throws \WeChat\Exceptions\InvalidResponseException
* @throws \WeChat\Exceptions\LocalCacheException
* @throws \think\Exception
*/
public function jsSign($url)
{
$this->checkInit();
return WechatLogic::WeChatScript($this->appid)->getJsSign($url);
}
}