分类归档 微擎

为什么上不了bet356 通过为什么上不了bet356

mysql通过一个关键字查询多个字段的方法

微擎中我们可以这样查询:

if (!(empty($_GPC['realname']))) 
		{
			$_GPC['realname'] = trim($_GPC['realname']);
			$condition .= ' and ( dm.realname like :realname or dm.nickname like :realname or dm.mobile like :realname or dm.id like :realname)';
			$params[':realname'] = '%' . $_GPC['realname'] . '%';
		}

dm是我们给数据库命名的别名,把要查询的多个字段用or链接在一起,放在括号内。

为什么上不了bet356 通过为什么上不了bet356

微擎开发之后台文件上传组件与原生方法

使用前请务必 load()->func(‘tpl’); 加载模板组件函数,并加载了系统的头部模板文件。

图片上传与选择控件,此组件支持单图上传,代码如下:

{php echo tpl_form_field_image($name, $value = '', $default = '', $options = array());}
{php echo tpl_form_field_image('single-image');}

多图上传组件,代码如下:

{php echo tpl_form_field_multi_image($name, $value = array(), $options = array());}
{php echo tpl_form_field_multi_image('multi-image');}

单音频选择与上传,代码如下:

{php echo tpl_form_field_multi_audio($name, $value = array(), $options = array());}
{php echo tpl_form_field_multi_audio('multi-audio');}

单视频选择与上传,代码如下:

{php echo tpl_form_field_video($name, $value = '', $options = array());}
{php echo tpl_form_field_video('video');}

微信单图片选择与上传,代码如下:

{php echo tpl_form_field_wechat_image($name, $value = '', $default = '', $options = array());}
{php echo tpl_form_field_wechat_image('wechat-single-image');}

微信多图片选择与上传,代码如下:

{php echo tpl_form_field_wechat_multi_image($name, $value = array(), $options = array());}
{php echo tpl_form_field_wechat_multi_image('wechat-multi-image');}

微信单音频选择与上传,代码如下:

{php echo tpl_form_field_wechat_voice($name, $value = '', $options = array());}
{php echo tpl_form_field_wechat_voice('wechat-voice');}

微信单视频选择与上传,代码如下:

{php echo tpl_form_field_wechat_video($name, $value = '', $options = array());}
{php echo tpl_form_field_wechat_video('wechat-video');}

二、原型函数:

您可以通过自己调用下列函数,实现自定义上传图片、音频和视频的上传。

1、自定义图片上传函数

util.image(val, callback, options);

1、 val image 值 ;

2、 callback 上传图片完成后,执行的回调函数 ;

3、 options 上传选项

2、自定义音频和视频(多媒体)上传函数

util.audio(val, callback, options);

1、 val audio 值 ;

2、 callback 上传图片完成后,执行的回调函数 ;

3、 options 上传选项

3、自定义微信图片上传函数

util.wechat_image(val, callback, options);

1、 val image 值 ;

2、 callback 上传图片完成后,执行的回调函数 ;

3、 options 上传选项

4、自定义微信音频和视频上传函数

util.wechat_audio(val, callback, options);

1、 val audio 值 ;

2、 callback 上传图片完成后,执行的回调函数 ;

3、 options 上传选项

为什么上不了bet356 通过为什么上不了bet356

微擎硬核版实现原生上传文件(微信支付文件)

不多说,直接上代码!

load()->func('file'); //调用上传函数
$dir_url='../attachment/mytime_chdb/cert_2/'.$_W['uniacid']."/"; //上传路径
mkdirs($dir_url); //创建目录
$cfg['rootca']=$_GPC['rootca2']; //接受参数
$cfg['apiclient_cert']=$_GPC['apiclient_cert2'];
$cfg['apiclient_key']=$_GPC['apiclient_key2'];
if ($_FILES["rootca"]["name"]){
if(file_exists($dir_url.$settings["rootca"]))@unlink ($dir_url.$settings["rootca"]);
$cfg['rootca']=TIMESTAMP.".pem";
move_uploaded_file($_FILES["rootca"]["tmp_name"],$dir_url.$cfg['rootca']); //移动到目录下
}
为什么上不了bet356 通过为什么上不了bet356

基于微擎开发 发送短信验证码

在微擎的基础上开发一个PC 官网,发送验证码跟内部插件相互独立,以下是简单整理。

? 一、? 在framework文件夹内 添加alisms.calss.php 和 signaturehelper.class.php:

alisms.class.php

$model),'sms_code',1);//这里是本地自己数据库拿的
        $params["TemplateCode"] = $model;
 
        // fixme 可选: 设置模板参数, 假如模板中存在变量需要替换则为必填项
        $params['TemplateParam'] = Array (
            "code" => $code['code']
        );
 
        // fixme 可选: 设置发送短信流水号
        $params['OutId'] = "";
 
        // fixme 可选: 上行短信扩展码, 扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段
        $params['SmsUpExtendCode'] = "";
 
 
        // *** 需用户填写部分结束, 以下代码若无必要无需更改 ***
        if(!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
            $params["TemplateParam"] = json_encode($params["TemplateParam"]);
        }
 
        // 初始化SignatureHelper实例用于设置参数,签名以及发送请求
        load()->classs('signaturehelper');
        $helper = new Signaturehelper();
 
        // 此处可能会抛出异常,注意catch
        $content = $helper->request(
            $accessKeyId,
            $accessKeySecret,
            "dysmsapi.aliyuncs.com",
            array_merge($params, array(
                "RegionId" => "cn-hangzhou",
                "Action" => "SendSms",
                "Version" => "2018-11-20",
            ))
        );
 
        return  $content;
    }
}

signaturehelper.class.php

 "HMAC-SHA1",
            "SignatureNonce" => uniqid(mt_rand(0,0xffff), true),
            "SignatureVersion" => "1.0",
            "AccessKeyId" => $accessKeyId,
            "Timestamp" => gmdate("Y-m-d\TH:i:s\Z"),
            "Format" => "JSON",
        ), $params);
        ksort($apiParams);
 
        $sortedQueryStringTmp = "";
        foreach ($apiParams as $key => $value) {
            $sortedQueryStringTmp .= "&" . $this->encode($key) . "=" . $this->encode($value);
        }
 
        $stringToSign = "GET&%2F&" . $this->encode(substr($sortedQueryStringTmp, 1));
 
        $sign = base64_encode(hash_hmac("sha1", $stringToSign, $accessKeySecret . "&",true));
 
        $signature = $this->encode($sign);
 
        $url = "http://{$domain}/?Signature={$signature}{$sortedQueryStringTmp}";
 
        try {
            $content = $this->fetchContent($url);
            return json_decode($content);
        } catch( \Exception $e) {
            return false;
        }
    }
 
    private function encode($str)
    {
        $res = urlencode($str);
        $res = preg_replace("/\+/", "%20", $res);
        $res = preg_replace("/\*/", "%2A", $res);
        $res = preg_replace("/%7E/", "~", $res);
        return $res;
    }
 
    private function fetchContent($url) {
        if(function_exists("curl_init")) {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_TIMEOUT, 5);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                "x-sdk-client" => "php/2.0.0"
            ));
            $rtn = curl_exec($ch);
 
            if($rtn === false) {
                trigger_error("[CURL_" . curl_errno($ch) . "]: " . curl_error($ch), E_USER_ERROR);
            }
            curl_close($ch);
 
            return $rtn;
        }
 
        $context = stream_context_create(array(
            "http" => array(
                "method" => "GET",
                "header" => array("x-sdk-client: php/2.0.0"),
            )
        ));
 
        return file_get_contents($url, false, $context);
    }
 
}

二、然后在你的对应控制器中 加入

load()->classs('alisms');
$alisms = new SmsDemo($to, $model, array('code'=>$code));//参数分别是:发送对象,模版,验证码
$send = $alisms->send_sms($to, $model,array('code'=>$code));
为什么上不了bet356 通过为什么上不了bet356

微擎手机短信验证码验证

我们点击获取验证码,执行ajax,ajax执行的php我们命名为verify.php,代码如下:

$phone = $_GPC['uphone'];//发送的电话号码
 
if(!preg_match("/^1[3|4|5|6|7|8|9][0-9]\d{4,8}$/",$phone)){
	$error = array('t' => false,'msg' => "请正确填写手机号码");
	echo json_encode($error);exit;
}else{
	
	include "SmsDemo.php";////**引入发送短信的文件**可修改路径
 
	$alidayv_accesskeyid = 你的阿里大于alidayv_accesskeyid;//  $alidayv_accesskeyid
	$alidayv_accesskeysecret = 你的阿里大于alidayv_accesskeysecret;//  $alidayv_accesskeysecret
	$sms_mb = 你的阿里大于alidayv_muban;//发送短信的模板  $alidayv_muban
	$sms_qm =  你的阿里大于alidayv_qianming;//发送短信的签名 $alidayv_qianming
	
	$chars='0123456789';//此处为随机获取的验证码
	for($i=0;$i<6;$i++){
		$rand.=substr($chars,(mt_rand()%strlen($chars)),1);//验证码
	}
	
//主代码
	$response = SmsDemo::sendSms($phone,$sms_mb,$sms_qm,$alidayv_accesskeyid,$alidayv_accesskeysecret,$rand);
	
	if($response->{'Message'} == 'OK'){//返回的信息 如果ok 那就ok了
		
        //进行其他的操作   --可选   --E
		$sql = '查询之前有没有此账号标识';
		$prarm = array(':uniacid' => $_W['uniacid'] ,':rid' => $rid);
		$old_phone = pdo_fetch($sql, $prarm);
		$now = time();//发送时间
		$overdue = $now+(60*5);//逾期时间  五分钟
		if(!empty($old_phone)){
			$update = array(
				 ***
			);
			pdo_update(***);
		}else{
			$insert = array(
                 ***
			);
			$result = pdo_insert(***);
		}
		//进行其他的操作   --可选   --S
 
		$return['t'] = true;
		$return['msg'] = '验证码发送成功';//返回的信息
	}else{
		$return['t'] = false;
		// $return['msg'] = $response['acsResponse']->{'Message'};//返回的信息
		$return['msg'] = '操作过于频繁或信息错误';//返回的信息
	}
	echo json_encode($return);exit;//返回ajax信息
	// echo "发送短信(sendSms)接口返回的结果:\n";
	// print_r($response);
}

发送短信执行sendDemo.php,代码如下:

**
     * 取得AcsClient
     *
     * @return DefaultAcsClient
     */
    public static function getAcsClient($alidayv_accesskeyid,$alidayv_accesskeysecret) {
        //产品名称:云通信短信服务API产品,开发者无需替换
        $product = "Dysmsapi";
 
        //产品域名,开发者无需替换
        $domain = "dysmsapi.aliyuncs.com";
 
        // TODO 此处需要替换成开发者自己的AK (https://ak-console.aliyun.com/)
        $accessKeyId = $alidayv_accesskeyid; // AccessKeyId
 
        $accessKeySecret = $alidayv_accesskeysecret; // AccessKeySecret
 
        // 暂时不支持多Region
        $region = "cn-hangzhou";
 
        // 服务结点
        $endPointName = "cn-hangzhou";
 
 
        if(static::$acsClient == null) {
 
            //初始化acsClient,暂不支持region化
            $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
 
            // 增加服务结点
            DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);
 
            // 初始化AcsClient用于发起请求
            static::$acsClient = new DefaultAcsClient($profile);
        }
        return static::$acsClient;
    }
 
    /**
     * 发送短信
     * @return stdClass
     */
    public static function sendSms($phone,$sms_mb,$sms_qm,$alidayv_accesskeyid,$alidayv_accesskeysecret,$rand) {
 
        // 初始化SendSmsRequest实例用于设置发送短信的参数
        $request = new SendSmsRequest();
 
        //可选-启用https协议
        //$request->setProtocol("https");
 
        // 必填,设置短信接收号码
        $request->setPhoneNumbers($phone);
 
        // 必填,设置签名名称,应严格按"签名名称"填写,请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign
        $request->setSignName($sms_qm);
 
        // 必填,设置模板CODE,应严格按"模板CODE"填写, 请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/template
        $request->setTemplateCode($sms_mb);
 
        // 可选,设置模板参数, 假如模板中存在变量需要替换则为必填项
        $request->setTemplateParam(json_encode(array(  // 短信模板中字段的值
            "code"=>$rand,
            "product"=>"dsd"
        ), JSON_UNESCAPED_UNICODE));
 
        // 可选,设置流水号
        $request->setOutId("yourOutId");
 
        // 选填,上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
        $request->setSmsUpExtendCode("1234567");
 
        // 发起访问请求
        $acsResponse = static::getAcsClient($alidayv_accesskeyid,$alidayv_accesskeysecret)->getAcsResponse($request);
 
        return $acsResponse;
    }

为什么上不了bet356 我们把阿里云官网下载的接口demo示例中的 api_ask 文件夹放到和SmsDemo.php同级目录中,亦可修改路径 !

为什么上不了bet356 通过为什么上不了bet356

微擎验证自带验证码

html表单代码部分:

?
? ? ?
? ?

php代码部分:

if(checksubmit()){ //验证是否是表单提交
$code = $_GPC['code'];? //接受code
$hash = md5($code . $_W['config']['setting']['authkey']); //微擎验证码加密方式
if($_GPC['__code'] != $hash) { //对比
message('你输入的验证码不正确, 请重新输入.');
}
}