php 做后端开发微信小程序实时语音 代码片段

  1. 确认小程序后台已经开通实时语音视频聊天功能
  2. 小程序端代码
//向后台请求签名
wx.login({
      complete: (res) => {
        if(res.code){
            wx.request({
              method:"GET",
              data:{code:res.code},
              url: 'xxxxxxx.com',//后端接口
              success:(re)=>{
                var data = re.data
                  t.setData({
                    data:data,
                    selfOpenId:data.openid
                  })
              }
            })
        }
      },
    })

//加入实时语音代码块
var t = this
    wx.getSetting({ 
        success:function(r){
          console.log(r)
           if(r.authSetting['scope.record']===true){
           // 是否有录音权限   roomType:video 是实测不生效 不能通过小程序原生组件获取到视频画面,官方可能在维护中.. 目前可能只支持实时语音  不支持 实时视频画面(个人理解 因为一直测试不通过  如有实现的欢迎吐槽  谢谢)
            var data = t.data.data
            wx.joinVoIPChat({
              signature:data.sign,
              nonceStr:data.nonceStr,
              timeStamp:parseInt(data.timeStamp),
              groupId:data.groupId,
              //roomType:'video',
              complete:(re)=>{
                
                console.log(re)
                if(re.errMsg == 'joinVoIPChat:ok'){
                  var openIdList = re.openIdList
                  console.log(openIdList)
                  // 加入成功  返回openIdList  当前房间里所有在线的  用户openid在这里插入代码片
                  t.setData({
                    openIdList:openIdList
                  })
                  return
                }
              }
            })
           }else{
           //  之前用户拒绝授权语音  无法直接弹出  需使用  wx.openSetting 方法打开设置  引导用户主动打开  
             if(r.authSetting['scope.record']===false){
                wx.openSetting({
					// 相关逻辑
				})
             }else{
             //这一层 可直接弹出获取录音授权
                wx.authorize({
                  scope: 'scope.record',
                  complete:(r)=>{
                    console.log(r)
                  }
                })
              }
           }
        }
    })
  1. 后台获取签名逻辑 (php tp5.1 框架 )
public function getVideoSign(){
		$appid = config('app.minappid');
   		$appsecret = config('app.minappecret');
		$code = $this->request->param('code');

		
		if(empty($code))
			jsonReturn(0,'错误code');

		$getInfoUrl = "https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$appsecret}&js_code={$code}&grant_type=authorization_code";
   		$info = curl_get($getInfoUrl);
   		$info = json_decode($info,true);
   		if(!$info['session_key'])
   			jsonReturn(0,'session_key  errors');

		$data[] = $appid;
		$data[] = $groupId = 'grop_ooo00_tests';//测试房间  这个groupId  需要生成唯一的  使用这个id 签名的人员进入都会进入一个实时语音房间
		$data[] = $nonceStr = createNoncestr();
		$data[] = $timeStamp = time();

		sort($data,5); //这里是个坑  php sort 的默认参数不会把数字进行字典排序  相关参数请自行查看php文档
		$st = implode('',$data); //拼接成一个字符串

			$hash = hash_hmac('sha256', $st,$info['session_key']); //通过 sha256 加密
			
			return json_encode(['openid'=>$info['openid'],'sign'=>$hash,'nonceStr'=>$nonceStr,'timeStamp'=>$timeStamp,'groupId'=>$groupId]); //返回小程序加入实时语音的相关参数给前端 

	}

相关页面展示就要和ui 小姐姐沟通了, 目前作者没有测通实时视频画面 ,如有意见测通的 请留意,感激不尽…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值