アリクラウドSMSサービスコードテンプレート

<?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($電話、$コード);

おすすめ

転載: www.cnblogs.com/lzp4510/p/12311203.html
おすすめ