微信短信验证码注意事项(tp3.2-腾讯云)

1.项目需求

发送验证码;或者短信提醒;

2.思路实现,

使用的是腾讯云的云通信功能(需要结合腾讯的文档进行编写)

3.代码实现

    //发送信息传入手机号,参数name
    public function smsact(){
		$name = I('get.name');
		$tel = I('get.tel');//获取短信发送的收件人
		$appId = '**********';//模板标识
		$Appkey = '*****************';//短信对接秘钥
		$random = $this->generate_code();//得到随机数
		$tpl_id = '164858';//腾讯云上的短信模板ID
		$time = time();//获取当前时间戳
		$sig = $this->sigsum($tel,$Appkey,$random,$time);//app凭证
		//建立数组数据包
		$params1 = array(
			"tel"=>array('nationcode'=>'86','mobile'=>$tel),
			"tpl_id"=>$tpl_id,
			"params"=>array($name,$tel),
			"sig"=>$sig,
			"time"=>$time
			);
		//将数组数据包转换成JSON数据包
		$params = json_encode($params1);

		//服务器请求路径
		$url = "https://yun.tim.qq.com/v5/tlssmssvr/sendsms?sdkappid={$appId}&random={$random}";
		//调用请求
		$data = $this->http_post($url,$params);
		$data = json_decode(json_encode(json_decode($data)),TRUE);
		//判断是否返回成功
		if($data['result']==0){
			//将随机数放进数组里
			echo 1;
		}
		//返回数据
		$this->ajaxReturn($data);
	} 
    
     //加密sha256

     /**
	 * app凭证
	 * @param  [type] $mobile  [电话]
	 * @param  [type] $AppKey  [sdkappid对应的appkey,需要业务方高度保密]
	 * @param  [type] $strRand [系统生成的随机数]
	 * @param  [type] $strTime [当前时间戳]
	 * @return [type]  data    [app凭证]
	 */
	public function sigsum($tel,$appkey,$strRand,$strTime){
		//hash算法指定sha256算法
		$str = 'appkey='.$appkey.'&random='.$strRand.'&time='.$strTime.'&mobile='.$tel;
		$sig = hash("sha256",$str);
		return $sig;
	}
    
    
    /**
	   * @param string $api_url 接口地址
	   * @param array $param post参数
	   * @param int $timeout 超时时间
	   * @return bool
	   */
	private function http_post( $api_url = '' , $param = array() , $timeout = 45 ){
	  
	    if( !$api_url ){
	      die("error api_url");
	    }
	  
	    $ch = curl_init();
	    curl_setopt( $ch, CURLOPT_URL, $api_url );
	  
	    curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_0 );
	    curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
	    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE);
	    curl_setopt( $ch, CURLOPT_HEADER, FALSE);
	  
	    if( parse_url( $api_url )['scheme'] == 'https' ){
	      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST , FALSE);
	      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER , FALSE);
	    }
	  
	    curl_setopt( $ch, CURLOPT_HTTPAUTH , CURLAUTH_BASIC);
	    curl_setopt( $ch, CURLOPT_USERPWD , 'api:key-'.$this->_api_key );
	    curl_setopt( $ch, CURLOPT_POST, TRUE);
	    curl_setopt( $ch, CURLOPT_POSTFIELDS, $param );
	  
	    $res  = curl_exec( $ch );
	    $error = curl_error( $ch );
	    curl_close( $ch );
	    if( $error ){
	      $this->_last_error[] = $error;
	      return FALSE;
	    }
	    return $res;
	}

注意事项

1.微信验证码接口附带两个参数apid加上随机数

2.json加密的包跟随接口一起传到服务器

2.tp3.2 php使用的加密方式出现的问题sha256加密方式需要进行hash的转变附属图片

 

1 协议说明 协议 HTTP POST 编码格式 UTF8 URL 举例:https://yun.tim.qq.com/v5/tlssmssvr/sendsms?sdkappid=xxxxx&random=xxxx 接口说明 给用户发短信验证码短信通知,营销短信(内容长度不超过450字)。 注:sdkappid请填写您在腾讯云上申请到的,random请填成随机数。 2 请求包体 包体为json字符串,参数如下: { "tel": { //如需使用国际电话号码通用格式,如:"+8613788888888" ,请使用sendisms接口见下注 "nationcode": "86", //国家码 "mobile": "13788888888" //手机号码 }, "type": 0, //0:普通短信;1:营销短信(强调:要按需填值,不然会影响到业务的正常使用) "msg": "你的验证码是1234", //utf8编码,需要匹配审核通过的模板内容 "sig": "ecab4881ee80ad3d76bb1da68387428ca752eb885e52621a3129dcf4d9bc4fd4", //app凭证,具体计算方式见下注 "time": 1457336869, //unix时间戳,请求发起时间,如果和系统时间相差超过10分钟则会返回失败 "extend": "", //通道扩展码,可选字段,默认没有开通(需要填空)。 //在短信回复场景中,腾讯server会原样返回,开发者可依此区分是哪种类型的回复 "ext": "" //用户的session内容,腾讯server回包中会原样返回,可选字段,不需要就填空。 } 注: 1、"msg"字段需要匹配审核通过的模板内容 如果您的模板是"你的验证码是{1}",则"msg"字段可赋值为:"你的验证码是xxxx"。(其中"xxxx"为下发的验证码) 如果您有多个短信签名,请将需要的短信签名放在短信内容前面 例如您有"【腾讯科技】","【腾讯云】"两个签名,但是想以"【腾讯云】"签名发送短信, 则"msg"字段可赋值为:"【腾讯云】你的验证码是xxxx"。(其中"xxxx"为下发的验证码) 2、"extend"字段的配置请联系腾讯云短信技术支持 3、sendisms接口,"tel"字段为国际电话号码通用格式,如:"+8613788888888" 4、"sig"字段根据公式sha256(appkey=$appkey&random=$random&time=$time&mobile=$mobile)生成 伪代码如下: string strMobile = "13788888888"; //tel的mobile字段的内容 string strAppKey = "5f03a35d00ee52a21327ab048186a2c4"; //sdkappid对应的appkey,需要业务方高度保密 string strRand = "7226249334"; //url中的random字段的值 string strTime = "1457336869"; //unix时间戳 string sig = sha256(appkey=5f03a35d00ee52a21327ab048186a2c4&random=7226249334&time=1457336869&mobile=13788888888) = ecab4881ee80ad3d76bb1da68387428ca752eb885e52621a3129dcf4d9bc4fd4; 3 应答包体 { "result": 0, //0表示成功(计费依据),非0表示失败 "errmsg": "OK", //result非0时的具体错误信息 "ext": "", //用户的session内容,腾讯server回包中会原样返回 "sid": "xxxxxxx", //标识本次发送id,标识一次短信下发记录 "fee": 1 //短信计费的条数 } 1.需要申请腾讯云短信的 appid 和 appkey  (详见 https://console.cloud.tencent.com/sms) 2.需要申请一个 短信签名+ 短信模版
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值