<?phpの
名前空間のアプリ\ API \コントローラ。
\ Dbと思い使用します。
使用は、\リクエストを考えます。
\コントローラを考えて使用します。
/ **
*アリクラウドの送信SMS認証コードクラス
* @author管理者
*
* /
クラスSmscode {
//エラーメッセージを保存
公共$エラー。
//アクセスキーID
プライベート$ accessKeyId = '';
//アクセスアクセスキーの秘密
プライベート$ accessKeySecret = '';
//署名
プライベート$ signName = '';
// IDテンプレート
プライベート$ templateCode = '';
パブリック関数__construct($ cofig =配列()){
$ cofig =配列(
'accessKeyId' => 'XXXXXXXXXXXXXXXXXXXX'
'accessKeySecret' => 'XXXXXXXXXXXXXXXXXXXX'
'signName' => 'XXXX'
'templateCode' => 'SMS_XXXXXXX'
);
//設定パラメータ
の$ this - > accessKeyId = $ cofig [ 'accessKeyId'];
の$ this - > accessKeySecret = $ cofig [ 'accessKeySecret'];
の$ this - > signName = $ cofig [ 'signName'];
の$ this - > templateCode = $ cofig [ 'templateCode'];
}
プライベート関数percentEncode($文字列){
$文字列=でurlencode($文字列);
$文字列=にpreg_replace( '/ \ + /'、 '%20'、$文字列);
$文字列=にpreg_replace( '/ \ * /'、 '%の2A'、$文字列);
$文字列=にpreg_replace( '/%7E /'、 '〜'、$文字列);
$文字列を返します。
}
/ **
*署名
*
* @param不明の$パラメータ
* @param不明$ accessKeySecret
* @return文字列
* /
プライベート関数computeSignature($パラメータ、$ accessKeySecret){
ksort($パラメータ)。
$ canonicalizedQueryString = '';
foreachの($キーとして$パラメータ=> $値){
$ canonicalizedQueryString。= '&'。の$ this - > percentEncode($キー)。'='。の$ this - > percentEncode($値);
}
$ stringToSign = '&%2F&GET'。の$ this - > percentencode(SUBSTR($ canonicalizedQueryString、1));
$署名= BASE64_ENCODE(hash_hmac( 'SHA1'、$ stringToSign、$ accessKeySecret '&'、TRUE)。)。
$署名を返します。
}
/ **
* @param不明$モバイル
* @param不明ます$ verify_code
*
* /
パブリック関数send_verify(モバイル$、$コード){
//ここで変更された$ PARAMS =配列(
'SignName' =>の$ this - > signName、
'フォーマット' => 'JSON'
「バージョン」=>「2017年5月25日」
'AccessKeyId' =>の$ this - > accessKeyId、
'SignatureVersion' => '1.0'、
'のSignatureMethod' => 'HMAC-SHA1'、
'SignatureNonce' => uniqid()、
'タイムスタンプ' => gmdate( 'はYmd \ TH:I:S \ Z')、
'アクション' => 'SendSms'
'TemplateCode' =>の$ this - > templateCode、
'の電話番号' => $モバイル、
'TemplateParam' => '{ "コード": "'。$コード" '}'
);
//のvar_dump($のparams);ダイ;
結果に追加//計算署名と署名がパラメータを要求します
$ paramsは[ '署名'] =の$ this - > computeSignature($ paramsは、の$ this - > accessKeySecret)。
//リクエストを送信する(ここでは修正されました)
// $ URL = 'https://sms.aliyuncs.com/?' 。http_build_query($のparams);
$ URL = 'http://dysmsapi.aliyuncs.com/?' 。http_build_query($のparams);
$ CH = curl_init();
ますcurl_setopt($ chの、CURLOPT_URL、$ URL);
ますcurl_setopt($ chの、CURLOPT_SSL_VERIFYPEER、FALSE);
ますcurl_setopt($ chの、CURLOPT_SSL_VERIFYHOST、FALSE);
ますcurl_setopt($ chの、CURLOPT_RETURNTRANSFER、1);
ますcurl_setopt($ chの、CURLOPT_TIMEOUT、10);
$結果= curl_exec($ chの);
curl_close($ chの);
$結果= json_decode($ trueの場合、結果);
//のvar_dump($結果);ダイ;
もし(ISSET($結果[ 'コード'])){
の$ this - >エラー=の$ this - > getErrorMessage($結果[ 'コード'])。
falseを返します。
}
trueを返します。
}
/ **
*詳細なエラー情報を取得します。
*
* @param不明の$のステータス
* /
パブリック関数getErrorMessage($状態){
//アリクラウドメッセージングカオス八十から七悪い(実際には、アリよりも大きい場合)
// https://api.alidayu.com/doc2/apiDetail?spm=a3142.7629140.1.19.SmdYoA&apiId=25450
$メッセージ=配列(
「InvalidDayuStatus.Malformed」=>「メッセージが開いた状態が正しくないアカウント」、
「InvalidSignName.Malformed」=>「メッセージ間違った署名または署名ステータスが、正しくありません」
「InvalidTemplateCode.MalFormed」=>「コードメッセージテンプレートや不正なテンプレート正しくない状態」、
「InvalidRecNum.Malformed」=>「目標電話番号が間違っている、単一の伝送は、数100を超えることはできません」、
「InvalidParamString.MalFormed」=>「メッセージテンプレート変数は、JSON形式ではありません」
「InvalidParamStringTemplate.Malformed」=>「メッセージテンプレート変数の内容は、テンプレートと一致しません」
「InvalidSendSms」=>「トラフィックフロー制御トリガ」
「InvalidDayu.Malformed」=>「変数は、URL、変数はテンプレートで硬化させることができることができません」
);
IF(ISSET($メッセージ[$ステータス])){
$メッセージ[$ Status]を返します。
}
$ステータスを返します。
}
}
//外部コール
$電話= $ _POST [ '電話'];
もし(空($電話))
{
エコー '{ "ステータス":0、 "メッセージ": "欠落引数"}';
出口;
}
SMScode SMScode $ =新しいです();
$コード=ランド(111111,999999)。
の$ this - > send_verify($電話、$コード);