WechatOpController.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests;
  5. use Illuminate\Http\Request;
  6. use App\Libs\Classes\BLogger;
  7. use App\Libs\Classes\WxSign;
  8. use EasyWeChat\Foundation\Application;
  9. use WechatOP;
  10. use Illuminate\Support\Facades\Redis;
  11. use Doctrine\Common\Cache\PredisCache;
  12. class WechatOpController extends Controller
  13. {
  14. public $openPlatform;
  15. public $WxSign;
  16. // public $wechat_group_gzh;
  17. public function __construct($gzh_app_id='') {
  18. v('start_wechat_op_construct');
  19. $options = [
  20. // ...
  21. 'open_platform' => [
  22. 'app_id' => env('WECHAT_OP_APPID'),
  23. 'secret' => env('WECHAT_OP_SECRET'),
  24. 'token' => env('WECHAT_OP_TOKEN'),
  25. 'aes_key' => env('WECHAT_OP_AES_KEY'),
  26. ],
  27. // ...
  28. ];
  29. v('$options');v($options);
  30. $app = new Application($options);
  31. $this->openPlatform = $app->open_platform;
  32. v('end_wechat_op_construct');
  33. $this->WxSign = new WxSign();
  34. $this->set_init_param();
  35. v('post:');v($_POST);
  36. }
  37. // 初始化post,get变量,兼容两种
  38. public function set_init_param(){
  39. if(empty($_POST)) {
  40. $_POST = $_REQUEST;
  41. }
  42. if(empty($_REQUEST)) {
  43. $_REQUEST = $_POST;
  44. }
  45. if(isset($_POST['_url'])) {
  46. unset($_POST['_url']);
  47. }
  48. if(isset($_REQUEST['_url'])) {
  49. unset($_REQUEST['_url']);
  50. }
  51. }
  52. public function redirect_url($response_url){
  53. // v('redirect_url in:'.$response_url);
  54. header("Location:".$response_url);
  55. exit;
  56. }
  57. /**
  58. * 检查签名和时间戳
  59. * @param unknown_type $request
  60. */
  61. public function check_sign_params($request){
  62. $result = array('code'=>1,'msg'=>'','data'=>'');
  63. $timestamp = !empty($request->get('timestamp'))?$request->get('timestamp'):'';
  64. $sign = !empty($request->get('sign'))?$request->get('sign'):'';
  65. v('check_sign_params:$timestamp:'.$timestamp.' $sign:'.$sign);
  66. if(empty($timestamp) || empty($sign)){
  67. $result['code'] = 0;
  68. $result['msg'] = 'invalid param';
  69. return $result;
  70. }
  71. $timestamp = $request->get('timestamp');
  72. $sign = $request->get('sign');
  73. $now = microtime(true);
  74. $diff = $now - $timestamp;
  75. v('timestamp:'.$timestamp.' now:'.$now.' diff:'.$diff);
  76. // 时间戳8小时内
  77. if($diff > 28*3600){
  78. $result['code'] = 0;
  79. $result['msg'] = 'invalid time';
  80. return $result;
  81. }
  82. $my_sign = $this->WxSign->get_sign($request->all());
  83. v('check_sign_params sign:'.$sign.' my_sign:'.$my_sign.' info:'.json_encode($request->all()));
  84. if($sign != $my_sign){
  85. $result['code'] = 0;
  86. $result['msg'] = 'invalid sign';
  87. return $result;
  88. }
  89. return $result;
  90. }
  91. }