业务方要求是客户支付成功要在后台进行语言播报,比如收款100元,请注意查收

ajax轮询的方法比较简单,就是每过多少秒发起一次请求。如果项目中的订单不多,每隔多少秒发一次请求会对服务器有挺大的压力。我将轮询关键的代码贴出来,仅供参考。

<script src="__STATIC__/admin/static/js/jquery.min.js"></script>
<script type="text/javascript">function timeout() {$.ajax({url:'{:url("/admin/speech/getOrderStatus")} ',type:'get',datatype:'text',async:false,success:function (data) {if(data==400){console.log('语音合成错误,请联系管理员')}else if(data==300){console.log('订单未支付')}else{playSound(data); }}});}// var i=timeout();function hello() {// playSound();return false;$.ajax({url:'{:url("/admin/speech/getOrder")}',type:'get',datatype:'text',async:false,success:function (result) {// console.log(result)if(result==200){setInterval("timeout()",30000);}}});}setInterval("hello()",10000);window.onbeforeunload = function (e) {var message = 'some word';e = e || window.event;if (e) {e.returnValue = message;}clearInterval()};
</script><!--支付成功声音提示-->
<script>var playSound = function (msgfile="/uploads/speech/20201210114028995250.mp3") {// console.log(msgfile)var borswer = window.navigator.userAgent.toLowerCase();if ( borswer.indexOf( "ie" ) >= 0 ){//IE内核浏览器var strEmbed = '<embed name="embedPlay" src="'+msgfile+'" autostart="true" hidden="true" loop="false"></embed>';if ( $( "body" ).find( "embed" ).length <= 0 )$( "body" ).append( strEmbed );var embed = document.embedPlay;//浏览器不支持 audion,则使用 embed 播放embed.volume = 100;//embed.play();这个不需要} else{//非IE内核浏览器var strAudio = "<audio id='audioPlay' src='"+msgfile+"' hidden='true'>";if($("#audioPlay").length<=0){$( "body" ).append( strAudio );}var audio = document.getElementById( "audioPlay" );//浏览器支持 audioaudio.play();}}
</script>

上面是核心代码。后台代码如下:

<?php
namespace app\admin\controller;use app\admin\controller\Base;
use think\Loader;
use think\Request;
use think\Session;
//语音播报功能1607477459
class Speech extends Base
{   //查询待支付订单public function getOrder(){$where['store_id']=594;$where['orders_status']=0;// $where['out_trade_no']='9581315822';$result=db('orders')->field('out_trade_no,orders_id')->where($where)->whereTime('orders_create_time', 'today')->order('orders_id desc')->fetchSql(false)->find();if(!empty($result)){$data['orders_id']=$result['orders_id'];$isordersId=db('message')->where('orders_id',$result['orders_id'])->find();if(empty($isordersId)){$ret=db('message')->insert($data);if($ret) return 200;}return 400;}else{return 400;}}public function getOrderStatus(){$messaage=db('message')->order('id asc')->find();$result=db('orders')->field('out_trade_no,amount,orders_status')->where('orders_id',$messaage['orders_id'])->find();if(!empty($result)){if($result['orders_status']==2){db('message')->delete($messaage['id']);$text='收款'.$result['amount'].'元';$appkey = "DfIHS534534534re";$token = "3f39f8b99fsdfsdfsdfd5ef12c";// $text = get('content');// $text =iconv("utf-8","gbk//IGNORE",$text );// $text = mb_convert_encoding($text ,"UTF-8","GBK");$textUrlEncode = urlencode($text);$textUrlEncode = preg_replace('/\+/', '%20', $textUrlEncode);$textUrlEncode = preg_replace('/\*/', '%2A', $textUrlEncode);$textUrlEncode = preg_replace('/%7E/', '~', $textUrlEncode);$audioSaveFile = $this->getOrderNum().".mp3";$format = "mp3";$sampleRate = 16000;$code=$this-> processGETRequest($appkey, $token, $textUrlEncode, $audioSaveFile, $format, $sampleRate);return $code;}else{return 310;}}else{return 300;}}private function getOrderNum($length = 6, $tab = ''){$dt = date('YmdHis');$str = $dt . substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, $length);return $str . $tab;}public function processGETRequest($appkey, $token, $text, $audioSaveFile, $format, $sampleRate) {$url = "https://nls-gateway.cn-shanghai.aliyuncs.com/stream/v1/tts";$url = $url . "?appkey=" . $appkey;$url = $url . "&token=" . $token;$url = $url . "&text=" . $text;$url = $url . "&format=" . $format;$url = $url . "&sample_rate=" . strval($sampleRate);// voice 发音人,可选,默认是xiaoyun。// $url = $url . "&voice=" . "xiaoyun";// volume 音量,范围是0~100,可选,默认50。// $url = $url . "&volume=" . strval(50);// speech_rate 语速,范围是-500~500,可选,默认是0。// $url = $url . "&speech_rate=" . strval(0);// pitch_rate 语调,范围是-500~500,可选,默认是0。// $url = $url . "&pitch_rate=" . strval(0);// print $url . "\n";$curl = curl_init();curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);/*** 设置HTTPS GET URL。*/curl_setopt($curl, CURLOPT_URL, $url);/*** 设置返回的响应包含HTTPS头部信息。*/curl_setopt($curl, CURLOPT_HEADER, TRUE);/*** 发送HTTPS GET请求。*/curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);$response = curl_exec($curl);if ($response == FALSE) {return 500;// print "curl_exec failed!\n";curl_close($curl);return ;}/*** 处理服务端返回的响应。*/$headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);$headers = substr($response, 0, $headerSize);$bodyContent = substr($response, $headerSize);$file= "/uploads/speech/".$audioSaveFile;curl_close($curl);if (stripos($headers, "Content-Type: audio/mpeg") != FALSE || stripos($headers, "Content-Type:audio/mpeg") != FALSE) {file_put_contents("./uploads/speech/".$audioSaveFile, $bodyContent);$data[]=['url'=>$file];return $file;// response($data);}else {return 400;}}
}

用的是阿里云语音合成功能。

具体逻辑根据自己的业务需求去屑

php 后台实现订单支付成功后语音提示相关推荐

  1. 关于订单支付成功后一些逻辑的处理

    2019独角兽企业重金招聘Python工程师标准>>> 在实际的工作当中有可能涉及微信支付或是支付宝支付,支付成功后支付网关需要把成功支付的订单信息回调到你指定的方法上,然而有些情况 ...

  2. 如何处理因为支付成功后因延迟回调而订单被取消

    工作中遇到的问题记录 如何处理因为支付成功后因延迟回调而订单被取消 如何处理因为支付成功后因延迟回调而订单被取消 这个问题的出现背景也是因为第三方结算平台延迟反馈而造成用户错以为没有支付而取消订单或者 ...

  3. 微信支付 支付成功后不跳转 ecshop微信支付 如下操作即可

    微信--订单处理页: <?php     include("WxPayPubHelper.php");     //使用jsapi接口     $jsApi = new Js ...

  4. 微信支付回调页面html,微信JSAPI支付成功后获取回调数据

    微信JSAPI公众号支付是素材火群主提供的,支付成功后跳转到订单详情页,里面是微信支付成功后回调的数据,由第三方微信支付平台定时请求获取. 下载资源 下载积分: 780 积分 回调地址notify.p ...

  5. PHP处理微信支付成功后的回调处理

    PHP处理微信支付成功后的回调处理 微信支付成功后我们可通过设置的回调地址中来处理 public function wx_notify(){$xml = file_get_contents(" ...

  6. 关于微信JSAPI支付成功后,点击完成后没有返回值并且页面被自动关闭问题

    微信JSAPI支付成功后,点击完成后没有返回值并且页面被自动关闭 简介 解决方式 错误的处理方式 总结 简介 最近很多人可能都遇到一个问题,在使用微信JSAPI支付成功后,不走成功的回调方法,只有支付 ...

  7. 工商银行支付接口-处理工行支付成功后的消息通知

    由于工行的支付接口目前是没有向B2B商户提供按订单号查询订单状态的,因此处理订单成功支付后的消息就显得非常重要了,以下为鲁炬在做银行支付项目时处理工行订单支付成功通知的核心代码. /*** 处理工行支 ...

  8. 微信扫码支付成功后跳转

    微信扫码支付成功后跳转 问题描述 微信官方提供的示例中支付扫码页只有二维码图,支付成功后没有任何交互为了更好的用户体验希望扫码支付成功后自动跳转到支付成功页. 解决方案 通过setInterval定时 ...

  9. 支付宝支付成功后通知在微信打开的提示页面

    背景 正常情况下,在微信浏览器使用支付宝支付,会出现一大坨链接,让你手动的复制到浏览器打开去操作. 这样的用户体验,别说用户,就连没有审美的程序员也不能忍的. 于是阿力饼饼给出了方案,倒不是解决跳转的 ...

  10. 公众号支付成功后执行ajax,真香,微信公众号支付完整流程案例

    /** * 获取授权链接,首先调用此方法 * @return */ @GetMapping(value= "getOauthUrl") public void getOauthUr ...

最新文章

  1. AXI DMA DRIVER 阶段性 kernel driver 构建并测试(三 )
  2. 项目工作展望(风来)
  3. CF1458B Glass Half Spilled
  4. 长寿的人会有的8个健康理念
  5. 虚拟机VMware搭建代码环境
  6. 解决swagger-ui加了Oauth2后无法访问的问题
  7. Ajax请求中的Redirect()
  8. 文件比较 增量 更新 系统发布 增量更新
  9. 转http://www.anyliz.com/blog/article/Software/favorites-software-official-download-url.htm
  10. 前端项目如何做测试?
  11. Windows系统服务器系统日志在哪里查看?
  12. OSChina 周三乱弹 ——你是有多寂寞啊,看光头强都……
  13. Java读写csv文件操作
  14. 智能车图像处理(三)元素判断
  15. Borůvka算法学习小记
  16. 面试面经 | 2021大疆嵌入式软件工程师笔试题B卷
  17. 成为Linux大神——必须要具备的基本技能!
  18. npm install 很慢、卡死怎么解决
  19. “serve with message ‘spawn vue-cli-service ENOENT”的解决办法
  20. 小米air13.3第二个固态硬盘位m.2 sata能不能插m.2 nvme硬盘?m.2 sata硬盘能否插入m.2 nvme卡槽?

热门文章

  1. 利用turtle模块画一棵树,包括枝干和树叶,并涂上颜色
  2. Greenplum 实时数据仓库实践(10)——集成机器学习库MADlib
  3. 《项目开发团队分配管理软件》
  4. ASP.NET Web Forms 自学篇:(一)简介
  5. 让所有版本的IE卡死的HTML代码
  6. FlinkSql系列5之 Regular Join
  7. 随机效应与固定效应面板数据回归
  8. matlab 线透明度,matlab 曲线填充 透明度
  9. 微信任意用户密码修改漏洞分析
  10. python模拟登陆GDUFE教学一体化平台