WeixinController.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?php
  2. /**
  3. * 微信模块
  4. * @author wesmiler
  5. */
  6. namespace app\weixin\controller;
  7. use app\admin\model\CarModel;
  8. use app\weixin\model\Commands;
  9. use app\weixin\model\Member;
  10. use app\weixin\model\Wechat;
  11. use app\weixin\service\PRedis;
  12. use cmf\controller\HomeBaseController;
  13. use herui\HeruiApi;
  14. class WeixinController extends HomeBaseController
  15. {
  16. /**
  17. * 入口
  18. */
  19. public function index()
  20. {
  21. $echostr = input('echostr', '');
  22. if ($echostr) {
  23. Wechat::valid();
  24. } else {
  25. $this->responseMsg();
  26. }
  27. }
  28. /**
  29. * 授权登录
  30. */
  31. public function auth()
  32. {
  33. $code = input('code', '');
  34. $rebackUrl = input('reback_url','');
  35. if($rebackUrl){
  36. session('reback_url',$rebackUrl);
  37. }
  38. $rebackUrl = session('reback_url');
  39. $rebackUrl = $rebackUrl? $rebackUrl : url('/weixin/match/index', null, false, true);
  40. if ($code) {
  41. Wechat::init();
  42. $userInfo = session('userInfo');
  43. if ($userInfo) {
  44. $this->redirect($rebackUrl);
  45. exit;
  46. }
  47. }
  48. Wechat::redirectUrl(urlencode($rebackUrl));
  49. }
  50. /**
  51. * 生成菜单
  52. */
  53. public function createMenu()
  54. {
  55. $key = input('key', '');
  56. $callKey = config('weixin.callKey');
  57. if ($callKey && ($key != $callKey || empty($key))) {
  58. showJson('error', 2009);
  59. }
  60. $result = Wechat::createMenu();
  61. showJson('success', 2011, $result);
  62. }
  63. /**
  64. * 消息接收处理
  65. */
  66. public function responseMsg()
  67. {
  68. $postStr = file_get_contents("php://input");
  69. if (!empty($postStr)) {
  70. libxml_disable_entity_loader(true);
  71. $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  72. PRedis::set('weixin:response:'.((string)$postObj->FromUserName).'_'.date('YmdHis'), (array)$postObj, 600);
  73. if ($postObj->MsgType == 'event') {
  74. // 推送事件处理
  75. Wechat::catchEvent((array)$postObj);
  76. } else if ($postObj->MsgType == 'text'){
  77. Wechat::responseText((array)$postObj);
  78. }
  79. }
  80. exit;
  81. }
  82. }
  83. ?>