WechatmpController.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. namespace app\index\controller;
  3. use think\exception\ValidateException;
  4. use app\model\Openid;
  5. use app\samos\wechat\Wechatmp;
  6. use function Qiniu\entry;
  7. class WechatmpController extends Base
  8. {
  9. public function wechat()
  10. {
  11. $backurl = input('param.backurl');
  12. $app = Wechatmp::makemp();
  13. if (!empty($app)) {
  14. $oauth = $app->oauth;
  15. //回调地址
  16. $callback_url = gethttpshost() . $_SERVER["SCRIPT_NAME"] . '?from=mp&s=/index/wechatmp/wechatres&i=' . weid() . '&xmtoken=' . $this->getAppToken() . '&uid=' . input('param.uid') . '&backurl=' . urlencode($backurl);
  17. // 将响应输出
  18. $redirectUrl = $oauth->scopes(['snsapi_base'])->redirect($callback_url);
  19. header("Location: {$redirectUrl}");
  20. } else {
  21. $this->eothtmlmsg();
  22. }
  23. }
  24. public function wechatuserinfo()
  25. {
  26. $backurl = input('param.backurl');
  27. $app = Wechatmp::makemp();
  28. if (!empty($app)) {
  29. $oauth = $app->oauth;
  30. //回调地址
  31. $callback_url = gethttpshost() . $_SERVER["SCRIPT_NAME"] . '?from=mp&s=/index/wechatmp/wechatres&i=' . weid() . '&xmtoken=' . $this->getAppToken() . '&uid=' . input('param.uid') . '&backurl=' . urlencode($backurl);
  32. $redirectUrl = $oauth->scopes(['snsapi_userinfo'])->redirect($callback_url);
  33. // 将响应输出
  34. header("Location: {$redirectUrl}");
  35. } else {
  36. $this->eothtmlmsg();
  37. }
  38. }
  39. public function wechatres()
  40. {
  41. $app = Wechatmp::makemp();
  42. if (!empty($app)) {
  43. $oauth = $app->oauth;
  44. $code = input('get.code');
  45. $user = $oauth->userFromCode($code);
  46. //print_r($user);}
  47. $uid = input('get.uid', '', 'serach_in');
  48. if ($uid == 'undefined' || $uid == 'null') {
  49. $uid = '';
  50. }
  51. $xmtoken = input('get.xmtoken', '', 'serach_in');
  52. $openid = $user->getId();
  53. if (empty($openid)) {
  54. $openid = $user['token_response']['openid'];
  55. }
  56. if (empty($openid)) {
  57. return $this->json(['msg' => 'openid获取不成功', 'data' => $user]);
  58. }
  59. if (!empty($uid)) {
  60. Openid::addupdate([
  61. 'openid' => $openid,
  62. 'ptype' => 'mp',
  63. 'uid' => $uid
  64. ]);
  65. }
  66. $data = $this->userInfo;
  67. $data['ptype'] = 'mp';
  68. $data['openid'] = $openid;
  69. $data['nickname'] = $user->getNickname();
  70. $data['avatar'] = $user->getAvatar();
  71. $data['upnickname'] = $user->getNickname();
  72. $data['upavatar'] = $user->getAvatar();
  73. $data['weid'] = weid();
  74. $this->setAppToken($data, $xmtoken);
  75. $backurl = input('get.backurl');
  76. $backurl = str_replace("xmtokenvalue", $xmtoken, $backurl);
  77. return redirect($backurl);
  78. } else {
  79. $this->eothtmlmsg();
  80. }
  81. }
  82. public function getopenid()
  83. {
  84. $backurl = input('param.backurl');
  85. $app = Wechatmp::makemp();
  86. if (!empty($app)) {
  87. $oauth = $app->oauth;
  88. //回调地址
  89. $callback_url = gethttpshost() . $_SERVER["SCRIPT_NAME"] . '?from=mp&s=/index/wechatmp/getopenidres&i=' . weid() . '&xmtoken=' . $this->getAppToken() . '&uid=' . input('param.uid', '', 'serach_in') . '&backurl=' . urlencode($backurl);
  90. $redirectUrl = $oauth->scopes(['snsapi_base'])->redirect($callback_url);
  91. header("Location: {$redirectUrl}");
  92. } else {
  93. $this->eothtmlmsg();
  94. }
  95. }
  96. public function getopenidres()
  97. {
  98. $app = Wechatmp::makemp();
  99. if (!empty($app)) {
  100. $oauth = $app->oauth;
  101. // 获取 OAuth 授权结果用户信息
  102. $code = input('get.code');
  103. $user = $oauth->userFromCode($code);
  104. $openid = $user->getId();
  105. if (empty($openid)) {
  106. $openid = $user['token_response']['openid'];
  107. }
  108. $backurl = input('get.backurl');
  109. $backurl = str_replace('#/', '', $backurl);
  110. if (strpos($backurl, '?') !== false) {
  111. $backurl = $backurl . '&openid=' . $openid;
  112. } else {
  113. $backurl = $backurl . '?openid=' . $openid;
  114. }
  115. return redirect($backurl);
  116. } else {
  117. $this->eothtmlmsg();
  118. }
  119. }
  120. function eothtmlmsg()
  121. {
  122. echo <<< EOT
  123. <!DOCTYPE html>
  124. <html lang="zh-cmn-Hans">
  125. <head>
  126. <meta charset="UTF-8">
  127. <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0,viewport-fit=cover">
  128. <title>公众号配置不正确</title>
  129. <link rel="stylesheet" href="static/style/weui.css"/>
  130. </head>
  131. <body ontouchstart data-weui-mode="care" >
  132. <div class="weui-msg">
  133. <div class="weui-msg__icon-area"><i class="weui-icon-warn weui-icon_msg"></i></div>
  134. <div class="weui-msg__text-area">
  135. <h2 style="text-align: center;" class="weui-msg__title">公众号配置不正确</h2>
  136. </div>
  137. </div>
  138. </body>
  139. </html>
  140. EOT;
  141. }
  142. }