周大胖子 发表于 2020-7-10 17:18:29

调用腾讯云短信的代码

前提: 成功安装了腾讯云的php SDK 1. 创建个config文件 留存腾讯云短信相关配置,以及 腾讯应用的ID和秘钥
2. 然后 搞一个控制器 我这叫
CommonController
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;



// 都是腾讯云短信的接口
// require '/path/to/vendor/autoload.php';
// require_once('TCloudAutoLoader.php');
// require '/path/to/vendor/autoload.php';
// 导入 SMS 的 client
use TencentCloud\Sms\V20190711\SmsClient;
// 导入要请求接口对应的 Request 类
use TencentCloud\Sms\V20190711\Models\SendSmsRequest;
use TencentCloud\Common\Exception\TencentCloudSDKException;
use TencentCloud\Common\Credential;
// 导入可选配置类
use TencentCloud\Common\Profile\ClientProfile;
use TencentCloud\Common\Profile\HttpProfile;



/**
*写一个通用回调函数
*/
class CommonController extends Controller
{

    /**
   *腾讯云短信接口
   *$phone要发送短信的手机号
   *$code   发送过来的验证码
   *$smgId对应的短信模板ID
   *$qianmingText    签名用到的汉字[必须是经过审核的]
   */

    public function getTxSmg($phone,$code,$smgID,$qianmingText)
    {

      $phone = $phone;

      // 模板ID
      $smgId = $smgID;

      // 签名文字[得是备案过的]
      $qianmingText = $qianmingText;

      $config = array();
      // 短信应用ID 注意 是应用的
      $config['SDKAppID'] = config('tengxunsmg.smg.SDKAppID');
      // 短信应用ID 注意 是应用的
      
      // App Key是用来校验短信发送合法性的密码
      $config['AppKey'] = config('tengxunsmg.smg.AppKey');

      // 这是一对调用腾讯云应用的秘钥 在个人api 秘钥管理中
      $config['SecretId'] = config('tengxunsmg.smg.SecretId');
      $config['SecretKey'] = config('tengxunsmg.smg.SecretKey');

      try {
            /* 必要步骤:
             * 实例化一个认证对象,入参需要传入腾讯云账户密钥对 secretId 和 secretKey
             * 本示例采用从环境变量读取的方式,需要预先在环境变量中设置这两个值
             * 您也可以直接在代码中写入密钥对,但需谨防泄露,不要将代码复制、上传或者分享给他人
             * CAM 密钥查询:https://console.cloud.tencent.com/cam/capi */
      
            $cred = new Credential($config['SecretId'], $config['SecretKey']);
            //这好像是密钥 不是skdappid
            //$cred = new Credential(getenv("TENCENTCLOUD_SECRET_ID"), getenv("TENCENTCLOUD_SECRET_KEY"));
      
            // 实例化一个 http 选项,可选,无特殊需求时可以跳过
            $httpProfile = new HttpProfile();
            $httpProfile->setReqMethod("POST");// POST 请求(默认为 POST 请求)
            $httpProfile->setReqTimeout(30);    // 请求超时时间,单位为秒(默认60秒)
            $httpProfile->setEndpoint("sms.tencentcloudapi.com");// 指定接入地域域名(默认就近接入)
      
            // 实例化一个 client 选项,可选,无特殊需求时可以跳过
            $clientProfile = new ClientProfile();
            $clientProfile->setSignMethod("HmacSHA256");// 指定签名算法(默认为 HmacSHA256)
            $clientProfile->setHttpProfile($httpProfile);
      
            // 实例化 SMS 的 client 对象,clientProfile 是可选的
            $client = new SmsClient($cred, "ap-shanghai", $clientProfile);
      
            // 实例化一个 sms 发送短信请求对象,每个接口都会对应一个 request 对象。
            $req = new SendSmsRequest();
      
            /* 填充请求参数,这里 request 对象的成员变量即对应接口的入参
             * 您可以通过官网接口文档或跳转到 request 对象的定义处查看请求参数的定义
             * 基本类型的设置:
               * 帮助链接:
               * 短信控制台:https://console.cloud.tencent.com/smsv2
               * sms helper:https://cloud.tencent.com/document/product/382/3773 */
      
            /* 短信应用 ID: 在 [短信控制台] 添加应用后生成的实际 SDKAppID,例如1400006666 */
            $req->SmsSdkAppid =$config['SDKAppID'];
            /* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,可登录 [短信控制台] 查看签名信息 */
            $req->Sign = $qianmingText;
            /* 短信码号扩展号: 默认未开通,如需开通请联系 */
            $req->ExtendCode = "0";// 用不上
            /* 下发手机号码,采用 e.164 标准,+[国家或地区码][手机号]
               * 例如+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号*/
            // $req->PhoneNumberSet = array("+8613711112222", "+8613711333222", "+8613711144422");
            $req->PhoneNumberSet = array('+86'.$phone);
            /* 国际/港澳台短信 senderid: 国内短信填空,默认未开通,如需开通请联系 */
            $req->SenderId = "xxx";// 用不上
            /* 用户的 session 内容: 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
            $req->SessionContext = "xxx";// 用不上
            /* 模板 ID: 必须填写已审核通过的模板 ID。可登录 [短信控制台] 查看模板 ID */
            $req->TemplateID = $smgId;
            /* 模板参数: 若无模板参数,则设置为空*/
            $req->TemplateParamSet = array(
                $code
            );
      
      
            // 通过 client 对象调用 SendSms 方法发起请求。注意请求方法名与请求对象是对应的
            $resp = $client->SendSms($req);
      
            // 输出 JSON 格式的字符串回包
            // print_r($resp->toJsonString());
            $m = $resp;

            // 判断是否成功 Fee 数量 为发送成功数量
            if($m){
                  
                return $m->SendStatusSet->Fee;
            
            }

            
      
            // 可以取出单个值,您可以通过官网接口文档或跳转到 response 对象的定义处查看返回字段的定义
            // print_r($resp->TotalCount);
      }
      catch(TencentCloudSDKException $e) {
            // echo $e;
      }

    }


}


3. 第三步就是调用啦注意传进去的参数基本都是字符串
    /**
   * 测试腾讯云短信接口的使用
   */
    public function t()
    {

      $common = new Common();

      // $common->sendsmg($phone,'101312','#code#='.$code);
      // dd($common->getTxSmg());
      // dd(config('tengxunsmg.smg.SecretId'));
      // $common->getTxSmg('15351888596', '456789' ,"653935" ,"权客信息科技" );
      dd($common->getTxSmg('17851252090', '888888' ,"653935" ,"权客信息科技" ));

    }







页: [1]
查看完整版本: 调用腾讯云短信的代码