You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
347 lines
13 KiB
347 lines
13 KiB
<?php
|
|
/**
|
|
* Comment: 语音播报收款内容
|
|
* Author: ZZW
|
|
* Date: 2018/12/29
|
|
* Time: 15:21
|
|
*/
|
|
defined('IN_IA') or exit('Access Denied');
|
|
|
|
class VoiceAnnouncements{
|
|
static protected $hornID, //云喇叭的id
|
|
$signature,//网关验证信息
|
|
$uid,//用户uid
|
|
$https = 'https://api.gateway.letoiot.com/',//智联博众请求的服务器地址
|
|
$apiUrl = "https://speaker.17laimai.cn/",//零度请求的服务器地址
|
|
$price,//播报的接收金额
|
|
$vol,//音量设置
|
|
$manfactorDeviceType,//硬件厂商设备类型
|
|
$pt,//支付类型 0=通用(不播报前缀);1=支付宝;2=微信支付;3=云支付;4=余额支付;5=微信储值;6=微信买单;7=银联刷卡;25=哆啦宝
|
|
$pwd;//用户密码
|
|
/**
|
|
* Comment: 向云喇叭服务器推送要播报的语音信息
|
|
* Author: zzw
|
|
* Date: 2020/6/2 9:58
|
|
* @param int|string|float $price 支付金额
|
|
* @param int|string $sid 商户id | 出租车id
|
|
* @param int|string $paytype 支付方式(本平台)
|
|
* @param string $plugin 支付模块
|
|
* @return array|bool|mixed
|
|
*/
|
|
public static function PushVoiceMessage($price,$sid,$paytype,$plugin = ''){
|
|
#1、获取当前商户云喇叭配置配置信息
|
|
if(strtolower($plugin) == 'taxipay'){
|
|
//出租车语音播报 sid为出租车id
|
|
$info = unserialize(pdo_getcolumn(PDO_NAME . "taxipay_master" , ['id' => $sid] , 'cloudspeaker'));
|
|
$info['voice'] = 2;//出租车语音固定为零度
|
|
}else{
|
|
//其他支付语音播报
|
|
$info = unserialize(pdo_getcolumn(PDO_NAME . "merchantdata" , ['id' => $sid] , 'cloudspeaker'));
|
|
}
|
|
#2、判断云喇叭是否开启 状态:0=关闭,1=开启
|
|
if($info['state'] == 1){
|
|
//开启
|
|
self::$price = $price * 100;//支付金额处理
|
|
//判断使用的喇叭类型 类型:1=智联博众,2=零度
|
|
if($info['voice'] == 2){
|
|
//使用零度
|
|
return self::initLD($info,$paytype);
|
|
}else{
|
|
//使用智联博众
|
|
return self::voiceZLBZ($paytype,$info);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
/****** 智联博众云喇叭使用操作 ***************************************************************************************/
|
|
/**
|
|
* Comment: 智联博众云喇叭使用
|
|
* Author: zzw
|
|
* Date: 2020/6/1 16:46
|
|
* @param $paytype
|
|
* @return array|bool
|
|
*/
|
|
protected static function voiceZLBZ($paytype,$info){
|
|
$paymentType = self::getPayType($paytype);
|
|
if(empty($info['id']) || empty($info['account']) || empty($info['password']) || $paymentType == 0){
|
|
return false;
|
|
}
|
|
#2、获取基本要使用的信息
|
|
self::$hornID = $info['id'];//喇叭id
|
|
self::$uid = $info['account'];//喇叭账号id:API_CMKJ0057
|
|
self::$pwd = $info['password'];//喇叭密码pwd:API_LTCMKJ0057
|
|
self::$vol = $info['volume'];//音量
|
|
self::$pt = $paymentType;
|
|
self::$manfactorDeviceType = '03ea00020030';//$info['equipment_type'];
|
|
|
|
self::$signature = self::getSignature();
|
|
#3、云喇叭在线 推送收款信息
|
|
$result = self::sendOutInfo();
|
|
return $result;
|
|
}
|
|
/**
|
|
* Comment: 获取网关签名
|
|
* Author: zzw
|
|
*/
|
|
protected static function getSignature(){
|
|
//$signature = Util::getCookie("voiceSignature")[0];
|
|
//if(empty($signature) || !$signature){
|
|
$postData = json_encode(array('app_cust_id'=>self::$uid,'app_cust_pwd'=>self::$pwd));
|
|
$url = self::$https."gateway/api/v2/getSignature";
|
|
$header = array('application/json;charset=utf-8');
|
|
$info = self::curlRequest($url,$postData,$header);
|
|
$signature = $info['data']['signature'];//获取的签名详细内容
|
|
//$time = $info['data']['remainTime'];//剩余的时间 (分钟)
|
|
//Util::setCookie('voiceSignature',array($signature),$time*59);
|
|
//}
|
|
return $signature;
|
|
}
|
|
/**
|
|
* Comment: 发送支付推送消息
|
|
* Author: zzw
|
|
* @return array
|
|
*/
|
|
protected static function sendOutInfo(){
|
|
$descs = urlencode('支付消息');//这里请求中不能带有中文 否则报错
|
|
$codeInfo = '?id='.self::$hornID. '&uid='.self::$uid.
|
|
'&vol='.self::$vol.'&price='.self::$price.'&pt='.self::$pt.'&seq=666&descs='.$descs;
|
|
$url = self::$https."speaker/add.php".$codeInfo;
|
|
$header = array(
|
|
'Content-Type: application/x-www-form-urlencoded;charset=utf-8',
|
|
'Authorization: '.self::$signature,
|
|
);
|
|
$info = self::curlRequest($url,'',$header);
|
|
if($info['errcode'] == 0){
|
|
return array('erron'=>1,'message'=>'收款消息推送成功');
|
|
}else{
|
|
return array('erron'=>0,'message'=>$info['errmsg']);
|
|
}
|
|
}
|
|
/**
|
|
* Comment: 通过本网站的付款方式获取云喇叭的付款方式的值
|
|
* Author: zzw
|
|
* @param $paytype
|
|
* @return int
|
|
*/
|
|
protected static function getPayType($paytype){
|
|
//0=通用(不播报前缀);1=支付宝;2=微信支付;3=云支付;4=余额支付;5=微信储值;6=微信买单;7=银联刷卡;25=哆啦宝
|
|
$val = 0;//默认 通用(不播报前缀) 为0暂不进行播报
|
|
switch ($paytype){
|
|
case 3:$val=1;break;//支付宝
|
|
case 2:$val=2;break;//微信支付
|
|
case 5:$val=2;break;//微信支付
|
|
case 1:$val=4;break;//余额支付
|
|
}
|
|
return $val;
|
|
}
|
|
/**
|
|
* Comment: 通过curl进行网络信息抓取
|
|
* Author: zzw
|
|
* @param $url
|
|
* @param $postData
|
|
* @param $header
|
|
* @return mixed
|
|
*/
|
|
protected static function curlRequest($url,$postData,$header){
|
|
$curl = curl_init();//初始化
|
|
curl_setopt($curl, CURLOPT_URL, $url);//设置抓取的url
|
|
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);//设置header信息
|
|
curl_setopt($curl, CURLOPT_HEADER, 1);//设置头文件的信息作为数据流输出
|
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//设置获取的信息以文件流的形式返回,而不是直接输出。
|
|
curl_setopt($curl, CURLOPT_POST, 1);//设置post方式提交
|
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
|
|
$data = curl_exec($curl); //执行命令
|
|
$headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);// 获得响应结果里的:header头大小
|
|
$info = substr($data, $headerSize);//通过截取 获取body信息
|
|
curl_close($curl);//关闭URL请求
|
|
|
|
|
|
return json_decode($info,true);//返回获取的信息数据
|
|
}
|
|
/****** 零度云喇叭【商户】使用操作 ***********************************************************************************/
|
|
/**
|
|
* Comment: 零度云喇叭使用操作
|
|
* Author: zzw
|
|
* Date: 2020/6/1 18:26
|
|
* @param array $info 操作时传递的参数信息
|
|
* @param string $type 操作类型:voice=支付语音播报,bind=商户绑定/解除绑定
|
|
* @param string|int $payType 本平台的支付方式:1=余额,2=微信,3=支付宝;
|
|
* @return bool|mixed
|
|
*/
|
|
public static function initLD($info,$payType = ''){
|
|
//判断是否绑定
|
|
$bindData = [
|
|
'id' => $info['ld_id'],//云喇叭id
|
|
'm' => 1 ,//0为解绑,1为绑定,4强制解绑(不需提供原 USERID)
|
|
'token' => '105827801114' ,//代理商token
|
|
'uid' => 'u'.$info['ld_id']
|
|
];
|
|
$bindInfo = self::getBindInfo($bindData);//获取喇叭绑定信息
|
|
$records = json_decode($bindInfo['records'],true);
|
|
$tokenAgentId = substr($bindData['token'],0,4);//云喇叭代理商id 为token前四位数
|
|
$userIdAgentId = substr($records['userid'],-4);//云喇叭代理商id 为userid后四位
|
|
if(!$userIdAgentId || $tokenAgentId == $userIdAgentId) {
|
|
//未绑定 自动绑定
|
|
$bindRes = self::bind($bindData);
|
|
}
|
|
//语音播报
|
|
$info['ld_token'] = '105827801114';
|
|
//根据设置调用语音播报
|
|
if($info['ld_temp']){
|
|
//使用自定义模板
|
|
return self::sendDiyVoice($info,$payType);
|
|
}else{
|
|
//使用默认模板
|
|
return self::sendVoice($info,$payType);
|
|
}
|
|
}
|
|
/**
|
|
* Comment: 请求获取当前云喇叭绑定信息
|
|
* Author: zzw
|
|
* Date: 2020/6/1 17:15
|
|
* @param array $info 参数配置信息
|
|
* @return mixed
|
|
*/
|
|
protected static function getBindInfo($info){
|
|
//参数信息配置
|
|
$url = self::$apiUrl . 'list_bind.php';
|
|
$data = [
|
|
'id' => $info['id'] ,//云喇叭id
|
|
'token' => $info['token'] ,//代理商token
|
|
];
|
|
//返回请求结果
|
|
return curlPostRequest($url, $data);
|
|
}
|
|
/**
|
|
* Comment: 进行绑定 | 解除绑定
|
|
* Author: zzw
|
|
* Date: 2020/6/1 17:25
|
|
* @param $info
|
|
* @return mixed
|
|
*/
|
|
protected static function bind($info){
|
|
global $_W;
|
|
//参数信息配置
|
|
$url = self::$apiUrl . 'bind.php';
|
|
$data = [
|
|
'id' => $info['id'] ,//云喇叭id
|
|
'm' => $info['m'] ,//0为解绑,1为绑定,4强制解绑(不需提供原 USERID)
|
|
'token' => $info['token'] ,//代理商token
|
|
//用户帐号ID,自定义
|
|
//商户命名规则:uid + 公众号id + 下划线 + sid + 商户id
|
|
//出租车命名规则:uid + 公众号id + 下划线 + lid + 商户id
|
|
'uid' => $info['uid'],
|
|
];
|
|
//返回请求结果
|
|
return curlPostRequest($url, $data);
|
|
}
|
|
/**
|
|
* Comment: 支付方式转换 —— 代码
|
|
* Author: zzw
|
|
* Date: 2020/6/1 18:25
|
|
* @param $payType
|
|
* @return int
|
|
*/
|
|
protected static function getVoicePayType($payType){
|
|
#本平台支付方式(payType):1=余额;2=微信;3=支付宝
|
|
#云喇叭支付方式(返回值):1=支付宝,2=微信支付,3=云支付,4=余额支付,5=微信储值,6=微信买单,7=银联刷卡,8=会员卡消费,9=会员卡充值
|
|
#10=翼支付,11=退款,12=支付宝退款,13=微信退款,14=银行卡退款,15=银联退款,16=工行e支付,18=QQ钱包到账,19=京东支付,20=用户取消支付,22=西银惠支付
|
|
$val = 0;//默认不进行播报
|
|
switch ($payType){
|
|
case 3:$val=1;break;//支付宝
|
|
case 2:$val=2;break;//微信支付
|
|
case 1:$val=4;break;//余额支付
|
|
}
|
|
return $val;
|
|
}
|
|
/**
|
|
* Comment: 支付方式转换 —— 汉字
|
|
* Author: zzw
|
|
* Date: 2020/6/10 17:24
|
|
* @param $payType
|
|
* @return int
|
|
*/
|
|
protected static function getVoicePayTypeText($payType){
|
|
#本平台支付方式(payType):1=余额;2=微信;3=支付宝
|
|
#云喇叭支付方式(返回值):1=支付宝,2=微信支付,3=云支付,4=余额支付,5=微信储值,6=微信买单,7=银联刷卡,8=会员卡消费,9=会员卡充值
|
|
#10=翼支付,11=退款,12=支付宝退款,13=微信退款,14=银行卡退款,15=银联退款,16=工行e支付,18=QQ钱包到账,19=京东支付,20=用户取消支付,22=西银惠支付
|
|
$val = 0;//默认不进行播报
|
|
switch ($payType){
|
|
case 3:$val='支付宝';break;//支付宝
|
|
case 2:$val='微信';break;//微信支付
|
|
case 1:$val='余额';break;//余额支付
|
|
}
|
|
return $val;
|
|
}
|
|
|
|
|
|
/**
|
|
* Comment: 推送消息进行语音播报 —— 默认方式
|
|
* Author: zzw
|
|
* Date: 2020/6/1 18:26
|
|
* @param $info
|
|
* @param $payType
|
|
* @return mixed
|
|
*/
|
|
protected static function sendVoice($info,$payType){
|
|
//参数信息配置
|
|
$url = self::$apiUrl . 'add.php';
|
|
$data = [
|
|
'id' => $info['ld_id'] ,//云喇叭id
|
|
'price' => self::$price ,//支付金额
|
|
'pt' => self::getVoicePayType($payType) ,//云喇叭平台的支付方式
|
|
'token' => $info['ld_token'] ,//代理商token
|
|
'version' => $info['version'] ? : 1,
|
|
'speed' => $info['speed'] ? : 50
|
|
];
|
|
//返回请求结果
|
|
return curlPostRequest($url, $data);
|
|
}
|
|
/**
|
|
* Comment: 自定义语音播报信息
|
|
* Author: zzw
|
|
* Date: 2020/6/10 17:31
|
|
* @param $info
|
|
* @param $payType
|
|
* @return mixed
|
|
*/
|
|
protected static function sendDiyVoice($info,$payType){
|
|
$payTypeText = self::getVoicePayTypeText($payType);
|
|
$price = sprintf("%.2f",(self::$price / 100));
|
|
//模板变量替换 [金额] [支付方式]
|
|
$info['ld_temp'] = str_replace('[金额]' , $price , $info['ld_temp']);
|
|
$info['ld_temp'] = str_replace('[支付方式]' , $payTypeText , $info['ld_temp']);
|
|
//参数信息配置
|
|
$url = self::$apiUrl . 'notify.php';
|
|
$data = [
|
|
'id' => $info['ld_id'] ,//云喇叭id
|
|
'token' => $info['ld_token'] ,//代理商token
|
|
'message' => $info['ld_temp'] ,//播报内容
|
|
'speed' => $info['speed'] ? : 50,//播报语速
|
|
'version' => $info['version'] ? : 1,//接口版本
|
|
];
|
|
//返回请求结果
|
|
return curlPostRequest($url, $data);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|