首页 > 技术文章 > php 7.3 接入小程序直播 - 创建直播间

huibaoqiang 2021-11-24 19:18 原文

小程序直播间创建踩的坑:

  直播间创建需要上传背景图、分享图以及封面图;图片需上传至微信图片素材,在创建时传入图片素材的 mediaID ,这个是直播间创建最大的坑:

  根据文档:

  

 

 

   你会发现引导链接将你引导到公众号 -> 素材管理的开发文档去了。天杀的公众号文档啊啊啊啊。我要接入的是小程序直播。。。。。。然后你会发现他是素材管理,上传之后会返回mediaID。并且公众号和小程序是关联的,当你联想到小程序直播素材需要上传到对应关联的公众号素材的时候恭喜你入坑了。整个流程在创建之前都是没有问题的,接口返回一切正常。但是在最后一步创建的时候会无脑报错 errcode:300031 直播间封面图不合规。恭喜你,这个错误除了文档有这样的说明外只能百度到图片尺寸或大小不符合小程序直播的要求。然后不会发现同样的图在后台可以创建成功,但在你的接口就是永远无法成功。

  在几乎已经放弃的边缘。一篇帖子貌似是指明了一条路:

  

 

 

   下边有一条回复是这样的:

  

 

 

   文档误导了大家。小程序直播需要的素材怎么会让大家上传到公众号呢。但是小程序并没有素材管理的模块,想到这就一阵头大。上传到公众号又不行,小程序又没有。然后想想微信的套路,会不会把素材放到的其他的功能模块下做了一个无关紧要的说明,想到这试着搜索了下小程序文档:

  

 

 

   客服消息时可以使用素材的,这会不会有说明呢。

  

 

 

   竟然真的在这,天杀的文档,隐藏的这么深。不管怎么样找到了先试试:

   首先获取access_token:

rivate $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&";


public function __construct($appId,$secret)
{
$this -> url = $this -> url .= "appid=" . $appId . "&secret=" . $secret;
}

/**
* 获取小程序Token
* @return mixed
*/
public function checkAccessToken(){
if(Cache::has("program_access_token")){
return Cache::get("program_access_token");
}else{
$result = requestGetData($this -> url);
if(isset($result['access_token'])){
Cache::set("program_access_token",$result['access_token'],($result['expires_in']-60));
return $result['access_token'];
}
}
}
大概意思的话就是实例化这个类,传入APPID以及secret,然后调用 checkAccessToken 方法获取 access_token 。以下是调用方法:
static private $mediaUrl = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=";

public function __construct($appID,$secret)
{
$token = new ProgramAccessToken($appID,$secret);
$accessToken = $token -> checkAccessToken();
self::$mediaUrl = self::$mediaUrl.$accessToken."&type=image";
}


public function uploadMedia($data){
// $fileData = ['media' => "@".$imgDir];
$res = http_post(self::$mediaUrl,$data);
return $res;
}
mediaUrl 是上传素材的接口,在这个类里面创建构造方法实例化获取 access_token 的类并传入参数,获取到token后拼接至上传素材的链接上,调用 uploadMedia 方法把图片上传至小程序素材库。
$data 为上传的图片数组,PHP低版本的@拼接在7.3已经被启用,所以在传入之前需要 new \CURLFile($fileDir) $fileDir 是你要上传的图片的绝对路径。
到这一切准备就绪,可以开始创建直播间了。
static private $createRoomUrl = "https://api.weixin.qq.com/wxaapi/broadcast/room/create?access_token=";

static private $editRoomUrl = "https://api.weixin.qq.com/wxaapi/broadcast/room/editroom?access_token=";

static private $accessToken;

static private $sendData;

public function __construct($appID,$secret)
{
$token = new ProgramAccessToken($appID,$secret);
self::$accessToken = $token -> checkAccessToken();
}

/**
* 创建直播间
* @param $data
* @return bool|string
*/
public function createRoom($data){
self::$createRoomUrl = self::$createRoomUrl.self::$accessToken;
self::$sendData = [
'name' => $data['live_name'],
'coverImg' => $data['live_cover_media_id'],
'startTime' => strtotime($data['live_date'].' '.$data['live_start_time']),
'endTime' => strtotime($data['live_date'].' '.$data['live_end_time']),
'anchorName' => $data['live_anchor_name'],
'anchorWechat' => $data['live_anchor_wechat'],
'shareImg' => $data['live_share_media_id'],
'feedsImg' => $data['live_feeds_media_id'],
'type' => $data['type'],
'closeLike' => $data['live_close_like'],
'closeGoods' => $data['live_close_goods'],
'closeComment' => $data['live_close_comment'],
'closeReplay' => $data['live_close_replay'],
'closeShare' => $data['live_close_share'],
'closeKf' => $data['live_close_kf'],
];
$res = http_post(self::$createRoomUrl,http_build_query(self::$sendData));
$res = json_decode($res,true);
$res['data'] = $data;
$res['sendData'] = self::$sendData;
return $res;
}
东西太多懒得打字了,最后拼接的data 以及 sendData 是为了排错拼接的,可以省略。看不懂可以私信我


推荐阅读