Expedite.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. <?php
  2. namespace app\api\controller;
  3. use AlibabaCloud\Client\AlibabaCloud;
  4. use AlibabaCloud\Client\Exception\ClientException;
  5. use AlibabaCloud\Client\Exception\ServerException;
  6. use app\common\model\StoreBanner;
  7. use app\common\model\TopSearch;
  8. use app\common\model\UserLevel;
  9. use Dm\Request\V20151123 as Dm;
  10. use think\cache\driver\Redis;
  11. use think\Db;
  12. /**
  13. * @title 不需要验证token接口
  14. * @controller Expedite
  15. * @package app\api\controller
  16. */
  17. class Expedite extends Base
  18. {
  19. public function initialize(){
  20. parent::initialize();
  21. parent::setUid();
  22. }
  23. /**
  24. * @title 获取首页轮播图
  25. * @desc 获取首页轮播图
  26. * @author qc
  27. * @url /api/Expedite/getBanner
  28. * @method GET
  29. * @header name:Authorization require:1 desc:Token
  30. * @param name:place type:int default:1 desc:展示位置1视频首页
  31. * @param name:num type:int default:5 desc:查询数量
  32. * @return name:cover type:srting default:-- desc:图片路径
  33. * @return name:link type:srting default:-- desc:链接
  34. */
  35. public function getBanner()
  36. {
  37. $num = input('get.num',5);
  38. $place = input('get.place',1);
  39. $list = StoreBanner::field('id,cover,link')
  40. ->where(['is_deleted'=>0,'place'=>$place])->limit(0,$num)
  41. ->order('sort desc ,id desc')->select()->toArray();
  42. $this->success('ok',['list'=>$list]);
  43. }
  44. /**
  45. * @title 获取会员等级设置
  46. * @desc 获取会员等级设置
  47. * @author qc
  48. * @url /api/Expedite/getUserLevelSet
  49. * @method GET
  50. * @header name:Authorization require:1 desc:Token
  51. * @return name:id type:int default:-- desc:等级id
  52. * @return name:name type:string default:-- desc:等级名称
  53. * @return name:logo type:string default:-- desc:图片
  54. * @return name:price type:array default:-- desc:价格设置【为空,,不能购买】
  55. * @return name:price.title type:string default:-- desc:标题
  56. * @return name:price.time type:string default:-- desc:时间(单位月)
  57. * @return name:price.price type:float default:-- desc:价格
  58. */
  59. public function getUserLevelSet()
  60. {
  61. $list = UserLevel::field('id,logo,name,price')->where("price is not null and price != ''")->select()->toArray();
  62. $this->success('ok',['list'=>$list]);
  63. }
  64. /**
  65. * @title 获取热搜设置
  66. * @desc 获取热搜设置
  67. * @author qc
  68. * @url /api/Expedite/getTopSearch
  69. * @method GET
  70. * @return name:title type:string default:-- desc:标题
  71. */
  72. public function getTopSearch()
  73. {
  74. $list = TopSearch::field('id,title')->where(['status'=>1,'is_deleted'=>0])->order('sort desc,id desc')->select()->toArray();
  75. $this->success('ok',['list'=>$list]);
  76. }
  77. /**
  78. * @title 发送短信验证码
  79. * @desc 发送短信验证码
  80. * @author qc
  81. * @url /api/Expedite/sendSms
  82. * @method POST
  83. * @tag 短信验证码
  84. * @param name:phone type:int require:1 default:-- desc:要获取验证码的手机号
  85. * @return name:code type:string default:-- desc:验证码
  86. */
  87. public function sendSms(){
  88. $phone = input('post.phone');
  89. if(empty($phone)) $this ->error('参数错误');
  90. $code = rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9);
  91. AlibabaCloud::accessKeyClient('LTAI5tJ5p12drZegeWVG33xZ', '82UWAiY5e5wH8tSkRvMtqVoGO0h8SB')
  92. ->regionId('cn-hangzhou')->asDefaultClient();
  93. try {
  94. $result = AlibabaCloud::rpc()
  95. ->product('Dysmsapi')
  96. ->version('2017-05-25')
  97. ->action('SendSms')
  98. ->method('POST')
  99. ->host('dysmsapi.aliyuncs.com')
  100. ->options([
  101. 'query' => [
  102. 'RegionId' => "cn-hangzhou",
  103. 'PhoneNumbers' => $phone,
  104. 'SignName' => "搞一下汽车电子",
  105. 'TemplateCode' => "SMS_234397351",
  106. 'TemplateParam' => json_encode(array("code"=>$code)),
  107. ],
  108. ])->request();
  109. $result = $result->toArray();
  110. if($result['Code'] == "OK") {
  111. $sms_data = array(
  112. 'phone'=>$phone,
  113. 'code'=>$code,
  114. 'result'=>$result['Message']
  115. );
  116. Db::name('store_member_sms')->insert($sms_data);
  117. $this->success('发送成功',['code'=>$code]);
  118. }else{
  119. $this->error('发送失败');
  120. }
  121. } catch (ClientException $e) {
  122. echo $e->getErrorMessage() . PHP_EOL;
  123. } catch (ServerException $e) {
  124. echo $e->getErrorMessage() . PHP_EOL;
  125. }
  126. }
  127. /**
  128. * @title 发送邮箱验证码
  129. * @desc 发送邮箱验证码
  130. * @author qc
  131. * @url /api/Expedite/emailSms
  132. * @method POST
  133. * @tag 邮箱验证码
  134. * @param name:email type:int require:1 default:-- desc:邮箱
  135. * @return name:code type:string default:-- desc:验证码
  136. */
  137. function emailSms(){
  138. $email = input('post.email');
  139. $code = rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9);
  140. require_once env('root_path').'/vendor/aliyunmail/aliyun-php-sdk-core/Config.php';
  141. $iClientProfile = \DefaultProfile::getProfile("cn-hangzhou", "LTAI5tJ5p12drZegeWVG33xZ", "82UWAiY5e5wH8tSkRvMtqVoGO0h8SB");
  142. $client = new \DefaultAcsClient($iClientProfile);
  143. $request = new Dm\SingleSendMailRequest();
  144. $request->setAccountName("gyx@yzm.gyxqcdz.com");
  145. $request->setFromAlias("[验证码]");
  146. $request->setAddressType(1);
  147. $request->setTagName("zonghuzhuche");
  148. $request->setReplyToAddress("true");
  149. $request->setToAddress($email);
  150. $request->setSubject("验证码");
  151. $html_body = '验证码:'.$code;
  152. $request->setHtmlBody($html_body);
  153. try {
  154. $send_res = $client->getAcsResponse($request);
  155. $sms_data = array(
  156. 'phone'=>$email,
  157. 'code'=>$code,
  158. 'result'=>'OK'
  159. );
  160. Db::name('store_member_sms')->insert($sms_data);
  161. $this->success('发送成功',['code'=>$code]);
  162. } catch (ClientException $e) {
  163. $this->error($e->getErrorMessage());
  164. // print_r($e->getErrorCode());
  165. // print_r($e->getErrorMessage());
  166. } catch (ServerException $e) {
  167. $this->error($e->getErrorMessage());
  168. // print_r($e->getErrorCode());
  169. // print_r($e->getErrorMessage());
  170. }
  171. }
  172. /**
  173. * @title 获取签名
  174. * @desc 获取签名
  175. * @url /api/Expedite/getWeChatSign
  176. * @method POST
  177. * @param name:url type:string default:-- desc:页面地址
  178. * @return name:appid type:string default:-- desc:appid
  179. * @return name:noncestr type:string default:-- desc:随机字符
  180. * @return name:timestamp type:string default:-- desc:时间戳
  181. * @return name:sign type:string default:-- desc:签名
  182. * @return name:ticket type:string default:-- desc:ticket
  183. **/
  184. public function getWeChatSign(){
  185. $urls = input('post.url');
  186. $appid = config('app.official_account')['appid'];
  187. $secret = config('app.official_account')['secret'];
  188. $redis = new Redis();
  189. $access_token = $redis->get('access_token');
  190. if (!$access_token){
  191. $access_token = '';
  192. $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$secret";
  193. $res= http_curl($url);
  194. if (isset($res['access_token'])){
  195. $redis->set('access_token',$res['access_token'],'7000');
  196. $access_token = $res['access_token'];
  197. }
  198. }
  199. $url2 ="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$access_token."&type=jsapi";
  200. $res2=http_curl($url2);
  201. if (!isset($res2) || $res2['errcode']!=0) $this->error('获取ticket失败');
  202. $timestamp = time();
  203. $noncestr = get32Str(15);
  204. $string = "jsapi_ticket=".$res2['ticket']."&noncestr=$noncestr&timestamp=$timestamp&url=".$urls;
  205. $sign = sha1($string);
  206. $return = [
  207. 'appid'=>$appid,
  208. 'noncestr'=>$noncestr,
  209. 'timestamp'=>$timestamp,
  210. 'url'=>$urls,
  211. 'sign'=>$sign,
  212. 'ticket'=>$res2['ticket']
  213. ];
  214. $this->success('成功',$return);
  215. }
  216. /**
  217. * @title 获取平台文案设置
  218. * @desc 获取平台文案设置
  219. * @author qc
  220. * @url /api/Expedite/getSysConfig
  221. * @method GET
  222. * @param name:search_name type:string default:-- desc:根据下面名称查(不传查全部的)
  223. * @return name:agreement type:string default:-- desc:用户协议
  224. * @return name:about_us type:string default:-- desc:关于我们
  225. * @return name:privacy type:string default:-- desc:隐私政策
  226. * @return name:user_equity type:string default:-- desc:会员权益
  227. * @return name:customer_service type:string default:-- desc:客服设置
  228. * @return name:original_pact type:string default:-- desc:原创公约
  229. * @return name:app_name type:string default:-- desc:平台名称
  230. * @return name:app_logo type:string default:-- desc:平台logo
  231. */
  232. public function getSysConfig(){
  233. $search_name = input('get.search_name');
  234. $con_name = $search_name? [$search_name] : ['agreement','about_us','privacy','user_equity','customer_service','original_pact'];
  235. $set = Db::name('system_config')->where('name','in',$con_name)->select();
  236. $ret = [];
  237. foreach ($set as $value) {
  238. $ret[$value['name']]=$value['value'];
  239. }
  240. $this->success('获取成功',$ret);
  241. }
  242. /**
  243. * @title 获取客服设置
  244. * @desc 获取客服设置
  245. * @author qc
  246. * @url /api/Expedite/getServiceSet
  247. * @method GET
  248. * @return name:service_qr_code type:string default:-- desc:客服二维码
  249. * @return name:service_phone type:string default:-- desc:客服电话
  250. * @return name:service_email type:string default:-- desc:客服邮箱
  251. */
  252. public function getServiceSet(){
  253. $con_name = ['service_qr_code','service_phone','service_email'];
  254. $set = Db::name('system_config')->where('name','in',$con_name)->select();
  255. $ret = [];
  256. foreach ($set as $value) {
  257. $ret[$value['name']]=$value['value'];
  258. }
  259. $this->success('获取成功',$ret);
  260. }
  261. }