Sms.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php namespace App\Servers\Tencent;
  2. // 导入 SMS 的 client
  3. use TencentCloud\Sms\V20190711\SmsClient;
  4. // 导入 SMS 的 client
  5. // 导入要请求接口对应的 Request 类
  6. use TencentCloud\Sms\V20190711\Models\SendSmsRequest;
  7. use TencentCloud\Common\Exception\TencentCloudSDKException;
  8. use TencentCloud\Common\Credential;
  9. /**
  10. * 验证码模型
  11. *
  12. * @author 刘相欣
  13. */
  14. class Sms{
  15. /**
  16. * 发送短信
  17. * @param string $phone 手机号。国际/港澳台消息需加国际区号。支持向不同的手机号码发送短信,手机号码之间以半角逗号(,)分隔。上限为 200 个手机号码。批量发送相对于单条发送,及时性稍有延迟。验证码类型的短信,建议单条发送。
  18. * @param string $signName 签名名称。
  19. * @param string $templateCode 模板ID。
  20. * @param array $param 模板参数。短信模板变量对应的实际值。支持传入多个参数, json格式,如 {"name":"张三","number":"1390000****"}
  21. *
  22. */
  23. public function sendSms(string $phone,string $signName,string $templateCode,array $param=[]){
  24. // 切割数据
  25. $phone = explode(',',$phone);
  26. // 循环手机号
  27. foreach ($phone as $key => $value) {
  28. // 组合手机号
  29. $phone[$key] = '+86'.trim($value);
  30. }
  31. // 参数必须是字符串
  32. foreach ($param as $key => $value) {
  33. // 组合手机号
  34. $param[$key] = (string) $value;
  35. }
  36. // 腾讯云账户密钥对
  37. $secretId = config('tencent.secretId','');
  38. $secretKey = config('tencent.secretKey','');
  39. // 调用地域
  40. $region = config('tencent.sms.region','');
  41. // SDKappid
  42. $sdkAppid = config('tencent.sms.sdkAppid','');
  43. // 尝试执行
  44. try {
  45. // 入参需要传入腾讯云账户密钥对 secretId 和 secretKey
  46. $cred = new Credential($secretId, $secretKey);
  47. // 实例化 SMS 的 client 对象,clientProfile 是可选的
  48. $client = new SmsClient($cred, $region);
  49. // 实例化一个 sms 发送短信请求对象,每个接口都会对应一个 request 对象。
  50. $req = new SendSmsRequest();
  51. /* 短信应用 ID: 在 [短信控制台] 添加应用后生成的实际 SDKAppID,例如1400006666 */
  52. $req->SmsSdkAppid = $sdkAppid;
  53. /* 模板 ID: 必须填写已审核通过的模板 ID。可登录 [短信控制台] 查看模板 ID */
  54. $req->TemplateID = $templateCode;
  55. /* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,可登录 [短信控制台] 查看签名信息 */
  56. $req->Sign = $signName;
  57. /* 模板参数: 若无模板参数,则设置为空*/
  58. $req->TemplateParamSet = $param;
  59. /* 下发手机号码,采用 e.164 标准,+[国家或地区码][手机号]
  60. * 例如+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号*/
  61. $req->PhoneNumberSet = $phone;//['+86'.$phone];
  62. // 通过 client 对象调用 SendSms 方法发起请求。注意请求方法名与请求对象是对应的
  63. $resp = $client->SendSms($req);
  64. // 发送成功
  65. return ['success'=>$resp->SendStatusSet];
  66. }catch(TencentCloudSDKException $e) {
  67. return ['error'=>$e->getMessage()];
  68. }
  69. }
  70. }