Alisms.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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\widget;
  9. use app\common\model\ConfigApis;
  10. use app\system\model\MemberBank;
  11. use app\system\model\MemberBankBill;
  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. public function putSms($phone_id,$member_id = 0,$appname = null){
  22. //手机号验证码
  23. $info = ConfigApis::config('alisms');
  24. if(!$info){
  25. return ['code'=>0,'message'=>'服务商未配置短信服务'];
  26. }
  27. $data['product'] = empty($appname) ? $info['product'] : $appname;
  28. $data['phone_id'] = $phone_id;
  29. $data['code'] = getcode(6);
  30. if($member_id > 0 && !empty($info['price'])){
  31. $rel = MemberBank::moneyJudge($member_id,$info['price']); //判断余额
  32. if($rel){
  33. return ['code'=>0,'message'=>'帐号余额不足,请联系应用服务商'];
  34. }
  35. MemberBankBill::create(['state' => 1,'money' => $info['price'],'member_id' => $member_id,'message'=> '发送短信费用','update_time' => time()]);
  36. MemberBank::moneyUpdate($member_id,-$info['price']);
  37. }
  38. //开启调试,面发送本地调试
  39. if(config('app_debug')){
  40. self::setSms($data);
  41. return ['code'=>200,'message'=>"已发送[{$data['code']}]"];
  42. }
  43. $sendSms = new SendSms;
  44. $sendSms->setPhoneNumbers($phone_id);
  45. $sendSms->setSignName($info['sign_name']);
  46. $sendSms->setTemplateCode($info['tpl_id']);
  47. $sendSms->setTemplateParam($data);
  48. $sendSms->setOutId(date('YmdHis'));
  49. $config = ['accessKeyId' => $info['aes_key'],'accessKeySecret' => $info['secret']];
  50. $client = new Client($config);
  51. $result = $client->execute($sendSms);
  52. if($result->Code == 'OK'){
  53. self::setSms($data);
  54. return ['code'=>200,'message'=>'已发送,10分钟内有效'];
  55. }else{
  56. return ['code'=>0,'message'=>$result->Message];
  57. }
  58. }
  59. /**
  60. * 设置验证码
  61. * @param string $phone_id 验证手机号
  62. * @param string $sms_code 验证码验证码
  63. */
  64. public function setSms(array $data){
  65. Session::set(self::sms_session_name,$data,self::sms_session_scope);
  66. return true;
  67. }
  68. /**
  69. * 判断验证码
  70. * @param string $phone_id 验证手机号
  71. * @param string $sms_code 验证码验证码
  72. */
  73. public function isSms($phone_id,$sms_code){
  74. if(!Session::has(self::sms_session_name,self::sms_session_scope)){
  75. return false;
  76. }
  77. $smscode = Session::get(self::sms_session_name,self::sms_session_scope);
  78. if($smscode['phone_id'] != $phone_id || $smscode['code'] != $sms_code){
  79. return false;
  80. }
  81. Session::clear(self::sms_session_scope);
  82. return true;
  83. }
  84. }