You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

552 lines
18 KiB
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace Org\XiguSDK;
use Think\Exception;
use Think\JSMS;
use AliyunMNS\Client;
use AliyunMNS\Topic;
use AliyunMNS\Constants;
use AliyunMNS\Model\MailAttributes;
use AliyunMNS\Model\SmsAttributes;
use AliyunMNS\Model\BatchSmsAttributes;
use AliyunMNS\Model\MessageAttributes;
use AliyunMNS\Exception\MnsException;
use AliyunMNS\Requests\PublishMessageRequest;
class Xigu {
/**
* API请求地址
*/
const BaseUrl = "http://yun.vlcms.com/index.php";
/**
*
* 用户账号ID。由32个英文字母和阿拉伯数字组成的开发者账号唯一标识符。
*/
private $accountid;
/**
*
* 时间戳
*/
private $timestamp;
/**
* @param $options 数组参数必填
* $options = array(
*
* )
* @throws Exception
*/
public function __construct($accountid)
{
if (!empty($accountid)) {
$this->accountid = isset($accountid) ? $accountid : '';
$this->timestamp = date("YmdHis") + 7200;
} else {
throw new Exception("非法参数");
}
}
/**
* @return string
* 包头验证信息,使用Base64编码账户Id:时间戳)
*/
private function getAuthorization()
{
$data = $this->accountid . ":" . $this->timestamp;
return trim(base64_encode($data));
}
/**
* @return string
* 验证参数,URL后必须带有sig参数sig= MD5账户Id + 时间戳共32位(注:转成大写)
*/
private function getSigParameter()
{
$sig = $this->accountid . $this->timestamp;
return strtoupper(md5($sig));
}
/**
* @param $url
* @param string $type
* @return mixed|string
*/
private function getResult($url, $body = null, $type = 'json',$method)
{
$data = $this->connection($url,$body,$type,$method);
if (isset($data) && !empty($data)) {
$result = $data;
} else {
$result = '没有返回数据';
}
return $result;
}
/**
* @param $url
* @param $type
* @param $body post数据
* @param $method post或get
* @return mixed|string
*/
private function connection($url, $body, $type,$method)
{
//var_dump($url);exit;
if ($type == 'json') {
$mine = 'application/json';
} else {
$mine = 'application/xml';
}
if (function_exists("curl_init")) {
$header = array(
'Accept:' . $mine,
'Content-Type:' . $mine . ';charset=utf-8',
'Authorization:' . $this->getAuthorization(),
);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
if($method == 'post'){
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$body);
}
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$result = curl_exec($ch);
curl_close($ch);
} else {
$opts = array();
$opts['http'] = array();
$headers = array(
"method" => strtoupper($method),
);
$headers[]= 'Accept:'.$mine;
$headers['header'] = array();
$headers['header'][] = "Authorization: ".$this->getAuthorization();
$headers['header'][]= 'Content-Type:'.$mine.';charset=utf-8';
if(!empty($body)) {
$headers['header'][]= 'Content-Length:'.strlen($body);
$headers['content']= $body;
}
$opts['http'] = $headers;
$result = file_get_contents($url, false, stream_context_create($opts));
}
return $result;
}
/**
* @param $appId
* @param $verifyCode
* @param $to
* @param string $type
* @return mixed|string
* @throws Exception
*/
public function voiceCode($appId,$verifyCode,$to,$type = 'json'){
$url = self::BaseUrl . '?s=/SendCode/voice/accountid/' . $this->accountid . '/sig/' . $this->getSigParameter();
if($type == 'json'){
$body_json = array('voiceCode'=>array(
'appId'=>$appId,
'verifyCode'=>$verifyCode,
'to'=>$to
));
$body = json_encode($body_json);
}elseif($type == 'xml'){
$body_xml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<voiceCode>
<verifyCode>'.$verifyCode.'</clientNumber>
<to>'.$to.'</charge>
<appId>'.$appId.'</appId>
</voiceCode>';
$body = trim($body_xml);
}else {
throw new Exception("只能json或xml默认为json");
}
$data = $this->getResult($url, $body, $type,'post');
return $data;
}
/**
* @param $appId
* @param $to
* @param $templateId
* @param null $param
* @param string $type
* @return mixed|string
* @throws Exception
*/
public function sendSM($appId,$to,$templateId,$param=null,$type = 'json'){
$url = self::BaseUrl . '?s=/SendCode/send/accountid/' . $this->accountid . '/sig/' . $this->getSigParameter();
if($type == 'json'){
$url="http://api.vlpush.com/sms/send_sms";
$post_data['appid']=C('sms_set.smtp');
$post_data['apikey']=C('sms_set.smtp_account');
$post_data['templateid']=C('sms_set.smtp_password');
$post_data['phone']=$to;
$post_data['param']=$param;
$o = "";
foreach ( $post_data as $k => $v )
{
$o.= "$k=" . urlencode( $v ). "&" ;
}
$post_data = substr($o,0,-1);
$res = request_post($url, $post_data);
$code=json_decode($res,true);
if($code['code']==200){
$code['send_status']='000000';
}else{
$res = request_post($url, $post_data);
$code=json_decode($res,true);
if($code['code']==200){
$code['send_status']='000000';
}else{
$code['send_status']='111111';
}
}
return json_encode($code);
}elseif($type == 'xml'){
$body_xml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sendSM>
<templateId>'.$templateId.'</templateId>
<to>'.$to.'</to>
<param>'.$param.'</param>
<appId>'.$appId.'</appId>
</sendSM>';
$body = trim($body_xml);
}else {
throw new Exception("只能json或xml默认为json");
}
$data = $this->getResult($url, $body, $type,'post');
return $data;
}
/**
* @param $appId
* @param $to
* @param $templateId
* @param null $param
* @param string $type
* @return mixed|string
* @throws Exception
*/
public function sendSMMessage($appId,$to,$templateId,$param=null,$type = 'json'){
$url = self::BaseUrl . '?s=/SendCode/send/accountid/' . $this->accountid . '/sig/' . $this->getSigParameter();
if($type == 'json'){
$url="http://api.vlpush.com/sms/send_sms";
$post_data['appid']=C('sms_set.smtp');
$post_data['apikey']=C('sms_set.smtp_account');
$post_data['templateid']=C('BRUSH_SMS_ID');
$post_data['phone']=$to;
$post_data['param']=$param;
$o = "";
foreach ( $post_data as $k => $v )
{
$o.= "$k=" . urlencode( $v ). "&" ;
}
$post_data = substr($o,0,-1);
$res = request_post($url, $post_data);
$code=json_decode($res,true);
if($code['code']==200){
$code['send_status']='000000';
}else{
$res = request_post($url, $post_data);
$code=json_decode($res,true);
if($code['code']==200){
$code['send_status']='000000';
}else{
$code['send_status']='111111';
}
}
return json_encode($code);
}elseif($type == 'xml'){
$body_xml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sendSM>
<templateId>'.$templateId.'</templateId>
<to>'.$to.'</to>
<param>'.$param.'</param>
<appId>'.$appId.'</appId>
</sendSM>';
$body = trim($body_xml);
}else {
throw new Exception("只能json或xml默认为json");
}
$data = $this->getResult($url, $body, $type,'post');
return $data;
}
/**
* 阿里大于
* @param $phone 手机号
* @param $code 验证码
* @param int $delay 有效时间
* @return bool
* author: xmy 280564871@qq.com
*/
public function alidayu_send($phone,$code,$delay=10){
$result = $this->alidayu($phone,$code,$delay);
if($result->result->success == true){
return true;
}else{
return false;
}
}
/**
* 阿里大于新
* @param $phone 手机号
* @param $code 验证码
* @param int $delay 有效时间
* @return bool
* author: wyr 840186209@qq.com
*/
public function alidayunew_send($phone,$code,$delay=10){
$result = $this->alidayunew($phone,$code,$delay);
if($result['Code'] == 'OK'){
return true;
}else{
return false;
}
}
/**
* 阿里大于(消息服务)
* @param $phone 手机号
* @param $code 验证码
* @param int $delay 有效时间
* @return bool
* author: cy 707670631@qq.com
*/
public function alidayumsg_send($phone,$code,$delay=10){
$result = $this->alidayumsg($phone,$code,$delay);
return $result;
}
/**
* 阿里大于 发送短信
* @param $phone
* @param $code
* @param int $delay
* author: xmy 280564871@qq.com
*/
private function alidayu($phone,$code,$delay=10){
$config = api('Config/lists');
C($config); //添加配置
$temp_code = C("alidayu.template_id"); //模板ID
$param = "{'code':'$code'}"; //参数
// $param = "{'code':'$code','delay','$delay'}"; //参数
$sing_name = C("alidayu.sign"); //审核过的签名
vendor('Alidayu.top.TopClient');
vendor('Alidayu.top.ResultSet');
vendor('Alidayu.top.RequestCheckUtil');
vendor('Alidayu.top.TopLogger');
vendor('Alidayu.top.request.AlibabaAliqinFcSmsNumSendRequest');
$dayu = new \TopClient();
$dayu->appkey = C("alidayu.appkey");
$dayu->secretKey = C("alidayu.secretKey");
$req = new \AlibabaAliqinFcSmsNumSendRequest();
$req->setExtend("");
$req->setSmsType("normal");//设置短信类型
$req->setSmsFreeSignName($sing_name);//短信签名
//短信模板变量,传参规则{"key":"value"}key的名字须和申请模板中的变量名一致多个变量之间以逗号隔开。
//示例:针对模板“验证码${code},您正在进行${product}身份验证,打死不要告诉别人哦!”,传参时需传入{"code":"1234","product":"alidayu"}
$req->setSmsParam($param);
$req->setRecNum($phone);//发送电话号
$req->setSmsTemplateCode($temp_code);//模板ID
$resp = $dayu->execute($req);
return $resp;
}
/**
* 阿里大于新 发送短信
* @param $phone
* @param $code
* @param int $delay
* author: wyr 840186209@qq.com
*/
private function alidayunew($phone,$code,$delay=10){
$config = api('Config/lists');
C($config); //添加配置
$temp_code = C("alidayunew.template_id"); //模板ID
$sing_name = C("alidayunew.sign"); //审核过的签名
$region = C("alidayunew.region"); //region(区域)
$domain = C("alidayunew.domain"); //短信API产品域名
$accessKeyId = C("alidayunew.appkey"); //
$accessKeySecret = C("alidayunew.secretKey"); //
$product = C("alidayunew.product"); //
// $param = '{\"code\":\"$code"\",\"product\":\"$sing_name\}'; //参数
$param = json_encode(array('code'=>$code)); //参数
//初始化访问的acsCleint
vendor('Alidayunew.msg_sdk.aliyun-php-sdk-core.Config');
vendor('Alidayunew.api_sdk.Dysmsapi.Request.V20170525.SendSmsRequest');
vendor('Alidayunew.api_sdk.Dysmsapi.Request.V20170525.QuerySendDetailsRequest');
$profile = \DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
\DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);
$acsClient= new \DefaultAcsClient($profile);
$request = new \Dysmsapi\Request\V20170525\SendSmsRequest;
//必填-短信接收号码。支持以逗号分隔的形式进行批量调用批量上限为20个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
// $request->setExtend("");
// $request->setSmsType("normal");//设置短信类型
$request->setPhoneNumbers($phone);
//必填-短信签名
$request->setSignName($sing_name);
//必填-短信模板Code
$request->setTemplateCode($temp_code);
//选填-假如模板中存在变量需要替换则为必填(JSON格式)
$request->setTemplateParam($param);
//选填-发送短信流水号
// $request->setOutId("1234");
$resp = $acsClient->getAcsResponse($request);
//var_dump($resp);
$resp = json_decode(json_encode($resp),true);
return $resp;
//发起访问请求
//$acsResponse = $acsClient->getAcsResponse($request);
}
/**
* 阿里大于消息服务
* @param $phone
* @param $code
* @param int $delay
* author: cy 707670631@qq.com
*/
private function alidayumsg($phone,$code,$delay=10){
include './ThinkPHP/Library/Vendor/Alidayumsg/php_sdk/mns-autoloader.php';
$this->endPoint = C("alidayumsg.domain"); // eg. http://1234567890123456.mns.cn-shenzhen.aliyuncs.com
$this->accessId = C("alidayumsg.appkey");
$this->accessKey = C("alidayumsg.secretKey");
$this->client = new Client($this->endPoint, $this->accessId, $this->accessKey);
/**
* Step 2. 获取主题引用
*/
$topicName = C("alidayumsg.topic");
$topic = $this->client->getTopicRef($topicName);
/**
* Step 3. 生成SMS消息属性
*/
// 3.1 设置发送短信的签名SMSSignName和模板SMSTemplateCode
$batchSmsAttributes = new BatchSmsAttributes(C("alidayumsg.sign"), C("alidayumsg.template_id"));
// 3.2 (如果在短信模板中定义了参数)指定短信模板中对应参数的值
$batchSmsAttributes->addReceiver($phone, array("code" => (string)$code));
// $batchSmsAttributes->addReceiver("15751006847", array("code" => "123456"));
$messageAttributes = new MessageAttributes(array($batchSmsAttributes));
/**
* Step 4. 设置SMS消息体必须
*
* 注:目前暂时不支持消息内容为空,需要指定消息内容,不为空即可。
*/
$messageBody = "smsmessage";
/**
* Step 5. 发布SMS消息
*/
$request = new PublishMessageRequest($messageBody, $messageAttributes);
try
{
$res = $topic->publishMessage($request);
return $res->isSucceed();
}
catch (MnsException $e)
{
return false;
}
}
/**
* 极光 发送短信
* @param $phone
* @param $code
* @param int $delay
*/
public function jiguang($phone,$code,$delay){
vendor('Jiguang.JSMS');
$appKey = C("jiguang.appkey");
$masterSecret = C("jiguang.secretKey");
$temp_id = C("jiguang.temp");
$temp_para = ['code' => "$code"];
$client = new JSMS($appKey, $masterSecret);
$response = $client->sendMessage($phone, $temp_id, $temp_para);
if ($response['http_code'] == '200'){
return true;
}else{
return false;
}
}
//极光声音验证码
public function jiguang_voice($phone){
$appKey = C("jiguang.appkey");
$masterSecret = C("jiguang.secretKey");
$phone = $phone;
$client = new JSMS($appKey, $masterSecret);
$response = $client->sendVoiceCode($phone);
if ($response['http_code'] == '200'){
return true;
}else{
return false;
}
}
public function jiguang_code($phone){
$appKey = C("jiguang.appkey");
$masterSecret = C("jiguang.secretKey");
$phone = $phone;
$client = new JSMS($appKey, $masterSecret);
$response = $client->sendCode($phone, 1);
if ($response['http_code'] == '200'){
return true;
}else{
return false;
}
}
public function jiguang_check($msg_id,$code){
$appKey = C("jiguang.appkey");
$masterSecret = C("jiguang.secretKey");
$msg_id = $msg_id;
$code = $code;
$client = new JSMS($appKey, $masterSecret);
$response = $client->checkCode($msg_id, $code);
if ($response['http_code'] == '200'){
return true;
}else{
return false;
}
}
}