WeixinService.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. namespace App\Service\Weixin;
  3. use App\Service\Service;
  4. use Illuminate\Support\Facades\Redis;
  5. class WeixinService extends Service
  6. {
  7. const APPID = 'wxe048bcdcc21aae6e';
  8. const APPSECRET = '191789c5b4ef2b3d5b9e79bb62428092';
  9. const ACCESS_URL = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s';
  10. const OPENID = '';
  11. const TOKEN = '';
  12. const KEY = 'weixintnine';
  13. public function getToken(){
  14. $token_key = self::KEY.'_'.'token';
  15. $token = Redis::get($token_key);
  16. if(! empty($token)){
  17. $url = sprintf(self::ACCESS_URL,self::APPID,self::APPSECRET);
  18. $res = $this->curlOpen($url);
  19. $res = json_decode($res,true);
  20. if(isset($res['errmsg'])) return [false,$res['errmsg']];
  21. if(!isset($res['access_token'])) return [false,'request error'];
  22. $token = $res['access_token'];
  23. $expire_time = $res['expires_in']-300;
  24. Redis::set($token_key,$token);
  25. Redis::expire($token_key, $expire_time);
  26. return [true,$token];
  27. }
  28. return [true,$token];
  29. }
  30. public function getOpenid($data){
  31. $code = $data['code'];
  32. $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code';
  33. $url = sprintf($url,self::APPID,self::APPSECRET,$code);
  34. $res = $this->curlOpen($url);
  35. $res = json_decode($res,true);
  36. if(!isset($res['openid'])) return [false,$res['errmsg']??'request error'];
  37. $openid = $res['openid'];
  38. return [true,['openid' => $openid]];
  39. }
  40. public function setWebHook($data){
  41. // file_put_contents('22.txt',json_encode($data));
  42. $uri = isset($data['uri']) ? $data['uri'] : '';
  43. $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
  44. $param = isset($data['param']) ? $data['param'] : '';
  45. $redirect_uri = urlencode('http://hdapi.qingyaokeji.com/wx/getUnionid?uri='.$uri.'&param='.$param);
  46. $url = sprintf($url,self::APPID,$redirect_uri);
  47. header("Location:".$url);exit;
  48. echo 'ok';die;
  49. }
  50. public function getUnionid($data){
  51. file_put_contents('22.txt',date('YmdHis').json_encode($data));
  52. // echo $data['code'];
  53. if(isset($data['code'])) {
  54. list($status,$openid) = $this->getOpenid($data);
  55. if(!$status) return [false,$openid];
  56. $uri = $data['uri'];
  57. $openid = $openid['openid'];
  58. $param = isset($data['param']) ? $data['param'] : '';
  59. $url = 'http://hd.qingyaokeji.com/#/wxGet?uri='.$uri.'&openid='.$openid.'&param='.$param;
  60. header('Location:'.$url);exit();
  61. }
  62. }
  63. public function sendTmpMsg($data){
  64. // $openid = 'okXNa69ggEX61KvHUhCq9PcGrPKI';
  65. $data = [
  66. 'openid' => 'okXNa69ggEX61KvHUhCq9PcGrPKI',
  67. 'tempid' => 'qaD9NBasjTNKDBzIuinSpLDMy6zWbPtRb1HN8ZOjY-Y',
  68. 'reload_url' => '',
  69. 'first' => '工资发放',
  70. 'remark' => '请查收',
  71. 'detail' => [
  72. 'thing1' => '姓名',
  73. 'amount2' => '10',
  74. 'time3' => '2023-09-01',
  75. 'thing4' => '类型',
  76. ]
  77. ];
  78. if(!isset($data['detail'])) return [false,'invalid detail'];
  79. if(!isset($data['openid'])) return [false,'invalid openid'];
  80. if(!isset($data['tempid'])) return [false,'invalid tempid'];
  81. if(!isset($data['reload_url'])) return [false,'invalid reload_url'];
  82. $templateID = $data['tempid'];
  83. $reload_url = $data['reload_url'];
  84. list($status,$token) = $this->getToken();
  85. if(!$status) return [false,$token];
  86. $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$token;
  87. $post = '{
  88. "touser":"'.$data['openid'].'",
  89. "template_id":"'.$templateID.'",
  90. "url":"'.$reload_url.'",
  91. "data":{
  92. "first": {
  93. "value":"'.$data['first'].'",
  94. "color":"#173177"
  95. },
  96. %s
  97. "remark":{
  98. "value":"'.$data['remark'].'",
  99. "color":"#173177"
  100. }
  101. }
  102. }';
  103. $content = "";
  104. foreach ($data['detail'] as $k=>$v){
  105. $content .= '"'.$k.'": {
  106. "value":"'.$v.'",
  107. "color":"#173177"
  108. },';
  109. }
  110. $post = sprintf($post,$content);
  111. // var_dump($post);
  112. // var_dump(json_decode($post));die;
  113. // var_dump($url);
  114. // var_dump(json_encode(json_decode($post)));
  115. $res = $this->curlOpen($url,['post'=>$post]);
  116. $res = json_decode($res,true);
  117. if(isset($res['errcode'])&&$res['errcode'] != 0) return [false,$res['errmsg']];
  118. if(isset($res['errcode'])&&$res['errcode'] === 0) return [true,''];
  119. return [false,json_encode($res)];
  120. }
  121. }