<?php namespace app\api\controller; use app\common\controller\Api; use app\common\model\UserRelation; use app\common\model\User; use liuniu\MiniProgramService; use liuniu\UtilService; use think\Hook; use think\Request; class MiniProgram extends Api { /** * 小程序授权登录 * @param Request $request * @return mixed * @throws \Psr\SimpleCache\InvalidArgumentException * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function mp_auth(Request $request) { $cache_key = ''; list($code, $post_cache_key, $login_type) = UtilService::postMore([ ['code', ''], ['cache_key', ''], ['login_type', ''] ], $request, true); $session_key = cache('post_cache_key',$post_cache_key); if (!$code && !$session_key) $this->error('授权失败,参数有误'); if ($code && !$session_key) { try { $userInfoCong = MiniProgramService::getUserInfo($this->cid,$code); $session_key = $userInfoCong['session_key']; $cache_key = md5(time() . $code); cache('post_cache_key', $session_key, 86400); } catch (\Exception $e) { $this->error('',['message' => $e->getMessage(), 'line' => $e->getLine()]); } } $data = UtilService::postMore([ ['spread_spid', 0], ['spread_code', ''], ['iv', ''], ['encryptedData', ''], ]);//获取前台传的code try { //解密获取用户信息 $userInfo = MiniProgramService::encryptor($session_key, $data['iv'], $data['encryptedData']); } catch (\Exception $e) { if ($e->getCode() == '-41003') $this->error('获取会话密匙失败'); } if (!isset($userInfoCong['openid'])) $this->error('openid获取失败'); if (!isset($userInfo['unionId'])) $userInfo['unionId'] = ''; $userInfo['openId'] = $userInfoCong['openid']; $userInfo['spid'] = $data['spread_spid']; $userInfo['code'] = $data['spread_code']; $userInfo['session_key'] = $session_key; $userInfo['login_type'] = $login_type; @file_put_contents("user.txt",json_encode($userInfo).'--'.json_encode($userInfoCong)); $user = User::where('id', UserRelation::openidToUid($userInfo['openId'], 'routine_openid'))->find(); if (!$user) $this->error('获取用户失败'); $this->auth->direct($user['id']); return $this->success('登录成功', $this->auth->getUserinfo()); } /** * 小程序支付回调 */ public function notify() { MiniProgramService::handleNotify(); } /** * 获取小程序订阅消息id * @return mixed */ public function teml_ids() { $temlIdsName = SubscribeTemplateService::getConstants(); $temlIdsList = CacheService::get('TEML_IDS_LIST', function () use ($temlIdsName) { $temlId = []; foreach ($temlIdsName as $key => $item) { $temlId[strtolower($key)] = SubscribeTemplateService::setTemplateId($item); } return $temlId; }); return app('json')->success($temlIdsList); } }