PHP如何接入第三方短信SDK-Poison

不知不觉转到PHP开发这个行业一年多了,一路走来实属不易,感慨一下,开始正题

短信接入SDK其实说难不难说,说简单很简单,只要你能吃的准他的套路就没有问题了

第一步,找到第三方短信SDK找到客服,要测试的短信,一般情况下只会给到10条左右测试短信(不排除有200条不可变动短信)

第二步,找到官方文档,看需要什么参数,返回什么参数等等

第三步,打开编辑器,废话太多,直接上代码了

 

SendSMS.php
$aa['SMS_ACCOUNT'] ,
    'password' => $aa['SMS_PWD'],
    'content' =>str_replace('$code$',$randnum,$aa['SMS_WORD']),
    'mobile' =>'15609220575'
);


$returnStr = invoke_fraud_api($aa['SMS_URL'],$send_arr);//调用下面的方法,下面的方法不不要动,直接使用就好了
$ins = new Tools();//调用Tools


$ins -> decodeXml($returnStr);//此方法用来解析返回来的XML文件
$code = $ins -> getXmlData('code');//取出返回值


if($code === '2'){//这个短信返回2为发送成功,返回给前端
  echo json_encode(array('result' => 1));
}else{
  echo json_encode(array('result' => 2,'reason' => $ins -> getXmlData('msg') ));
}




function invoke_fraud_api($url,array $params, $isPost = true,$timeout = 5000, $connection_timeout = 5000) {
 $api_url = $url;
 if($isPost){
  $options['CURLOPT_POST'] = 1;
 }


 $options = array(
     CURLOPT_URL => $api_url,      // 请求URL
     CURLOPT_RETURNTRANSFER => 1,  // 获取请求结果


  // -----------请确保启用以下两行配置------------
     CURLOPT_SSL_VERIFYPEER => 1,  // 验证证书
     CURLOPT_SSL_VERIFYHOST => 2,  // 验证主机名
  // -----------否则会存在被窃听的风险------------
     CURLOPT_POSTFIELDS => http_build_query($params) // 注入接口参数
 );


 if (defined("CURLOPT_TIMEOUT_MS")) {
  $options[CURLOPT_NOSIGNAL] = 1;
  $options[CURLOPT_TIMEOUT_MS] = $timeout;
 } else {
  $options[CURLOPT_TIMEOUT] = ceil($timeout / 1000);
 }
 if (defined("CURLOPT_CONNECTTIMEOUT_MS")) {
  $options[CURLOPT_CONNECTTIMEOUT_MS] = $connection_timeout;
 } else {
  $options[CURLOPT_CONNECTTIMEOUT] = ceil($connection_timeout / 1000);
 }
 $ch = curl_init();
 $cacert = getcwd() . '/ca-bundle.crt';
 curl_setopt ($ch, CURLOPT_CAINFO, $cacert);
 curl_setopt_array($ch, $options);
 if(!($response = curl_exec($ch))) {
  // 错误处理,按照同盾接口格式fake调用结果
  return array(
      "success" => "false",
      "reason_code" => "000:调用API时发生错误[".curl_error($ch)."]"
  );
 }
 curl_close($ch);
 return $response;
}
 
Tools()//这个是用来json、xml发送和解析的工具类
  public function decodeJson($str){
        $this -> jsonResult = (array)json_decode($str);
    }

    public function getJsonData($key){
       return $this -> jsonResult[$key];
    }

    public function encodeXml($parent,$arr){
         $xml = new DOMDocument('1.0','utf-8');
         $parentObj = $xml -> createElement($parent);
         $xml -> appendChild($parentObj);
         foreach($arr as $key => $val){
             $obj = $xml -> createElement($key,$val);
             $parentObj -> appendChild($obj);
         }
        $str = $xml -> saveXML();
        if($parent === 'xml'){
            $arr = explode('?>',$str);
            return end($arr);
        }else{
            return $str;
        }
    }

    public function decodeXml($str){
        $xml = simplexml_load_string($str);
       $this -> xmlResult = (array)$xml;
    }

    public  function getXmlData($key){
        return (string)$this -> xmlResult[$key];
    }
}


最后放入一个最最关键的文件,ca-bundle.crt 放在更目录下

 


 

 

你可能感兴趣的:(php)