Login.Class.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  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. parent::sendOutput($result->getData());
  144. } else {
  145. parent::sendOutput($result->getData(), $result->getErrorCode());
  146. }
  147. }
  148. /**
  149. * 获取基础access_token接口
  150. */
  151. public function token()
  152. {
  153. $offiaccountConfigData = Factory::config()->getAppoint('weixin','offiaccount');
  154. if(empty($offiaccountConfigData)){
  155. $this->sendOutput('公众号配置项错误',ErrorCode::$configEroor);
  156. }
  157. $objOffiaccount = new Offiaccount($offiaccountConfigData['appid'], $offiaccountConfigData['appSecret']);
  158. $result = $objOffiaccount->token();
  159. if ($result->isSuccess()) {
  160. parent::sendOutput($result->getData());
  161. } else {
  162. parent::sendOutput($result->getData(), $result->getErrorCode());
  163. }
  164. }
  165. /**
  166. * 获取网页access_token
  167. */
  168. public function access_token()
  169. {
  170. $code = $this->request->param('code');
  171. if( empty($code) ){
  172. $this->sendOutput('参数错误',ErrorCode::$paramError);
  173. }
  174. $offiaccountConfigData = Factory::config()->getAppoint('weixin','offiaccount');
  175. if(empty($offiaccountConfigData)){
  176. $this->sendOutput('公众号配置项错误',ErrorCode::$configEroor);
  177. }
  178. $objOffiaccount = new Offiaccount($offiaccountConfigData['appid'], $offiaccountConfigData['appSecret']);
  179. $result = $objOffiaccount->access_token($code);
  180. if ($result->isSuccess()) {
  181. parent::sendOutput($result->getData());
  182. } else {
  183. parent::sendOutput($result->getData(), $result->getErrorCode());
  184. }
  185. }
  186. /**
  187. * app微信授权获取个人信息
  188. */
  189. public function userinfo()
  190. {
  191. $params = $this->request->getRawJson();
  192. $params = [
  193. 'openid' => $params['openid'],
  194. 'access_token' => $params['access_token'],
  195. 'source' => getArrayItem($params, 'source', StatusCode::$source['miniProgram']),
  196. ];
  197. foreach($params as $key => $value){
  198. if(empty($value) && $value !== 0){
  199. $this->sendOutput($key.'参数错误', ErrorCode::$paramError );
  200. }
  201. }
  202. if($params['source'] == StatusCode::$source['weiXinBrowser']){
  203. $offiaccountConfigData = Factory::config()->getAppoint('weixin','offiaccount');
  204. if(empty($offiaccountConfigData)){
  205. $this->sendOutput('公众号配置项错误',ErrorCode::$configEroor);
  206. }
  207. $objOffiaccount = new Offiaccount($offiaccountConfigData['appid'], $offiaccountConfigData['appSecret']);
  208. $result = $objOffiaccount->userinfo($params['access_token'], $params['openid']);
  209. }else{
  210. $objSystemCache = new SystemCache();
  211. $miniprogramSetting = $objSystemCache->getAppIdByEnterpriseId($this->onlineEnterpriseId);
  212. if( empty($miniprogramSetting) ){
  213. parent::sendOutput('后台小程序配置项为空', ErrorCode::$configEroor);
  214. }
  215. $miniprogramSetting = json_decode($miniprogramSetting,true);
  216. $objOffiaccount = new Offiaccount($miniprogramSetting['appid'], $miniprogramSetting['APPscrect']);
  217. $result = $objOffiaccount->userinfo($params['access_token'], $params['openid']);
  218. }
  219. if (!$result->isSuccess()) {
  220. parent::sendOutput($result->getData(), $result->getErrorCode());
  221. }
  222. $userinfo = $result->getData();
  223. parent::sendOutput($userinfo);
  224. }
  225. /**
  226. * js-sdk授权接口
  227. */
  228. public function getJsSdkConfig()
  229. {
  230. $offiaccountConfigData = Factory::config()->getAppoint('weixin','offiaccount');
  231. if(empty($offiaccountConfigData)){
  232. $this->sendOutput('公众号配置项错误',ErrorCode::$configEroor);
  233. }
  234. $objOffiaccount = new Offiaccount($offiaccountConfigData['appid'], $offiaccountConfigData['appSecret']);
  235. $result = $objOffiaccount->getJsSdkConfig();
  236. if ($result->isSuccess()) {
  237. parent::sendOutput($result->getData());
  238. } else {
  239. parent::sendOutput($result->getData(), $result->getErrorCode());
  240. }
  241. }
  242. /**
  243. * 解密数据
  244. */
  245. public function decryptData()
  246. {
  247. $params = $this->request->getRawJson();
  248. $params = [
  249. 'openid' => isset($params['openid']) ? $params['openid'] : '',
  250. 'iv' => isset($params['iv']) ? $params['iv'] : '',
  251. 'encryptedData' => isset($params['encryptedData']) ? $params['encryptedData'] : '',
  252. ];
  253. foreach($params as $key => $value){
  254. if(empty($value) && $value !== 0){
  255. $this->sendOutput($key.'参数错误', ErrorCode::$paramError );
  256. }
  257. }
  258. /*
  259. $miniprogramConfigData = Factory::config()->getAppoint('weixin','miniprogram');
  260. if(empty($miniprogramConfigData)){
  261. $this->sendOutput('小程序配置项错误',ErrorCode::$configEroor);
  262. }*/
  263. // 获取当前登录企业的小程序配置
  264. $objSystemCache = new SystemCache();
  265. $miniprogramSetting = $objSystemCache->getAppIdByEnterpriseId($this->onlineEnterpriseId);
  266. if( empty($miniprogramSetting) ){
  267. parent::sendOutput('后台小程序配置项为空', ErrorCode::$configEroor);
  268. }
  269. $miniprogramSetting = json_decode($miniprogramSetting,true);
  270. $objMiniprogram = new Miniprogram($miniprogramSetting['appid'], $miniprogramSetting['APPscrect']);
  271. $result = $objMiniprogram->decryptData($params['iv'], $params['encryptedData'], $params['openid']);
  272. if ($result->isSuccess()) {
  273. parent::sendOutput($result->getData());
  274. } else {
  275. parent::sendOutput($result->getData(), $result->getErrorCode());
  276. }
  277. }
  278. }