php 와 아 리 클 라 우 드 문자 인터페이스 접속 조작 사례 분석

본 고의 실례 는 php 와 아 리 클 라 우 드 문자 인터페이스 접속 조작 을 다 루 었 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
아 리 클 라 우 드 문자 API 를 사용 하려 면 콘 솔 에서 다음 과 같은 필요 한 인 자 를 받 아야 한다.그 중에서 자신의 핸드폰 검증+공식 심 사 를 여러 번 해 야 한다.특히 심 사 는 인내심 을 가 져 야 한다.
1. accessKeyId  개인 계 정 키 에 해당 합 니 다.
2.accessKeySecret 는 위 와 쌍 을 이룬다.
3. SignName  개인 서명,보 낸 문자 에서 이 서명 회 는 시작 에 표 시 됩 니 다.[서명]사랑 하 는 사용자 와 같은 형식 입 니 다.SignName 은 심 사 를 통과 해 야 합 니 다.
4.TemplateCode  템 플 릿 코드,아 리 클 라 우 드 문 자 는 문자 메 시 지 를 완전히 사용자 정의 할 수 없습니다.심 사 를 통과 한 템 플 릿 을 통 해 템 플 릿 의 변 수 를 스스로 교체 해 야 합 니 다.예 를 들 어 템 플 릿:"인증 코드 는$[code]입 니 다.code 는 변수 입 니 다.사용 할 때 변수 값{"code":"12345"}(변수 값 을 설정 하 는 과정 은 demo 에서 이 루어 집 니 다).문자 메 시 지 를 보 내 면'인증 코드 는 12345 입 니 다'로 바 뀌 고 심 사 를 통과 한 템 플 릿 마다 템 플 릿 코드 를 제공 합 니 다.
최신 아 리 클 라 우 드 문자 인 터 페 이 스 는 아 리 가 이사 후 보다 큰 경우 에 적용 된다.
그동안 아 리 보다 큰 문자 인 터 페 이 스 를 사용 해 왔 는데 최근 프로젝트 에 들 어 갔 을 때 아 리 가 아 리 운 으로 몰래 이사 한 것 을 발견 했다!아 리 운 의 SDK 파일 은 매우 많아 서 안개 가 자욱 하 게 보인다!아래 코드 는 최신 아 리 클 라 우 드 문자 서비스 에 사용 할 수 있 는 클래스 입 니 다.직접 테스트 성공!

<?php
/**
 *            
 * @author Administrator
 *
 */
class Sms {

  //       

  public $error;

  // Access Key ID

  private $accessKeyId = '';

  // Access Access Key Secret

  private $accessKeySecret = '';

  //   

  private $signName = '';

  //   ID

  private $templateCode = '';

  public function __construct($cofig = array()) {

    $cofig = array (

        'accessKeyId' => 'xxxxxxxxxxx',

        'accessKeySecret' => 'xxxxxxxxxx',

        'signName' => '    ',

        'templateCode' => 'SMS_76510109'

    );

    //     

    $this->accessKeyId = $cofig ['accessKeyId'];

    $this->accessKeySecret = $cofig ['accessKeySecret'];

    $this->signName = $cofig ['signName'];

    $this->templateCode = $cofig ['templateCode'];

  }

  private function percentEncode($string) {

    $string = urlencode ( $string );

    $string = preg_replace ( '/\+/', '%20', $string );

    $string = preg_replace ( '/\*/', '%2A', $string );

    $string = preg_replace ( '/%7E/', '~', $string );

    return $string;

  }

  /**
   *   
   *
   * @param unknown $parameters      
   * @param unknown $accessKeySecret      
   * @return string
   */

  private function computeSignature($parameters, $accessKeySecret) {

    ksort ( $parameters );

    $canonicalizedQueryString = '';

    foreach ( $parameters as $key => $value ) {

      $canonicalizedQueryString .= '&' . $this->percentEncode ( $key ) . '=' . $this->percentEncode ( $value );

    }

    $stringToSign = 'GET&%2F&' . $this->percentencode ( substr ( $canonicalizedQueryString, 1 ) );

    $signature = base64_encode ( hash_hmac ( 'sha1', $stringToSign, $accessKeySecret . '&', true ) );

    return $signature;

  }

  /**
   * @param unknown $mobile      
   * @param unknown $verify_code      
   *
   */

  public function send_verify($mobile, $verify_code) {

    $params = array (  //      

        'SignName' => $this->signName,

        'Format' => 'JSON',

        'Version' => '2017-05-25',

        'AccessKeyId' => $this->accessKeyId,

        'SignatureVersion' => '1.0',

        'SignatureMethod' => 'HMAC-SHA1',

        'SignatureNonce' => uniqid (),

        'Timestamp' => gmdate ( 'Y-m-d\TH:i:s\Z' ),

        'Action' => 'SendSms',

        'TemplateCode' => $this->templateCode,

        'PhoneNumbers' => $mobile,

        //'TemplateParam' => '{"code":"' . $verify_code . '"}' 

        'TemplateParam' => '{"time":"1234"}'  //          

    );

    //var_dump($params);die;

    //                 

    $params ['Signature'] = $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 );

    $result = curl_exec ( $ch );

    curl_close ( $ch );

    $result = json_decode ( $result, true );

    //var_dump($result);die;

    if (isset ( $result ['Code'] )) {

      $this->error = $this->getErrorMessage ( $result ['Code'] );

      return false;

    }

    return true;

  }

  /**
   *         
   *
   * @param unknown $status      
   */

  public function getErrorMessage($status) {

    //             (         )

    // https://api.alidayu.com/doc2/apiDetail?spm=a3142.7629140.1.19.SmdYoA&apiId=25450

    $message = array (

        'InvalidDayuStatus.Malformed' => '           ',

        'InvalidSignName.Malformed' => '               ',

        'InvalidTemplateCode.MalFormed' => '    Code            ',

        'InvalidRecNum.Malformed' => '        ,          100',

        'InvalidParamString.MalFormed' => '         json  ',

        'InvalidParamStringTemplate.Malformed' => '               ',

        'InvalidSendSms' => '      ',

        'InvalidDayu.Malformed' => '     url,           '

    );

    if (isset ( $message [$status] )) {

      return $message [$status];

    }

    return $status;

  }

}

호출 방법:

//     
$mobile = 'xxxxxxx';
$code = rand ( 1000, 9999 );
//    
$sms = new Sms();

//    
$status = $sms->send_verify($mobile, $code);
if (!$status) {
 echo $sms->error;

}

더 많은 PHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기