Alisms.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <?php
  2. /**
  3. * @copyright Copyright (c) 2017 https://www.sapixx.com All rights reserved.
  4. * @license Licensed (http://www.apache.org/licenses/LICENSE-2.0).
  5. * @author pillar<ltmn@qq.com>
  6. * 阿里云短信验证码
  7. */
  8. namespace app\common\facade\library;
  9. use app\common\model\SystemApis;
  10. use app\common\model\SystemMemberBank;
  11. use app\common\model\SystemMemberBankBill;
  12. use think\facade\Session;
  13. use Flc\Dysms\Client;
  14. use Flc\Dysms\Request\SendSms;
  15. class Alisms{
  16. const sms_session_scope = 'sapixx#com/alisms/scope'; //SESSION作用域
  17. const sms_session_name = 'sapixx#com/alisms/value'; //SESSION值
  18. /**
  19. * 短信验证码发送
  20. *
  21. * @param integer $phone_id 接受手机号
  22. * @param integer $member_id 用户ID
  23. * @param string $tpl_name 签名
  24. * @return void
  25. */
  26. public function putSms($phone_id,$member_id = 0,$tpl_name = ''){
  27. //手机号验证码
  28. $info = SystemApis::config('alisms');
  29. if(!$info){
  30. return ['code'=>0,'message'=>'服务商未配置短信服务'];
  31. }
  32. $data['phone_id'] = $phone_id;
  33. $data['code'] = getcode(6);
  34. if($member_id > 0 && !empty($info['price'])){
  35. $rel = SystemMemberBank::moneyJudge($member_id,$info['price']); //判断余额
  36. if($rel){
  37. return ['code'=>0,'message'=>'帐号余额不足,请联系应用服务商'];
  38. }
  39. SystemMemberBankBill::create(['state' => 1,'money' => $info['price'],'member_id' => $member_id,'message'=> '发送短信费用','update_time' => time()]);
  40. SystemMemberBank::moneyUpdate($member_id,-$info['price']);
  41. }
  42. //开启调试,面发送本地调试
  43. if(config('app_debug')){
  44. self::setSms($data);
  45. return ['code'=>200,'message'=>"已发送[{$data['code']}]"];
  46. }
  47. $sendSms = new SendSms;
  48. $sendSms->setPhoneNumbers($phone_id);
  49. $sendSms->setSignName(empty($tpl_name) ? $info['sign_name'] : $tpl_name);
  50. $sendSms->setTemplateCode($info['tpl_id']);
  51. $sendSms->setTemplateParam($data);
  52. $sendSms->setOutId(date('YmdHis'));
  53. $client = new Client(['accessKeyId' => $info['aes_key'],'accessKeySecret' => $info['secret']]);
  54. $result = $client->execute($sendSms);
  55. if($result->Code == 'OK'){
  56. self::setSms($data);
  57. return ['code'=>200,'message'=>'已发送,10分钟内有效'];
  58. }else{
  59. return ['code'=>0,'message'=>$result->Message];
  60. }
  61. }
  62. /**
  63. * 默认短信发送接口
  64. *
  65. * @param [type] $phone_id 接受短信的手机号
  66. * @param [type] $data 短信变量数据 $data['sign_name'] = '应用签名'
  67. * @param [type] $tpl_id 短信模板ID
  68. * @param integer $member_id 用户ID
  69. * @return void
  70. */
  71. public function sendSms($phone_id,$data,$tpl_id,$member_id = 0){
  72. //手机号验证码
  73. $info = SystemApis::config('alisms');
  74. if(!$info){
  75. return ['code'=>0,'message'=>'服务商未配置短信服务'];
  76. }
  77. if($member_id > 0 && !empty($info['price'])){
  78. $rel = SystemMemberBank::moneyJudge($member_id,$info['price']); //判断余额
  79. if($rel){
  80. return ['code'=>0,'message'=>'帐号余额不足,请联系应用服务商'];
  81. }
  82. SystemMemberBankBill::create(['state' => 1,'money' => $info['price'],'member_id' => $member_id,'message'=> '发送短信费用','update_time' => time()]);
  83. SystemMemberBank::moneyUpdate($member_id,-$info['price']);
  84. }
  85. $tpl_name = empty($data['sign_name']) ? $info['sign_name'] : $data['sign_name'];
  86. unset($data['sign_name']);
  87. $sendSms = new SendSms;
  88. $sendSms->setPhoneNumbers($phone_id);
  89. $sendSms->setSignName($tpl_name);
  90. $sendSms->setTemplateCode($tpl_id);
  91. $sendSms->setTemplateParam($data);
  92. $sendSms->setOutId(date('YmdHis'));
  93. $client = new Client(['accessKeyId' => $info['aes_key'],'accessKeySecret' => $info['secret']]);
  94. $result = $client->execute($sendSms);
  95. if($result->Code == 'OK'){
  96. return ['code'=>200,'message'=>'已发送'];
  97. }else{
  98. return ['code'=>0,'message'=>$result->Message];
  99. }
  100. }
  101. /**
  102. * 设置验证码
  103. * @param string $phone_id 验证手机号
  104. * @param string $sms_code 验证码验证码
  105. */
  106. public function setSms(array $data){
  107. Session::set(self::sms_session_name,$data,self::sms_session_scope);
  108. return true;
  109. }
  110. /**
  111. * 判断验证码
  112. * @param string $phone_id 验证手机号
  113. * @param string $sms_code 验证码验证码
  114. */
  115. public function isSms($phone_id,$sms_code){
  116. if(!Session::has(self::sms_session_name,self::sms_session_scope)){
  117. return false;
  118. }
  119. $smscode = Session::get(self::sms_session_name,self::sms_session_scope);
  120. if($smscode['phone_id'] != $phone_id || $smscode['code'] != $sms_code){
  121. return false;
  122. }
  123. Session::clear(self::sms_session_scope);
  124. return true;
  125. }
  126. }