MiniSms.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. namespace addons\service\library;
  3. use app\api\model\service\MiniTemplate;
  4. use app\api\model\service\ProjectConfigure;
  5. use think\Cache;
  6. class MiniSms
  7. {
  8. protected $reqUrl = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=';
  9. protected $accessUrl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=';
  10. protected $userAppid ;
  11. protected $userSecret;
  12. public function __construct()
  13. {
  14. $serviceConfig = ProjectConfigure::getProjectConfig();
  15. $this->userAppid = $serviceConfig['userappid'];
  16. $this->userSecret = $serviceConfig['usersecret'];
  17. $this->skillAppid = $serviceConfig['skillappid'];
  18. $this->skillSecret = $serviceConfig['skillsecret'];
  19. $this->shopAppid = $serviceConfig['shopappid'];
  20. $this->shopSecret = $serviceConfig['shopsecret'];
  21. }
  22. /**
  23. * @param $touser
  24. * @param $template_id
  25. * @param $order_address
  26. * @param $order_type
  27. * @param $time
  28. * @param $order_status
  29. * @param $orer_remarks
  30. * @return bool|string
  31. */
  32. public function sendMessage($params)
  33. {
  34. switch ($params['type'])
  35. {
  36. case 0:
  37. $appid = $this->userAppid;
  38. $appsecret = $this->userSecret;
  39. break;
  40. case 1:
  41. $appid = $this->skillAppid;
  42. $appsecret = $this->skillSecret;
  43. break;
  44. case 2:
  45. $appid = $this->shopAppid;
  46. $appsecret = $this->shopSecret;
  47. break;
  48. }
  49. $access_token = $this->getAccessToken($appid,$appsecret,$params['type']);
  50. $urls = $this->reqUrl. $access_token;
  51. $data = [];
  52. $data['touser'] = $params['openid'];
  53. $templateConfig = MiniTemplate::getTemplateConfig($params['templateAttr']);
  54. if(empty($templateConfig['template_id']))
  55. {
  56. return true;
  57. }
  58. $data['template_id'] = $templateConfig['template_id'];
  59. //点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
  60. $data['page'] = $templateConfig['url'].$params['id'];
  61. $data['data'] = MiniTemplate::spellParams($params);
  62. $data['miniprogram_state'] = '';
  63. self::curlPost($urls,json_encode($data));
  64. return true;
  65. }
  66. private function getAccessToken($appid,$secret,$type)
  67. {
  68. switch ($type)
  69. {
  70. case 0:
  71. $key = 'user_wx_access_token';
  72. break;
  73. case 1:
  74. $key = 'skill_wx_access_token';
  75. break;
  76. case 2:
  77. $key = 'shop_wx_access_token';
  78. break;
  79. default :
  80. $key = 'user_wx_access_token';
  81. }
  82. $token = Cache::get($key);
  83. if(!$token)
  84. {
  85. $url = $this->accessUrl . $appid . '&secret=' . $secret;
  86. $res = json_decode(file_get_contents($url), true);
  87. $token = $res['access_token'];
  88. Cache::set($key,$token,7000);
  89. }
  90. return $token;
  91. }
  92. //发送post请求
  93. protected static function curlPost($url,$data)
  94. {
  95. $ch = curl_init();
  96. $params[CURLOPT_URL] = $url; //请求url地址
  97. $params[CURLOPT_HEADER] = FALSE; //是否返回响应头信息
  98. $params[CURLOPT_SSL_VERIFYPEER] = false;
  99. $params[CURLOPT_SSL_VERIFYHOST] = false;
  100. $params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回
  101. $params[CURLOPT_POST] = true;
  102. $params[CURLOPT_POSTFIELDS] = $data;
  103. curl_setopt_array($ch, $params); //传入curl参数
  104. $content = curl_exec($ch); //执行
  105. curl_close($ch); //关闭连接
  106. return $content;
  107. }
  108. }