| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960 |
- <?php
- /**
- * Niushop商城系统 - 团队十年电商经验汇集巨献!
- * =========================================================
- * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
- * ----------------------------------------------
- * 官方网址: https://www.niushop.com
- * =========================================================
- */
- namespace addon\wechat\model;
- use addon\wxoplatform\model\OpenPlatform;
- use addon\wxoplatform\model\Oplatform;
- use EasyWeChat\Factory;
- use EasyWeChat\Kernel\Messages\Article;
- use EasyWeChat\Kernel\Messages\Text;
- use EasyWeChat\Kernel\Messages\News;
- use EasyWeChat\Kernel\Messages\NewsItem;
- use app\model\BaseModel;
- use think\facade\Cache;
- /**
- * 微信公众号
- */
- class Wechat extends BaseModel
- {
- public $app;//微信公众对象
- private $site_id;//站点
- //公众号类型
- public $service_type = array (
- 0 => "订阅号",
- 1 => "由历史老帐号升级后的订阅号",
- 2 => "服务号",
- );
- //公众号认证类型
- public $verify_type = array (
- -1 => "未认证",
- 0 => "微信认证",
- 1 => "新浪微博认证",
- 2 => "腾讯微博认证",
- 3 => "已资质认证通过但还未通过名称认证",
- 4 => "已资质认证通过、还未通过名称认证,但通过了新浪微博认证",
- 5 => "已资质认证通过、还未通过名称认证,但通过了腾讯微博认证",
- );
- //business_info 说明
- public $business_type = array (
- 'open_store' => "是否开通微信门店功能",
- 'open_scan' => "是否开通微信扫商品功能",
- 'open_pay' => "是否开通微信支付功能",
- 'open_card' => "是否开通微信卡券功能",
- 'open_shake' => "是否开通微信摇一摇功能",
- );
- public function __construct($site_id = 0)
- {
- $this->site_id = $site_id;
- // $response = $this->app->server->serve();
- // 将响应输出
- // $response->send();exit; // Laravel 里请使用:return $response;
- }
- /**
- * 授权实例
- */
- public function app()
- {
- $config_model = new Config();
- $config_result = $config_model->getWechatConfig($this->site_id);
- $config = $config_result[ "data" ];
- if (!empty($config)) {
- $config_info = $config[ "value" ];
- }
- //授权方式 手动授权 或 自动授权(通过开放平台)
- $auth_type = $config_info[ "is_authopen" ] ?? '';
- if ($auth_type == "1") {
- $oplatform_model = new Oplatform();
- $config_info[ 'type' ] = 'wechat';
- $this->app = $oplatform_model->app($config_info);
- } else {
- $config = [
- 'app_id' => $config_info[ "appid" ] ?? '',
- 'secret' => $config_info[ "appsecret" ] ?? '',
- 'token' => $config_info[ "token" ] ?? '', // Token
- 'aes_key' => $config_info[ 'encodingaeskey' ] ?? '', // EncodingAESKey,兼容与安全模式下请一定要填写!!!
- // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
- 'response_type' => 'array',
- /**
- * 日志配置
- *
- * level: 日志级别, 可选为:debug/info/notice/warning/error/critical/alert/emergency
- * permission:日志文件权限(可选),默认为null(若为null值,monolog会取0644)
- * file:日志文件位置(绝对路径!!!),要求可写权限
- */
- 'log' => [
- 'level' => 'debug',
- 'permission' => 0777,
- 'file' => 'runtime/log/wechat/easywechat.logs',
- ],
- ];
- if (empty($config[ 'app_id' ]) || empty($config[ 'secret' ])) {
- throw new \Exception('商家公众号配置有误,请联系平台管理员');
- }
- $this->app = Factory::officialAccount($config);
- }
- return $this->app;
- }
- /**
- * 创建微信菜单
- * @param $buttons
- */
- public function menu($buttons)
- {
- try {
- $result = $this->app()->menu->create($buttons);
- if ($result[ 'errcode' ] == 0) {
- return $this->success();
- } else {
- return $this->error($result, $result[ "errmsg" ]);
- }
- } catch (\Exception $e) {
- return $this->error([], $e->getMessage());
- }
- }
- /**
- * 拉取粉丝列表
- * @param $nextOpenId
- * @return \multitype
- * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
- */
- public function user($nextOpenId = null)
- {
- try {
- $result = $this->app()->user->list($nextOpenId); // $nextOpenId 可选
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error($result, $result[ "errmsg" ]);
- }
- return $this->success($result);
- } catch (\Exception $e) {
- return $this->error([], $e->getMessage());
- }
- }
- /**
- * 查询多个粉丝信息
- * @param $user_list 数组 [$openId1, $openId2, ...]
- */
- public function selectUser($user_list)
- {
- try {
- $result = $this->app()->user->select($user_list); // $nextOpenId 可选
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error($result, $result[ "errmsg" ]);
- }
- return $this->success($result);
- } catch (\Exception $e) {
- return $this->error([], $e->getMessage());
- }
- }
- /**
- * 得到粉丝信息
- */
- public function getUser($openId)
- {
- try {
- $result = $this->app()->user->get($openId); // $nextOpenId 可选
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error($result, $result[ "errmsg" ]);
- }
- return $this->success($result);
- } catch (\Exception $e) {
- return $this->error([], $e->getMessage());
- }
- }
- /**
- * TODO
- * 根据 Code 获取用户 session 信息
- * @param $param
- * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
- */
- public function authCodeToOpenid($params = [])
- {
- try {
- if (empty($_REQUEST[ "code" ])) {
- $auth_result = $this->getAuthCode(request()->url(true));
- if ($auth_result[ "code" ] >= 0) {
- Header("Location: " . $auth_result[ "data" ]);
- } else {
- return $auth_result;
- }
- }
- $user = $this->app()->oauth->user();//获取授权用户
- $data = [
- 'openid' => $user->getId(),
- 'userinfo' => [
- 'avatarUrl' => $user->getAvatar(),
- 'nickName' => $user->getNickname()
- ]
- ];
- return $this->success($data);
- } catch (\Exception $e) {
- if (property_exists($e, 'body')) {
- return $this->handleError($e->body[ 'errcode' ], $e->body[ 'errmsg' ]);
- }
- return $this->error([], $e->getMessage());
- }
- }
- /**
- * 根据code获取授权信息
- * @param $code
- * @return array
- */
- public function getAuthByCode($params)
- {
- try {
- $user = $this->app()->oauth->userByCode($params[ 'code' ]);//获取授权用户
- $original = $user->getOriginal();
- $data = [
- 'openid' => $original[ 'openid' ],
- 'userinfo' => [
- 'avatarUrl' => $original[ 'headimgurl' ] ?? '',
- 'nickName' => $original[ 'nickname' ] ?? ''
- ]
- ];
- if (isset($original[ 'unionid' ])) {
- $data[ 'unionid' ] = $original[ 'unionid' ];
- }
- return $this->success($data);
- } catch (\Exception $e) {
- if (property_exists($e, 'body')) {
- return $this->handleError($e->body[ 'errcode' ], $e->body[ 'errmsg' ]);
- }
- return $this->error([], $e->getMessage());
- }
- }
- /**
- * 获取公众号网页授权code
- * @param $redirect
- * @param string $scopes snsapi_base:静默授权 snsapi_userinfo:用户授权
- * @return array
- */
- public function getAuthCode($redirect, $scopes = 'snsapi_base')
- {
- try {
- $response = $this->app()->oauth->scopes([ $scopes ])->redirect($redirect);
- return $this->success($response->getTargetUrl());
- } catch (\Exception $e) {
- return $this->error([], $e->getMessage());
- }
- }
- /**
- * 获取永久二维码
- * @return unknown
- */
- public function getQrcode($uid)
- {
- $result = $this->app()->qrcode->forever($uid);
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error($result, $result[ "errmsg" ]);
- }
- $url = $this->app()->qrcode->url($result[ 'data' ][ 'ticket' ]);
- if (isset($url[ 'errcode' ]) && $url[ 'errcode' ] != 0) {
- return $this->error($url, $url[ "errmsg" ]);
- }
- return $this->success($url);
- }
- /**
- * 获取临时二维码
- * @param $scene
- * @return array
- */
- public function getTempQrcode($scene, $seconds)
- {
- try {
- $result = $this->app()->qrcode->temporary($scene, $seconds);
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error($result, $result[ "errmsg" ]);
- }
- $url = $this->app()->qrcode->url($result[ 'ticket' ]);
- if (isset($url[ 'errcode' ]) && $url[ 'errcode' ] != 0) {
- return $this->handleError($url[ 'errcode' ], $url[ "errmsg" ]);
- }
- return $this->success($url);
- } catch (\Exception $e) {
- if (property_exists($e, 'body')) {
- return $this->handleError($e->body[ 'errcode' ], $e->body[ 'errmsg' ]);
- }
- return $this->error([], $e->getMessage());
- }
- }
- /**
- * 获取jssdk配置
- * @param unknown $url
- */
- public function getJssdkConfig($url)
- {
- try {
- $this->app()->jssdk->setUrl($url);
- $res = $this->app->jssdk->buildConfig([], false, false, false);
- return $this->success($res);
- } catch (\Exception $e) {
- if (property_exists($e, 'body')) {
- return $this->handleError($e->body[ 'errcode' ], $e->body[ 'errmsg' ]);
- }
- return $this->error([], $e->getMessage());
- }
- }
- /********************************************************** 数据统计与分析start *******************************************************************/
- /********************************************************** 数据统计与分析end *******************************************************************/
- /*******************************************************************************微信接口连接开始*****************************************************/
- /*******************************************************************************微信接口连接结束*****************************************************/
- /***************************************************************** 微信公众号 统计 start *****************************************************************************************/
- /***************************************************************** 微信公众号 统计 end *****************************************************************************************/
- /****************************************************************************** 数据统计与分析***********************************************************/
- /**
- * 获取用户增减数据, 最大时间跨度:7;
- * @param $from
- * @param $to
- */
- public function userSummary($from, $to)
- {
- try {
- $result = $this->app()->data_cube->userSummary($from, $to);
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error([], $result[ "errmsg" ]);
- }
- return $this->success($result[ "list" ]);
- } catch (\Exception $e) {
- return $this->error([], $e->getMessage());
- }
- }
- /**
- * 获取累计用户数据, 最大时间跨度:7
- * @param $from
- * @param $to
- */
- public function userCumulate($from, $to)
- {
- try {
- $result = $this->app()->data_cube->userCumulate($from, $to);
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error([], $result[ "errmsg" ]);
- }
- return $this->success($result[ "list" ]);
- } catch (\Exception $e) {
- return $this->error([], $e->getMessage());
- }
- }
- /**
- * 获取接口分析分时数据, 最大时间跨度:1;
- * @param $from
- * @param $to
- * @return array|\multitype
- */
- public function interfaceSummaryHourly($from, $to)
- {
- try {
- $result = $this->app()->data_cube->interfaceSummaryHourly($from, $to);
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error([], $result[ "errmsg" ]);
- }
- return $this->success($result[ "list" ]);
- } catch (\Exception $e) {
- return $this->error([], $e->getMessage());
- }
- }
- /**
- * 获取接口分析数据, 最大时间跨度:30;
- * @param $from
- * @param $to
- * @return array|\multitype
- */
- public function interfaceSummary($from, $to)
- {
- try {
- $result = $this->app()->data_cube->interfaceSummary($from, $to);
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error([], $result[ "errmsg" ]);
- }
- return $this->success($result[ "list" ]);
- } catch (\Exception $e) {
- return $this->error([], $e->getMessage());
- }
- }
- /****************************************************************************** 数据统计与分析***********************************************************/
- /****************************************************************************** 素材start***********************************************************/
- /**
- * 上传图片
- * @param $path
- * @return array
- */
- function uploadImage($path)
- {
- $result = $this->app()->material->uploadImage($path);
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error($result, $result[ "errmsg" ]);
- }
- return $this->success($result);
- }
- /**
- * 上传语音
- * @param $path
- * @return array
- */
- function uploadVoice($path)
- {
- $result = $this->app()->material->uploadVoice($path);
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error($result, $result[ "errmsg" ]);
- }
- return $this->success($result);
- }
- /**
- * 上传视频
- * @param $path
- * @return array
- */
- function uploadVideo($path)
- {
- $result = $this->app()->material->uploadVideo($path);
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error($result, $result[ "errmsg" ]);
- }
- return $this->success($result);
- }
- /**
- * 上传缩略图
- * @param $path
- * @return array
- */
- function uploadThumb($path)
- {
- $result = $this->app()->material->uploadThumb($path);
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error($result, $result[ "errmsg" ]);
- }
- return $this->success($result);
- }
- /**
- * 上传图文
- * @param $data
- */
- public function uploadArticle($data)
- {
- $article_data = [];
- foreach ($data as $k => $v) {
- $article_data[] = new Article($v);
- }
- $result = $this->app()->material->uploadArticle($article_data);
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error($result, $result[ "errmsg" ]);
- }
- return $this->success($result);
- }
- /**
- * 修改图文
- * @param $mediaId
- * @param $data 文章详情
- * @param int $index 多图文中的第几篇
- * @return array
- */
- public function updateArticle($mediaId, $data, $index = 0)
- {
- $result = $this->app()->material->updateArticle($mediaId, $data, $index);
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error($result, $result[ "errmsg" ]);
- }
- return $this->success($result);
- }
- /**
- * 上传图文消息图片
- * @param $path
- * @return array
- * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
- * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
- */
- public function uploadArticleImage($path)
- {
- $result = $this->app()->material->uploadArticleImage($path);
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error($result, $result[ "errmsg" ]);
- }
- return $this->success($result);
- }
- /**
- * 获取永久素材
- * @param $mediaId
- * @return array
- */
- public function getMaterial($mediaId)
- {
- $result = $this->app()->material->get($mediaId);
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error($result, $result[ "errmsg" ]);
- }
- return $this->success($result);
- }
- /**
- * 删除永久素材
- * @param $mediaId
- * @return array
- */
- public function deleteMaterial($mediaId)
- {
- $result = $this->app()->material->delete($mediaId);
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error($result, $result[ "errmsg" ]);
- }
- return $this->success($result);
- }
- /****************************************************************************** 素材end***********************************************************/
- /****************************************************************************** 回复start***********************************************************/
- /**
- * 用户事件
- * @return array
- */
- public function relateWeixin()
- {
- $server = $this->app->server;
- $message = $server->getMessage();
- if (isset($message[ 'MsgType' ])) {
- switch ( $message[ 'MsgType' ] ) {
- case 'event':
- $this->app->server->push(function($res) {
- if ($res[ 'Event' ] == 'subscribe') {
- // 关注公众号
- $Userstr = $this->getUser($res[ 'FromUserName' ]);
- //获取用户信息
- $wechat_user = $this->app->user->get($res[ 'FromUserName' ]);
- if (preg_match("/^qrscene_/", $res[ 'EventKey' ])) {
- $source_uid = substr($res[ 'EventKey' ], 8);
- $_SESSION[ 'source_uid' ] = $source_uid;
- } elseif (!empty($_SESSION[ 'source_uid' ])) {
- $source_uid = $_SESSION[ 'source_uid' ];
- } else {
- $source_uid = 0;
- }
- if (preg_match("/^qrscene_key_/", $res[ 'EventKey' ])) {
- //新增2021.06.02
- $key = substr($res[ 'EventKey' ], 12);
- $cache = Cache::get('wechat_' . $key);
- if (!empty($cache)) {
- Cache::set('wechat_' . $key, $wechat_user);
- }
- }
- if (preg_match("/^verify_/", $res[ 'EventKey' ])) {
- $cache = Cache::get($res[ 'EventKey' ]);
- if (empty($cache)) {
- Cache::set($res[ 'EventKey' ], $wechat_user, 7200);
- }
- }
- $nickname_decode = preg_replace('/[\x{10000}-\x{10FFFF}]/u', '', $wechat_user[ 'nickname' ]);
- $headimgurl = $wechat_user[ 'headimgurl' ];
- $sex = $wechat_user[ 'sex' ];
- $language = $wechat_user[ 'language' ];
- $country = $wechat_user[ 'country' ];
- $province = $wechat_user[ 'province' ];
- $city = $wechat_user[ 'city' ];
- $district = "无";
- $openid = $wechat_user[ 'openid' ];
- $nickname = $wechat_user[ 'nickname' ];
- if (!empty($wechat_user[ 'unionid' ])) {
- $unionid = $wechat_user[ 'unionid' ];
- } else {
- $unionid = '';
- }
- $memo = $wechat_user[ 'remark' ];
- $data = array (
- 'site_id' => $this->site_id,
- 'nickname' => $nickname,
- 'nickname_decode' => $nickname_decode,
- 'headimgurl' => $headimgurl,
- 'sex' => $sex,
- 'language' => $language,
- 'country' => $country,
- 'province' => $province,
- 'city' => $city,
- 'district' => $district,
- 'openid' => $openid,
- 'unionid' => $unionid,
- 'groupid' => '',
- 'is_subscribe' => 1,
- 'remark' => $memo,
- 'subscribe_time' => $wechat_user[ 'subscribe_time' ] ?? 0,
- 'subscribe_scene' => $wechat_user[ 'subscribe_scene' ] ?? 0,
- 'unsubscribe_time' => $wechat_user[ 'unsubscribe_time' ] ?? 0,
- 'update_date' => time()
- );
- $fans = new Fans();
- $fans_info = $fans->getFansInfo([ [ 'openid', '=', $openid ], [ 'site_id', '=', $this->site_id ] ]);
- if (empty($fans_info[ 'data' ])) {
- $fans->addFans($data);
- } else {
- $fans->editFans($data, [ [ 'openid', '=', $openid ], [ 'site_id', '=', $this->site_id ] ]);
- }
- //获取关注发送消息内容
- $replay = new Replay();
- $replay_content = $replay->getWechatFollowReplay($this->site_id);
- return new Text($replay_content[ 'data' ]);
- } else if ($res[ 'Event' ] == 'unsubscribe') {
- //取消关注
- $fans = new Fans();
- $openid = $res[ 'FromUserName' ];
- $fans->unfollowWechat((string) $openid);
- } else if ($res[ 'Event' ] == 'unsubscribe') {
- //取消关注
- $fans = new Fans();
- $openid = $res[ 'FromUserName' ];
- $fans->unfollowWechat((string) $openid);
- } else if ($res[ 'Event' ] == 'SCAN') {
- // SCAN事件 - 用户已关注时的事件推送 - 扫描带参数二维码事件
- $openid = $res[ 'FromUserName' ];
- $data = $res[ 'EventKey' ];
- if (preg_match("/^key_/", $data)) {
- $key = substr($data, 4);
- $cache = Cache::get('wechat_' . $key);
- if (!empty($cache)) {
- $wechat_user = $this->app->user->get($res[ 'FromUserName' ]);
- Cache::set('wechat_' . $key, $wechat_user);
- }
- }
- if (preg_match("/^verify_/", $res[ 'EventKey' ])) {
- $cache = Cache::get($res[ 'EventKey' ]);
- if (empty($cache)) {
- $wechat_user = $this->app->user->get($res[ 'FromUserName' ]);
- Cache::set($res[ 'EventKey' ], $wechat_user, 7200);
- }
- }
- return new Text('扫码成功。');
- } else if ($res[ 'Event' ] == 'CLICK') {
- // CLICK事件 - 自定义菜单事件
- $openid = $res[ 'FromUserName' ];
- $data = $res[ 'EventKey' ];
- if (strpos($res[ 'EventKey' ], 'MATERIAL_GRAPHIC_MESSAGE_') === 0) {
- $material_id = substr($res[ 'EventKey' ], 25);
- $material_type = 1;
- } else if (strpos($res[ 'EventKey' ], 'MATERIAL_PICTURE_') === 0) {
- $material_id = substr($res[ 'EventKey' ], 17);
- $material_type = 2;
- } else if (strpos($res[ 'EventKey' ], 'MATERIAL_TEXT_MESSAGE_') === 0) {
- $material_id = substr($res[ 'EventKey' ], 22);
- $material_type = 5;
- }
- $material = new Material();
- $media_info = $material->getMaterialInfo([ [ 'id', '=', $material_id, 'type', '=', $material_type ] ]);
- $media_info = $media_info[ 'data' ];
- if ($media_info) {
- $value = json_decode($media_info[ 'value' ], true);
- if ($material_type == 1) {
- //图文
- $url = __ROOT__;
- $url = $url . '/index.php/wechat/api/auth/wechatArticle?id=' . $media_info[ 'id' ];
- $items = [
- new NewsItem([
- 'title' => $value[ 0 ][ 'title' ],
- 'description' => strip_tags($value[ 0 ][ 'content' ]),
- 'url' => $url,
- 'image' => $value[ 0 ][ 'cover' ][ 'path' ],
- ]),
- ];
- return new News($items);
- } else if ($material_type == 2) {
- //图片
- } else if ($material_type == 5) {
- //文字
- return new Text($value[ 'content' ]);
- }
- }
- } else if ($res[ 'Event' ] == 'weapp_audit_success') {
- // 小程序审核通过 自动发布
- if (addon_is_exit('wxoplatform')) {
- $weapp_original = $res[ 'ToUserName' ];
- $site_info = model('config')->getInfo([ [ 'app_module', '=', 'shop' ], [ 'config_key', '=', 'WEAPP_CONFIG' ], [ 'value', 'like', '%is_authopen%' ], [ 'value', 'like', '%' . $weapp_original . '%' ] ], 'site_id');
- if (!empty($site_info)) {
- // 先将审核中的变更为审核成功
- model('weapp_audit_record')->update([ 'status' => 1, 'audit_time' => time() ], [ [ 'status', '=', 0 ], [ 'site_id', '=', $site_info[ 'site_id' ] ] ]);
- $platform = new OpenPlatform($site_info[ 'site_id' ]);
- $result = $platform->release();
- if ($result[ 'code' ] >= 0) {
- model('weapp_audit_record')->update([ 'status' => 5, 'release_time' => time() ], [ [ 'status', '=', 1 ], [ 'site_id', '=', $site_info[ 'site_id' ] ] ]);
- }
- }
- }
- }
- });
- $response = $this->app->server->serve();
- // 将响应输出
- return $response->send();
- break;
- case 'text':
- $this->app->server->push(function($res) {
- $replay = new Replay();
- $rule = $replay->getSiteWechatKeywordsReplay($res[ 'Content' ], $this->site_id);
- if ($rule[ 'data' ]) {
- if ($rule[ 'data' ][ 'type' ] == 'text') {
- //文字
- return new Text($rule[ 'data' ][ 'reply_content' ]);
- } else {
- $material = new Material();
- $media_info = $material->getMaterialInfo([ [ 'media_id', '=', $rule[ 'data' ][ 'media_id' ] ] ]);
- $media_info = $media_info[ 'data' ];
- if ($media_info) {
- $material_type = $media_info[ 'type' ];
- $value = json_decode($media_info[ 'value' ], true);
- if ($material_type == 1) {
- $url = __ROOT__;
- $url = $url . '/index.php/wechat/api/auth/wechatArticle?id=' . $media_info[ 'id' ];
- $items = [
- new NewsItem([
- 'title' => $value[ 0 ][ 'title' ],
- 'description' => strip_tags($value[ 0 ][ 'content' ]),
- 'url' => $url,
- 'image' => $value[ 0 ][ 'cover' ][ 'path' ],
- ]),
- ];
- return new News($items);
- } else if ($material_type == 2) {
- //图片
- }
- }
- }
- }
- });
- $response = $this->app->server->serve();
- // 将响应输出
- return $response->send();
- break;
- case 'image':
- // return '收到图片消息';
- break;
- case 'voice':
- // return '收到语音消息';
- break;
- case 'video':
- // return '收到视频消息';
- break;
- case 'location':
- //return '收到坐标消息';
- break;
- case 'link':
- //return '收到链接消息';
- break;
- case 'file':
- ///return '收到文件消息';
- // ... 其它消息
- default:
- //return '收到其它消息';
- break;
- }
- }
- $response = $this->app->server->serve();
- return $response->send();
- }
- /****************************************************************************** 回复end***********************************************************/
- /****************************************************************************** 模板消息start ***********************************************************/
- /**
- * 添加模板消息
- * @param unknown $shortId
- */
- public function getTemplateId($shortId)
- {
- try {
- $res = $this->app()->template_message->addTemplate($shortId);
- if (isset($res[ 'errcode' ]) && $res[ 'errcode' ] == 0) return $res;
- $errormsg = [
- '45026' => '模板数量超出限制'
- ];
- return [ 'errcode' => $res[ 'errcode' ], 'errmsg' => $errormsg[ $res[ 'errcode' ] ] ?? $res[ 'errmsg' ] ];
- } catch (\Exception $e) {
- return [ 'errcode' => -1, 'errmsg' => $e->getMessage() ];
- }
- }
- /**
- * 删除模板消息
- * @param unknown $shortId
- */
- public function deleteTemplate($templateId)
- {
- try {
- $res = $this->app()->template_message->deletePrivateTemplate($templateId);
- if (isset($res[ 'errcode' ]) && $res[ 'errcode' ] == 0) return $res;
- $errormsg = [
- '45026' => '模板数量超出限制'
- ];
- return [ 'errcode' => $res[ 'errcode' ], 'errmsg' => $errormsg[ $res[ 'errcode' ] ] ?? $res[ 'errmsg' ] ];
- } catch (\Exception $e) {
- return [ 'errcode' => -1, 'errmsg' => $e->getMessage() ];
- }
- }
- /**
- * 发送模板消息
- * @param array $param
- * @return Ambigous <\Psr\Http\Message\ResponseInterface, \EasyWeChat\Kernel\Support\Collection, multitype:, object, string>
- */
- public function sendTemplateMessage(array $param)
- {
- $result = $this->app()->template_message->send([
- 'touser' => $param[ 'openid' ], // openid
- 'template_id' => $param[ 'template_id' ],// 模板id
- 'url' => $param[ 'url' ],// 跳转链接
- 'miniprogram' => $param[ 'miniprogram' ], // 跳转小程序 ['appid' => 'xxxxxxx','pagepath' => 'pages/xxx',]
- 'data' => $param[ 'data' ] // 模板变量
- ]);
- if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] != 0) {
- return $this->error($result, $result[ "errmsg" ]);
- }
- return $this->success($result);
- }
- /****************************************************************************** 模板消息end***********************************************************/
- /******************************************************************************* 开放平台start *************************************************************************/
- /**
- * 将公众号或小程序绑定到指定开放平台帐号下
- */
- public function bindTo($open_appid)
- {
- try {
- $res = $this->app()->account->bindTo($open_appid);
- return $res;
- } catch (\Exception $e) {
- return [ 'errcode' => -1, 'errmsg' => $e->getMessage() ];
- }
- }
- /**
- * 将公众号/小程序从开放平台帐号下解绑
- */
- public function unbindFrom($open_appid)
- {
- try {
- $res = $this->app()->account->unbindFrom($open_appid);
- return $res;
- } catch (\Exception $e) {
- return [ 'errcode' => -1, 'errmsg' => $e->getMessage() ];
- }
- }
- /**
- * 获取公众号/小程序所绑定的开放平台帐号
- */
- public function getBinding()
- {
- try {
- $res = $this->app()->account->getBinding();
- return $res;
- } catch (\Exception $e) {
- return [ 'errcode' => -1, 'errmsg' => $e->getMessage() ];
- }
- }
- /**
- * 获取关注二维码
- * @param $fans_id
- * @return array|mixed
- */
- public function getFollowQrcode($fans_id)
- {
- $cache = Cache::get('wechat_follow_qrcode_' . $fans_id);
- if ($cache) return $cache;
- $res = $this->getTempQrcode('follow_key_' . $fans_id, 1728000);
- if ($res[ 'code' ] != 0) return $res;
- $data = $this->success([
- 'qrcode' => $res[ 'data' ],
- 'site_id' => $this->site_id,
- 'fans_id' => $fans_id
- ]);
- Cache::set('wechat_follow_qrcode_' . $fans_id, $data, 1728000);
- return $data;
- }
- /******************************************************************************* 开放平台end *************************************************************************/
- /**
- * 处理错误信息
- * @param $errcode
- * @param string $message
- * @return array
- */
- public function handleError($errcode, $message = '')
- {
- $error = require 'addon/wechat/config/wechat_error.php';
- return $this->error([], $error[ $errcode ] ?? $message);
- }
- }
|