Login.Class.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. <?php
  2. /**
  3. * 登陆类
  4. * Created by PhpStorm.
  5. * User: phperstar
  6. * Date: 2019/10/26
  7. * Time: 2:36 PM
  8. */
  9. namespace JinDouYun\Controller\Common;
  10. use Mall\Framework\Core\ErrorCode;
  11. use Mall\Framework\Core\StatusCode;
  12. use Mall\Framework\Factory;
  13. use JinDouYun\Controller\BaseController;
  14. use jinDouYun\Cache\SystemCache;
  15. use Util\WeiXin\Miniprogram;
  16. use Util\WeiXin\Offiaccount;
  17. use Util\ByteDance\Microapp;
  18. class Login extends BaseController
  19. {
  20. public function __construct($isCheckAcl = false, $isMustLogin = false, $checkToken = true)
  21. {
  22. parent::__construct($isCheckAcl, $isMustLogin, $checkToken);
  23. }
  24. /**
  25. * 微信小程序登陆接口
  26. */
  27. public function login()
  28. {
  29. $code = $this->request->param('code');
  30. if( empty($code) ){
  31. $this->sendOutput('code参数错误',ErrorCode::$paramError);
  32. }
  33. /*
  34. $miniprogramConfigData = Factory::config()->getAppoint('weixin','miniprogram');
  35. if(empty($miniprogramConfigData)){
  36. $this->sendOutput('小程序配置项错误',ErrorCode::$configEroor);
  37. }*/
  38. // 获取当前登录企业的小程序配置
  39. $objSystemCache = new SystemCache();
  40. $miniprogramSetting = $objSystemCache->getAppIdByEnterpriseId($this->onlineEnterpriseId);
  41. if( empty($miniprogramSetting) ){
  42. parent::sendOutput('后台小程序配置项为空', ErrorCode::$configEroor);
  43. }
  44. $miniprogramSetting = json_decode($miniprogramSetting,true);
  45. $objMiniprogram = new Miniprogram($miniprogramSetting['appid'], $miniprogramSetting['APPscrect']);
  46. $result = $objMiniprogram->jscode2session($code);
  47. if ($result->isSuccess()) {
  48. parent::sendOutput($result->getData());
  49. } else {
  50. parent::sendOutput($result->getData(), $result->getErrorCode());
  51. }
  52. }
  53. /**
  54. * 字节跳动小程序登陆接口
  55. */
  56. public function microappLogin()
  57. {
  58. $code = $this->request->param('code');
  59. if( empty($code) ){
  60. $this->sendOutput('参数错误',ErrorCode::$paramError);
  61. }
  62. $miniprogramConfigData = Factory::config()->getAppoint('byteDance','microapp');
  63. if(empty($miniprogramConfigData)){
  64. $this->sendOutput('小程序配置项错误',ErrorCode::$configEroor);
  65. }
  66. $objMicroapp = new Microapp($miniprogramConfigData['appid'], $miniprogramConfigData['appSecret']);
  67. $result = $objMicroapp->code2session($code);
  68. if ($result->isSuccess()) {
  69. parent::sendOutput($result->getData());
  70. } else {
  71. parent::sendOutput($result->getData(), $result->getErrorCode());
  72. }
  73. }
  74. /**
  75. * 生成字节调动小程序二维码
  76. */
  77. public function byteCreateQRCode()
  78. {
  79. $paramsData = $this->request->getRawJson();
  80. $params = [
  81. 'path' => isset($paramsData['path']) ? $paramsData['path'] : '',
  82. 'appname' => isset($paramsData['appname']) ? $paramsData['appname'] : '', // toutiao 今日头条 douyin 都应
  83. ];
  84. foreach ($params as $key => $value) {
  85. if (empty($value)) {
  86. $this->sendOutput($key . '参数错误', ErrorCode::$paramError);
  87. }
  88. }
  89. $miniprogramConfigData = Factory::config()->getAppoint('byteDance','microapp');
  90. if(empty($miniprogramConfigData)){
  91. $this->sendOutput('小程序配置项错误',ErrorCode::$configEroor);
  92. }
  93. $objMicroapp = new Microapp($miniprogramConfigData['appid'], $miniprogramConfigData['appSecret']);
  94. $result = $objMicroapp->token();
  95. if (!$result->isSuccess()) {
  96. parent::sendOutput($result->getData(), $result->getErrorCode());
  97. }
  98. $access_token = $result->getData();
  99. $result = $objMicroapp->createQRCode($access_token, $params['path']);
  100. if ($result->isSuccess()) {
  101. parent::sendOutput($result->getData());
  102. } else {
  103. parent::sendOutput($result->getData(), $result->getErrorCode());
  104. }
  105. }
  106. /**
  107. * 生成微信小程序二维码
  108. */
  109. public function createwxaqrcode()
  110. {
  111. $paramsData = $this->request->getRawJson();
  112. $params = [
  113. 'path' => isset($paramsData['path']) ? $paramsData['path'] : '',
  114. 'params' => isset($paramsData['params']) ? $paramsData['params'] : 0,
  115. ];
  116. foreach ($params as $key => $value) {
  117. if (empty($value)) {
  118. $this->sendOutput($key . '参数错误', ErrorCode::$paramError);
  119. }
  120. }
  121. /*
  122. $miniprogramConfigData = Factory::config()->getAppoint('weixin','miniprogram');
  123. if(empty($miniprogramConfigData)){
  124. $this->sendOutput('小程序配置项错误',ErrorCode::$configEroor);
  125. }
  126. $objOffiaccount = new Offiaccount($miniprogramConfigData['appid'], $miniprogramConfigData['appSecret']);*/
  127. // 获取当前登录企业的小程序配置
  128. $objSystemCache = new SystemCache();
  129. $miniprogramSetting = $objSystemCache->getAppIdByEnterpriseId($this->onlineEnterpriseId);
  130. if( empty($miniprogramSetting) ){
  131. parent::sendOutput('后台小程序配置项为空', ErrorCode::$configEroor);
  132. }
  133. $miniprogramSetting = json_decode($miniprogramSetting,true);
  134. $objOffiaccount = new Offiaccount($miniprogramSetting['appid'], $miniprogramSetting['APPscrect']);
  135. $result = $objOffiaccount->token();
  136. if (!$result->isSuccess()) {
  137. parent::sendOutput($result->getData(), $result->getErrorCode());
  138. }
  139. $access_token = $result->getData();
  140. $objMiniprogram = new Miniprogram($miniprogramSetting['appid'], $miniprogramSetting['APPscrect']);
  141. $result = $objMiniprogram->getwxacodeunlimit($access_token, $params);
  142. if ($result->isSuccess()) {
  143. $url = MP_FILE_URL.$result->getData();
  144. parent::sendOutput($url);
  145. } else {
  146. parent::sendOutput($result->getData(), $result->getErrorCode());
  147. }
  148. }
  149. /**
  150. * 获取基础access_token接口
  151. */
  152. public function token()
  153. {
  154. $offiaccountConfigData = Factory::config()->getAppoint('weixin','offiaccount');
  155. if(empty($offiaccountConfigData)){
  156. $this->sendOutput('公众号配置项错误',ErrorCode::$configEroor);
  157. }
  158. $objOffiaccount = new Offiaccount($offiaccountConfigData['appid'], $offiaccountConfigData['appSecret']);
  159. $result = $objOffiaccount->token();
  160. if ($result->isSuccess()) {
  161. parent::sendOutput($result->getData());
  162. } else {
  163. parent::sendOutput($result->getData(), $result->getErrorCode());
  164. }
  165. }
  166. /**
  167. * 获取网页access_token
  168. */
  169. public function access_token()
  170. {
  171. $code = $this->request->param('code');
  172. if( empty($code) ){
  173. $this->sendOutput('参数错误',ErrorCode::$paramError);
  174. }
  175. $offiaccountConfigData = Factory::config()->getAppoint('weixin','offiaccount');
  176. if(empty($offiaccountConfigData)){
  177. $this->sendOutput('公众号配置项错误',ErrorCode::$configEroor);
  178. }
  179. $objOffiaccount = new Offiaccount($offiaccountConfigData['appid'], $offiaccountConfigData['appSecret']);
  180. $result = $objOffiaccount->access_token($code);
  181. if ($result->isSuccess()) {
  182. parent::sendOutput($result->getData());
  183. } else {
  184. parent::sendOutput($result->getData(), $result->getErrorCode());
  185. }
  186. }
  187. /**
  188. * app微信授权获取个人信息
  189. */
  190. public function userinfo()
  191. {
  192. $params = $this->request->getRawJson();
  193. $params = [
  194. 'openid' => $params['openid'],
  195. 'access_token' => $params['access_token'],
  196. 'source' => getArrayItem($params, 'source', StatusCode::$source['miniProgram']),
  197. ];
  198. foreach($params as $key => $value){
  199. if(empty($value) && $value !== 0){
  200. $this->sendOutput($key.'参数错误', ErrorCode::$paramError );
  201. }
  202. }
  203. if($params['source'] == StatusCode::$source['weiXinBrowser']){
  204. $offiaccountConfigData = Factory::config()->getAppoint('weixin','offiaccount');
  205. if(empty($offiaccountConfigData)){
  206. $this->sendOutput('公众号配置项错误',ErrorCode::$configEroor);
  207. }
  208. $objOffiaccount = new Offiaccount($offiaccountConfigData['appid'], $offiaccountConfigData['appSecret']);
  209. $result = $objOffiaccount->userinfo($params['access_token'], $params['openid']);
  210. }else{
  211. $objSystemCache = new SystemCache();
  212. $miniprogramSetting = $objSystemCache->getAppIdByEnterpriseId($this->onlineEnterpriseId);
  213. if( empty($miniprogramSetting) ){
  214. parent::sendOutput('后台小程序配置项为空', ErrorCode::$configEroor);
  215. }
  216. $miniprogramSetting = json_decode($miniprogramSetting,true);
  217. $objOffiaccount = new Offiaccount($miniprogramSetting['appid'], $miniprogramSetting['APPscrect']);
  218. $result = $objOffiaccount->userinfo($params['access_token'], $params['openid']);
  219. }
  220. if (!$result->isSuccess()) {
  221. parent::sendOutput($result->getData(), $result->getErrorCode());
  222. }
  223. $userinfo = $result->getData();
  224. parent::sendOutput($userinfo);
  225. }
  226. /**
  227. * js-sdk授权接口
  228. */
  229. public function getJsSdkConfig()
  230. {
  231. $offiaccountConfigData = Factory::config()->getAppoint('weixin','offiaccount');
  232. if(empty($offiaccountConfigData)){
  233. $this->sendOutput('公众号配置项错误',ErrorCode::$configEroor);
  234. }
  235. $objOffiaccount = new Offiaccount($offiaccountConfigData['appid'], $offiaccountConfigData['appSecret']);
  236. $result = $objOffiaccount->getJsSdkConfig();
  237. if ($result->isSuccess()) {
  238. parent::sendOutput($result->getData());
  239. } else {
  240. parent::sendOutput($result->getData(), $result->getErrorCode());
  241. }
  242. }
  243. /**
  244. * 解密数据
  245. */
  246. public function decryptData()
  247. {
  248. $params = $this->request->getRawJson();
  249. $params = [
  250. 'openid' => isset($params['openid']) ? $params['openid'] : '',
  251. 'iv' => isset($params['iv']) ? $params['iv'] : '',
  252. 'encryptedData' => isset($params['encryptedData']) ? $params['encryptedData'] : '',
  253. ];
  254. foreach($params as $key => $value){
  255. if(empty($value) && $value !== 0){
  256. $this->sendOutput($key.'参数错误', ErrorCode::$paramError );
  257. }
  258. }
  259. /*
  260. $miniprogramConfigData = Factory::config()->getAppoint('weixin','miniprogram');
  261. if(empty($miniprogramConfigData)){
  262. $this->sendOutput('小程序配置项错误',ErrorCode::$configEroor);
  263. }*/
  264. // 获取当前登录企业的小程序配置
  265. $objSystemCache = new SystemCache();
  266. $miniprogramSetting = $objSystemCache->getAppIdByEnterpriseId($this->onlineEnterpriseId);
  267. if( empty($miniprogramSetting) ){
  268. parent::sendOutput('后台小程序配置项为空', ErrorCode::$configEroor);
  269. }
  270. $miniprogramSetting = json_decode($miniprogramSetting,true);
  271. $objMiniprogram = new Miniprogram($miniprogramSetting['appid'], $miniprogramSetting['APPscrect']);
  272. $result = $objMiniprogram->decryptData($params['iv'], $params['encryptedData'], $params['openid']);
  273. if ($result->isSuccess()) {
  274. parent::sendOutput($result->getData());
  275. } else {
  276. parent::sendOutput($result->getData(), $result->getErrorCode());
  277. }
  278. }
  279. }