企业微信服务商代开发自建应用配置以及对接

目录

1.代开发应用模板创建与配置

1.1创建代开发应用模板

 1.2模板配置开发信息

1.3模板回调处理微信后台通知事件

1.4应用回调URL配置

1.5获取代开发应用secret(permanent_code)

2.代开发应用上线

3.代开发应用获取企业微信用户信息


1.代开发应用模板创建与配置

1.1创建代开发应用模板

 1.2模板配置开发信息

1.服务商代开发模板回调URL

说明:后续企业微信后台部分通知会推送到此回调URL

注意:这里配置时会要求验证代开发模板回调URL,这里可以使用官方的加解密库进行验证

服务端加解密方案说明:https://developer.work.weixin.qq.com/devtool/introduce?id=36388

官方加解密库示例下载:https://developer.work.weixin.qq.com/devtool/introduce?id=10128

  • 这里以php版本为例

 

1.目录结构 

2.验证url正确性需要参数

encodingAesKey //模板配置开发信息中的EncodingAesKey
Token //模板配置开发信息中的Token
corpId //服务商id 企业服务商后台通用开发参数里

 

 文件:Sample.php

/*
------------使用示例一:验证回调URL---------------
*企业开启回调模式时,企业号会向验证url发送一个get请求 
假设点击验证时,企业收到类似请求:
* GET /cgi-bin/wxpush?msg_signature=5c45ff5e21c57e6ad56bac8758b79b1d9ac89fd3&timestamp=1409659589&nonce=263014780&echostr=P9nAzCzyDtyTWESHep1vC5X9xho%2FqYX3Zpb4yKa9SKld1DsH3Iyt3tP3zNdtp%2B4RPcs8TgAE7OaBO%2BFZXvnaqQ%3D%3D 
* HTTP/1.1 Host: qy.weixin.qq.com接收到该请求时,企业应
1.解析出Get请求的参数,包括消息体签名(msg_signature),时间戳(timestamp),随机数字串(nonce)以及公众平台推送过来的随机加密字符串(echostr),
这一步注意作URL解码。
2.验证消息体签名的正确性 
3. 解密出echostr原文,将原文当作Get请求的response,返回给公众平台
第2,3步可以用公众平台提供的库函数VerifyURL来实现。*/$encodingAesKey = 'In9LJMuhLVN6x5Qkg8Kx3DmHV3xdKnxlJrKJnYt8lxF';
$token = 'aMRVjNDZ';
$corpId = '';//服务商id$sVerifyMsgSig = $_GET['msg_signature'];
$sVerifyTimeStamp = $_GET['timestamp'];
$sVerifyNonce = $_GET['nonce'];
$sVerifyEchoStr = $_GET['echostr'];if (isset($sVerifyEchoStr)) {
//这里记录获取到的参数,以便调试$myfile = fopen("log.txt", "w") or die("Unable to open file!");fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sVerifyMsgSig: " . $sVerifyMsgSig . "\r\n");fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sVerifyTimeStamp: " . $sVerifyTimeStamp . "\r\n");fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sVerifyNonce: " . $sVerifyNonce . "\r\n");fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sVerifyEchoStr: " . $sVerifyEchoStr . "\r\n");// 需要返回的明文$sEchoStr = "123456";$wxcpt = new WXBizMsgCrypt($token, $encodingAesKey, $corpId);$errCode = $wxcpt->VerifyURL($sVerifyMsgSig, $sVerifyTimeStamp, $sVerifyNonce, $sVerifyEchoStr, $sEchoStr);if ($errCode == 0) {echo $sEchoStr;// 验证URL成功,将sEchoStr返回// HttpUtils.SetResponce($sEchoStr);} else {print("ERR: " . $errCode . "\n\n");//fwrite($myfile, "" . date('Y-m-d H:i:s') . "----errCode: " . $errCode . "\r\n");}fclose($myfile);
}

到这里,模板配置成功.

1.3模板回调处理微信后台通知事件

回调接口官方概述:https://developer.work.weixin.qq.com/document/path/90613

目前常用到的通知事件有

请求的包体中InfoType代表通知事件类型

1.推送suite_ticket:https://developer.work.weixin.qq.com/document/path/90628

 2.授权成功通知事件:https://developer.work.weixin.qq.com/document/path/90642

这个里面拿到的auth_code可以获取到应用secret,secret用于获取应用access_token,该access_token用于获取用户敏感信息

 3.重置永久授权码通知事件:https://developer.work.weixin.qq.com/document/path/94758

这个里面拿到的auth_code可以获取到应用secret,secret用于获取应用access_token,该access_token用于获取用户敏感信息

注意:

1.下面这个处理逻辑仍然是在模板回调url指向的文件里,前面url正确性验证通过后需要注释掉验证url正确性相关逻辑代码,不然会出错。

2.通知收到以后,必须立即作出响应,文档里的通知事件响应是返回一个success字符串

文件:Sample.php

1.处理事件需要参数

encodingAesKey //模板配置开发信息中的EncodingAesKey
Token //模板配置开发信息中的Token
corpId // 这里用的是刚刚创建成功的模板id

 

$encodingAesKey = '';
$token = '';
$corpId = ''; //模板id$cn = new CommonFunc(); //公共函数类
$sReqMsgSig = $_GET["msg_signature"];
$sReqTimeStamp = $_GET["timestamp"];
$sReqNonce = $_GET['nonce'];
// 获取post请求的密文数据
$sReqData =  file_get_contents("php://input");
$sMsg = "";  // 解析之后的明文
$wxcpt = new WXBizMsgCrypt($token, $encodingAesKey, $corpId);
$errCode = $wxcpt->DecryptMsg($sReqMsgSig, $sReqTimeStamp, $sReqNonce, $sReqData, $sMsg);
$myfile = fopen("log.txt", "w") or die("Unable to open file!");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----msg_signature: " . $sReqMsgSig . "\r\n");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----timestamp: " . $sReqTimeStamp . "\r\n");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----nonce: " . $sReqNonce . "\r\n");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sReqDatas: " . $sReqData . "\r\n");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sMsg: " . $sMsg . "\r\n");
if ($errCode == 0) {// 解密成功,sMsg即为xml格式的明文//var_dump($sMsg);echo 'success'; //响应企业微信的请求// TODO: 对明文的处理/*"<xml><SuiteId><![CDATA[dk623666a23e0de46f]]></SuiteId><AuthCode><![CDATA[uRRKjj2uhp5nLyTHb-s-32ddSru9zK-6Jy3hmuOTQFPWj-dseQ2L9bGXyfbEaWYa4jU43C5AmWl_bbGoAbfL9rKcZgqUrH_xIKtAds0Z1oc]]></AuthCode><InfoType><![CDATA[reset_permanent_code]]></InfoType><TimeStamp>1661756691</TimeStamp></xml>"
*///解析xml数据$arr = (array)simplexml_load_string($sMsg, 'SimpleXMLElement', LIBXML_NOCDATA);$InfoType = $arr['InfoType'];if ($InfoType == 'reset_permanent_code') {//重置授权码通知事件fwrite($myfile, "" . date('Y-m-d H:i:s') . "----AuthCode: " . $arr['AuthCode'] . "\r\n");$auth_code_file = fopen("auth_code.txt", "w");fwrite($auth_code_file, $arr['AuthCode']);fclose($auth_code_file);//保存授权应用密钥$cn->getSecret();} else if ($InfoType == 'suite_ticket') {//推送suite_ticket通知事件fwrite($myfile, "" . date('Y-m-d H:i:s') . "----SuiteTicket: " . $arr['SuiteTicket'] . "\r\n");$suite_ticket_file = fopen("suite_ticket.txt", "w");fwrite($suite_ticket_file, $arr['SuiteTicket']);fclose($suite_ticket_file);} else if ($InfoType == 'create_auth') {//授权成功通知通知事件fwrite($myfile, "" . date('Y-m-d H:i:s') . "----AuthCode: " . $arr['AuthCode'] . "\r\n");$auth_code_file = fopen("auth_code.txt", "w");fwrite($auth_code_file, $arr['AuthCode']);fclose($auth_code_file);//保存授权应用密钥$cn->getSecret();}
} else {fwrite($myfile, "" . date('Y-m-d H:i:s') . "----errCode: " . $errCode . "\r\n");//exit(-1);
}
fclose($myfile);

 公共函数类

class CommonFunc
{/*** 获取应用授权的token(suite_access_token)* 获取步骤 * 1.通过suite_id(第三方应用ID),suite_secret(第三方应用密钥),suite_ticket(推送suite_ticket通知事件)换取suite_access_token*/public function getSuitAccessToken(){$suite_ticket_arr = file("suite_ticket.txt");$suite_ticket = $suite_ticket_arr[0];$suite_id = '';$suite_secret = '';//获取文件缓存中的suit_access_token$suite_access_token_arr = file("suite_access_token.txt");$suite_access_token = $suite_access_token_arr[0];$last_time = strtotime($suite_access_token_arr[1]);$now_time = time();$save_time = $now_time + 1.5 * 60 * 60;//一个半小时获取一次if ($last_time - $now_time < 1800) {$url = 'https://qyapi.weixin.qq.com/cgi-bin/service/get_suite_token';$post_data = array('suite_id' => $suite_id,'suite_secret' => $suite_secret,'suite_ticket' => $suite_ticket);$header = array('Content-type' => '');$result = $this->curl_post($url, $post_data, 5, $header, 'json');$suite_access_token_file =  fopen("suite_access_token.txt", "w");fwrite($suite_access_token_file, $result['suite_access_token'] . "\r\n");fwrite($suite_access_token_file, date('Y-m-d H:i:s', $save_time) . "\r\n");fclose($suite_access_token_file);}return $suite_access_token;}/*** 获取代开发应用secret*  获取步骤 * 1.通过重置授权码通知事件获取auth_code(需要在服务商后台重置secret进行触发)* 2. 获取应用授权的token(suite_access_token)* 3.根据1,2步骤获取的参数去得到secret*/public function getSecret(){$auth_code_arr = file("auth_code.txt");$auth_code = $this->ClearHtml($auth_code_arr[0]);$suite_access_token = $this->ClearHtml($this->getSuitAccessToken());$url = 'https://qyapi.weixin.qq.com/cgi-bin/service/get_permanent_code?suite_access_token=' . $suite_access_token;$post_data = array('auth_code' => $auth_code,);$header = array('Content-type' => '');//file_get_contents进行post请求,这里使用curl,报错提示网址错误,原因未知$res =$this->file_post($url, $post_data, 5, $header, 'json');$result = json_decode($res,true);$myfile = fopen("log.txt", "w");fwrite($myfile, $res);fclose($myfile);$secret = $result['permanent_code'];$secret_file =  fopen("secret.txt", "w");fwrite($secret_file, $secret);fclose($secret_file);}/*** * curl post请求* */public function curl_post($url, $post_data = array(), $timeout = 5, $header = "", $data_type = ""){$header = empty($header) ? '' : $header;//支持json数据数据提交if ($data_type == 'json') {$post_string = json_encode($post_data);} elseif ($data_type == 'array') {$post_string = $post_data;} elseif (is_array($post_data)) {$post_string = http_build_query($post_data, '', '&');}$ch = curl_init();    // 启动一个CURL会话curl_setopt($ch, CURLOPT_URL, $url);     // 要访问的地址curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  // 对认证证书来源的检查   // https请求 不验证证书和hostscurl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  // 从证书中检查SSL加密算法是否存在curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器curl_setopt($ch, CURLOPT_POST, true); // 发送一个常规的Post请求curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);     // Post提交的数据包curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);     // 设置超时限制防止死循环curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);     // 获取的信息以文件流的形式返回 curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //模拟的header头$result = curl_exec($ch);if (curl_errno($ch)) {$curl_log = fopen("curl_log.txt", "w");fwrite($curl_log, date('Y-m-d H:i:s') . '--curl请求错误网址:' . $url . "\r\n");fwrite($curl_log, date('Y-m-d H:i:s') . '--curl请求错误' . curl_errno($ch) . "\r\n");fclose($curl_log);}$result = json_decode($result, true);curl_close($ch);return $result;}/*** file_get_contents进行post请求*/public  function file_post($url, $post_data, $timeout = 5, $header = "", $data_type = ""){$postdata = json_encode($post_data);$options = array('http' => array('method' => 'POST','header' => 'Content-type:application/x-www-form-urlencoded','content' => $postdata,'timeout' => 15 * 60 // 超时时间(单位:s)));$context = stream_context_create($options);$result = file_get_contents($url, false, $context);return $result;}public  function ClearHtml($str){$str = trim($str); //清除字符串两边的空格$str = strip_tags($str, ""); //利用php自带的函数清除html格式$str = preg_replace("/\t/", "", $str); //使用正则表达式替换内容,如:空格,换行,并将替换为空。$str = preg_replace("/\r\n/", "", $str);$str = preg_replace("/\r/", "", $str);$str = preg_replace("/\n/", "", $str);$str = preg_replace("/ /", "", $str);$str = preg_replace("/  /", "", $str);  //匹配html中的空格return trim($str); //返回字符串}
}

到这里模板回调url配置完成。

1.4应用回调URL配置

这里暂时用已配置好的代开发应用配置示例

注意:这里Token和EncodingAESKey最好和模板配置开发时的保持一致

文件:CorpSample.php

验证URL回调

注意,应用的验证URL回调与模板的验证URL回调有点不一样这里不是直接用服务商id

这里企业主体的corpid需要转换为服务商的密文corpid

corpid转换代开发应用安全性升级 - 接口文档 - 企业微信开发者中心

获取服务商凭证:https://developer.work.weixin.qq.com/document/path/91200 

 所需要的参数

$encodingAesKey = '';   //配置的encodingAesKey
$token = '';//配置的token
$corpId = ''; //企业号id 登录企业微信后台,我的企业即可看到//服务商通用开发参数
$sCorpid = '';
$sProviderSecret = '';

逻辑代码

$encodingAesKey = 'In9LJMuhLVN6x5Qkg8Kx3DmHV3xdKnxlJrKJnYt8lxF';
$token = 'aMRVjNDZ';
$corpId = ''; //企业号id//服务商通用开发参数
$sCorpid = '';
$sProviderSecret = '';
$cn = new CommonFunc();
//获取服务商凭证
$sProviderToken = $cn->getProviderToken($sCorpid, $sProviderSecret);
$provider_access_token  = $sProviderToken['provider_access_token'];
//获取转化呢后的密文corpid
$open_corpid_data = $cn->corpidChange($corpId, $provider_access_token);
$open_corpid = $open_corpid_data['open_corpid'];
$sVerifyMsgSig = $_GET['msg_signature'];
$sVerifyTimeStamp = $_GET['timestamp'];
$sVerifyNonce = $_GET['nonce'];
$sVerifyEchoStr = $_GET['echostr'];$myfile = fopen("log.txt", "w") or die("Unable to open file!");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sVerifyMsgSig: " . $sVerifyMsgSig . "\r\n");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sVerifyTimeStamp: " . $sVerifyTimeStamp . "\r\n");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sVerifyNonce: " . $sVerifyNonce . "\r\n");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----sVerifyEchoStr: " . $sVerifyEchoStr . "\r\n");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----provider_access_token: " . $provider_access_token . "\r\n");
fwrite($myfile, "" . date('Y-m-d H:i:s') . "----open_corpid: " . $open_corpid . "\r\n");
// 需要返回的明文
$sEchoStr = "123456";
$wxcpt = new WXBizMsgCrypt($token, $encodingAesKey, $open_corpid);
$errCode = $wxcpt->VerifyURL($sVerifyMsgSig, $sVerifyTimeStamp, $sVerifyNonce, $sVerifyEchoStr, $sEchoStr);
if ($errCode == 0) {echo $sEchoStr;// 验证URL成功,将sEchoStr返回// HttpUtils.SetResponce($sEchoStr);
} else {fwrite($myfile, "" . date('Y-m-d H:i:s') . "----errCode: " . $errCode . "\r\n");
}
fclose($myfile);class CommonFunc
{/*** 获取服务商的token* @param string $sCorpId 服务商管理后台通用开发参数-corpid* @param string $sProviderSecret 服务商管理后台通用开发参数-ProviderSecret*/public function getProviderToken($sCorpid, $sProviderSecret){$url = 'https://qyapi.weixin.qq.com/cgi-bin/service/get_provider_token';$res = $this->curl_post($url, array('corpid' => $sCorpid, 'provider_secret' => $sProviderSecret), 5, array('Content-type' => ''), 'json');return $res;}/*** * corpid转化* @param string $sCorpid 企业明文corpid* @param string $sToken 服务商token */public function corpidChange($sCorpId, $sToken){$url = 'https://qyapi.weixin.qq.com/cgi-bin/service/corpid_to_opencorpid?provider_access_token=' . $sToken;$res = $this->curl_post($url, array('corpid' => $sCorpId), 5, array('Content-type' => ''), 'json');return $res;}/*** * curl post请求* */public function curl_post($url, $post_data = array(), $timeout = 5, $header = "", $data_type = ""){$header = empty($header) ? '' : $header;//支持json数据数据提交if ($data_type == 'json') {$post_string = json_encode($post_data);} elseif ($data_type == 'array') {$post_string = $post_data;} elseif (is_array($post_data)) {$post_string = http_build_query($post_data, '', '&');}$ch = curl_init();//启动一个CURL会话curl_setopt($ch, CURLOPT_URL, $url); // 要访问的地址curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //对认证证书来源的检查https请求 不验证证书和hostscurl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//从证书中检查SSL加密算法是否存在curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);//模拟用户使用的浏览器curl_setopt($ch, CURLOPT_POST, true); // 发送一个常规的Post请求curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); // Post提交的数据包curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);// 设置超时限制防止死循环curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 获取的信息以文件流的形式返回 curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //模拟的header头$result = curl_exec($ch);$result = json_decode($result, true);curl_close($ch);return $result;}

至此,应用回调url配置成功

1.5获取代开发应用secret(permanent_code)

1.通过suite_id(模板ID),suite_secret(模板Secret),suite_ticket(推送suite_ticket通知事件)换取suite_access_token

参考:https://developer.work.weixin.qq.com/document/path/90600

2.通过前面的授权成功通知事件或者重置永久授权码通知事件拿到的auth_code,

3.根据1,2步骤获取的参数去得到secret(获取企业永久授权码)

参考:https://developer.work.weixin.qq.com/document/path/90603

2.代开发应用上线

3.代开发应用获取企业微信用户信息

注意:这里需要授权企业登录企业微信后台对用户信息进行授权

这部分参考的是企业微信的自建应用开发,不是第三方应用开发

需要参数

     'permanent_code'=>'',//代开发应用secret(永久授权码)'corpid'=>'',//企业明文CorpID'redirect_url'=>'',//授权重定向地址 'agentid'=>'1000006',//应用id

1.通过OAuth2的授权登录前端获取到code,

  • 参考:https://developer.work.weixin.qq.com/document/path/91119
  • 2.后端通过前端提交的code,去获取access_token
  • 这里面的corpsecret是前面获取的企业永久授权码 corpid就是企业明文id
  • 参考:https://developer.work.weixin.qq.com/document/path/91039
  • 3.获取访问用户身份
  • 这里会获取到用户的USERID,scope为snsapi_privateinfo,且用户在应用可见范围之内时返回user_ticket,
  • 后续利用该参数可以获取用户信息或敏感信息
  • 参考:https://developer.work.weixin.qq.com/document/path/91023
  • 4.获取用户详情
  • 这里获取的是用户的基本信息,不包括敏感信息
  • 参考:https://developer.work.weixin.qq.com/document/path/90196
  • 5.获取用户敏感信息
  • 参考https://developer.work.weixin.qq.com/document/path/95833

这里有个坑:使用开发者工具调试时,只能获取一次敏感信息,后续就不能,后来研究发现应该是微信开发者工具还未优化好这一部分,在真机上测试是正常的。开发者工具版本:1.06.2208010

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32997.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从“在哪儿”到“去哪儿”,广和通5G+Cat1+GNSS模组全面赋能定位应用场景

从日常导航寻路&#xff0c;到信息定位&#xff0c;再到资产追踪&#xff0c;现代生活与工作几乎都无法离开“位置信息”而运作。无论是物联网应用场景的实现&#xff0c;还是物联网商业模式的创新&#xff0c;都需要定位信息作为数据支撑。根据Market Insight Reports报告预测…

再记公式弱爆了!用 ChatGPT 将 Excel 工作效率提高 10 倍

公众号关注 「奇妙的 Linux 世界」 设为「星标」&#xff0c;每天带你玩转 Linux &#xff01; 在未来&#xff0c;精通 Excel 或许不再是简历亮点了。 ChatGPT 自去年 11 月 30 日 OpenAI 重磅推出以来&#xff0c;这款 AI 聊天机器人迅速成为 AI 界的「当红炸子鸡」。 一经发…

最新AI创作系统+支持ai绘画+支持GPT4.0+实时语音识别输入+文章资讯发布功能+用户会员套餐+后台一键版本更新!

最新AI创作系统支持ai绘画支持GPT4.0实时语音识别输入文章资讯发布功能用户会员套餐后台一键版本更新&#xff01; AI创作系统一、源码系统介绍二、AI创作系统程序下载三、安装教程四、主要功能展示五、更新日志 AI创作系统 AI创作系统: 1、提问&#xff1a;程序已经支持GPT3.…

最新AI创作ChatGPT系统V5.0.5+支持GPT4.0+支持ai绘画+实时语音识别输入+用户会员套餐

最新AI创作ChatGPT系统V5.0.5支持GPT4.0支持ai绘画实时语音识别输入用户会员套餐 AI创作ChatGPT系统一、源码系统介绍二、AI创作系统程序下载三、安装教程四、主要功能展示五、更新日志 程序已支持ChatGPT4.0、Midjourney绘画、GPT3.5绘画、新增绘画广场功能、Prompt功能&#…

如何制作“虚拟主播”?小灰一分钟教给大家!

什么是虚拟主播&#xff1f; 虚拟主播也被称为数字人&#xff0c;是一种通过计算机生成图像技术创建的虚拟角色&#xff0c;用于制作视频和直播&#xff0c;甚至是全息投影。 虚拟主播早就不是一个新概念了&#xff0c;前几年在日本很流行的虚拟网红初音未来、绊爱&#xff0c;…

手把手教你打造自己的 AI 虚拟主播

零、写在前面一、 准备环境二、配置软件环境2.1 OBS 安装2.2. VTube Studio 安装 三、开启 B 站直播四、开启 AI 主播五、直播最终效果 零、写在前面 AI 直播在近年来得到了快速的发展和普及&#xff0c;它已经成为了直播平台的重要组成部分。目前&#xff0c;许多知名的直播平…

Linux下基于UDP的简易多人聊天室创建——群聊、私聊、上线通知(Socket编程)

Linux下基于UDP的简易多人聊天室创建&#xff08;Socket编程&#xff09; OSI和TCP/IP&#xff1a;关于TCP/IP协议关于UDP协议UDP编程的一般步骤[^2] Socket套接字网络编程UDP网络聊天室实现功能概述服务器编程客户端编程运行结果 总结遇到的问题服务器编程客户端编程 本文采用…

基于Linux下TCP/IP协议局域网聊天室

这几天一直在看TCP/IP这块的内容,写个简单socket通信demo,实现了多个客户端相互发送消息,以及服务端给多个客户端发送上线/下线消息 基本框架: server.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #inc…

第22节 NAT——实现公私有IP地址转换

NAT 1 NAT概述1.1 IP地址概述1.2NAT概述 2 NAT分类2.1 静态NAT2.2 动态NAT2.3 PAT2.4 静态PAT 3 NAT命令3.1 定义内外网接口3.2 配置PAT3.3 配置静态端口转换 4 路由器工作原理归纳完善5 总结 1 NAT概述 1.1 IP地址概述 ipv4地址使用现状&#xff1a;现在已严重不够用。仅ABC…

Linux_C_tcp/ip通信

目录 代码相互收发文本交互 遇到的问题 代码 相互收发 server代码 /********** 1、在服务器端接受消息时知道对方的IP和端口提示&#xff1a;bind出现&#xff1a;Address already in use 方法&#xff1a;netstat -nap查看 用kill -9 pid杀死 2、利用TCP实现文件传输 **…

法大大Luke:打造深度生态,实现联合创新

4月26日&#xff0c;国内领先的电子合同和电子签云服务平台法大大举办了以“数智‘签’引&#xff0c;万物生长”为主题的春季产品发布会&#xff0c;并推出全新一代数智化签约管理平台。该平台型产品经过2年半的调研分析及打磨验证&#xff0c;聚焦新的市场环境下企业、组织、…

在阿里6年,但今年这情况,劝大家还是多一手准备吧

大家期待的经济繁荣&#xff0c;没有来。 往年的金三银四&#xff0c;跳槽涨薪&#xff0c;也没有来。 来了的&#xff0c;是大公司裁员的消息频频爆出。 来了的&#xff0c;是ChatGPT&#xff0c;第一批受到影响的人已经失业了。 而且你有没有发现&#xff0c;它平时没什么…

【企业架构设计实战】大数据架构设计

目录 数据架构概述 什么是数据? 什么是数据架构

【企业架构设计实战】5 大数据架构设计

数据架构概述 什么是数据? 一个企业的数字化核心是数据,数据化的价值依赖于数据的标准和质量,数据对一个企业来说至关重要,它也是整个信息化建设及企业架构的核心。数据具有多样性,有结构化的、非结构化的,与业务相关的、与系统相关的,企业内部的、企业外部的等。 从数据…

找工作之前问问自己做好这些准备以及知道这些面试题的答案了吗?

根据回忆写下的面试要点&#xff0c;都是比较常见的问题。大家可以对照回答下&#xff0c;不清楚的可以查下资料补充下。 今年虽然疫情开放了&#xff0c;但是现在的Android开发的市场行情明显明显比之前稳定了许多&#xff0c;现在大厂疯狂裁员&#xff0c;小公司要求还挺高的…

OceanBase CTO杨传辉:放手去干,这行没有35岁危机

近日&#xff0c;OceanBase CTO 杨传辉做客 CSDN 《开谈&#xff1a;中国开源数据库新格局》栏目&#xff0c;中达金桥资深数据库专家卢东明对话杨传辉等中国领先数据库厂商从业者。对话开场&#xff0c;杨传辉给 OceanBase 打了 3 个标签&#xff1a;分布式、性价比、HTAP&…

GPT 大模型的应用路线图:可控性是最强路标 | The Roadmap of Generative AI

目录 生成式AI的应用路线图:可控性是最强路标 | The Roadmap of Generative AI 生成式AI的应用场景在哪里</

AI应用路线图:可控性是最强路标

生成式AI的可控性越强&#xff0c;对市场和产业的颠覆性就越大&#xff01; 作者 | 王咏刚、童超 责编 | 夏萌 生成式 AI 的应用场景在哪里 Stable Diffusion、ChatGPT等生成式AI技术&#xff08;Generative AI&#xff09;在2023年上半年吸引了IT创投圈的最多注意力。当我们稍…

抖音根据关键词取商品列表 API 返回值说明

请求参数&#xff1a;q连衣裙&page1&sort 参数说明&#xff1a;q:关键词, filter:搜索类型&#xff1a;filtervideo 搜索视频、filtergoods 搜索商品、filteruser 搜索用户, page:页数 sort:排序(目前只视频可排序):sortnew 最新发布 sortcredit 最多点赞 sortbid 综合…

简单对接抖音小店的接口

最近公司需要对接抖音小店的接口。然后其实对接起来还是蛮简单的&#xff0c;不过自己阅读文档的能力还有点问题&#xff0c;所以这里记录一下开发遇到的问题。 文档地址&#xff1a;https://op.jinritemai.com/docs/guide-docs/6/14 首先是需要准备的配置。 抖音小店的整个流…