作者:Mintimate
Mintimate's Blog,只为与你分享
Web Function,实质上就是Serverless服务的一种,可以让用户在不需要服务器情况下,使用本来需要服务器才能使用的函数、功能(如:Nginx、PHP、Node等)。
那么?实际使用是怎么样的呢?简单地说:
本次教程(体验),就以Web Function的PHP Web函数为例,搭建一个推送服务,用于推送内容到个人(团队)的微信上。方便我们编写代码时,作为一个API接口,用到自己的项目内。
实际上,我们这次教程使用的是方糖推送生态下的开源推送项目:
大概的逻辑,和其生态下的Server酱类似,但是更简洁:
而方糖为了缓解服务器,对普通个人开始限制API次数;我们使用Web Function搭建API接口,服务由我们自己提供(所以不限次数),在我们的其他开发中,可以调用这个接口,对我们的个人微信进行推送。
在我们搭建Hexo静态博客过程中,我们服务器或静态托管平台并没有推送服务。这个时候,我们可以使用JavaScript写好评论系统,存储在远程服务器,同时使用自己的推送服务(搭建在Web Function)在其他用户评论时,博主进行提醒。实际效果:
一般,我们开发项目,比如:图形识别、文字识别等,都是使用第三方平台提供的API接口,比如:腾讯云人工智能-图像识别,可以直接使用其API放到我们的项目中:
当我们API使用次数用完,我们也可以使用我们的推送服务,推送到我们自己的微信,提醒我们及时续费。
因为使用Web Function的原因,前期你不需要自己购买和配置Linux服务器,甚至不用配置PHP。
我们进入Web Function的页面,第一次使用需要给你当前账户权限(实际开发过程中,应该是一个腾讯云主号,按需分配子账户来权限管理)。之后,选择PHP Web Function
:
根据开源推送项目wecomchan,PHP版本推送,需要:
我们需要进行检查,依此点击:函数管理
-函数代码
-终端
-新终端
:
之后,在终端内输入:
php -m
确保其安装了curl
和json
模块(一般默认有安装)。
微信接口申请,实际上是申请企业微信的接口。但是个人也可以申请。(且后期可以选择推过微信接收推送,实际上不需要多下载安装一个企业微信在手机上。)
进入企业微信官网,注册一个企业微信。创建好后。我们选择应用管理
,并创建一个应用:
创建好后,我们获取应用AgentId和Secret:
进入我的企业页面,拉到最下边,可以看到企业ID:
如果你并不想保留企业微信在手机上,想直接推送消息到自己的个人微信,可以进入「我的企业」 → 「微信插件」,拉到下边扫描二维码,关注以后即可收到推送的消息:
现在,我们重新回到我们刚刚创建的Web Function,重命名hello.php
为index.php
,并更改引导接口:
之后,我们在index.php
内填写:
<?php // config // ====================================== define('SENDKEY', 'set_a_sendkey'); define('WECOM_CID', '企业微信公司ID'); define('WECOM_SECRET', '企业微信应用Secret'); define('WECOM_AID', '企业微信应用ID'); define('WECOM_TOUID', '@all'); // 以下配置需要有 redis 服务和 phpredis 扩展 define('REDIS_ON', false); define('REDIS_HOST', '127.0.0.1'); define('REDIS_PORT', '6379'); define('REDIS_EXPIRED', '7000'); define('REDIS_KEY', 'wecom_access_token'); // code // ====================================== if (strlen(@$_REQUEST['sendkey']) < 1 || strlen(@$_REQUEST['text']) < 1 || @$_REQUEST['sendkey'] != SENDKEY ) { die('bad params'); } header("Content-Type: application/json; charset=UTF-8"); echo send_to_wecom(@$_REQUEST['text'], WECOM_CID, WECOM_SECRET, WECOM_AID, WECOM_TOUID); function redis() { if (!isset($GLOBALS['REDIS_INSTANCE']) || !$GLOBALS['REDIS_INSTANCE']) { $GLOBALS['REDIS_INSTANCE'] = new Redis(); $GLOBALS['REDIS_INSTANCE']->connect(REDIS_HOST, REDIS_PORT); } return $GLOBALS['REDIS_INSTANCE']; } function send_to_wecom($text, $wecom_cid, $wecom_secret, $wecom_aid, $wecom_touid = '@all') { $access_token = false; // 如果启用redis作为缓存 if (REDIS_ON) { $access_token = redis()->get(REDIS_KEY); } if (!$access_token) { $info = @json_decode(file_get_contents("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=".urlencode($wecom_cid)."&corpsecret=".urlencode($wecom_secret)), true); if ($info && isset($info['access_token']) && strlen($info['access_token']) > 0) { $access_token = $info['access_token']; } } if ($access_token) { $url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token='.urlencode($access_token); $data = new \stdClass(); $data->touser = $wecom_touid; $data->agentid = $wecom_aid; $data->msgtype = "text"; $data->text = ["content"=> $text]; $data->duplicate_check_interval = 600; $data_json = json_encode($data); $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($ch); if ($response !== false && REDIS_ON) { redis()->set(REDIS_KEY, $access_token, ['nx', 'ex'=>REDIS_EXPIRED]); } return $response; } return false; }
同时,注意更改:
其中的参数:
SENDKEY
:自定义内容,类似token验证WECOM_CID
:上文步骤中获取的企业IDWECOM_SECRET
:上文步骤中获取的应用SecretWECOM_AID
:上文步骤中获取的应用AgentId完成上述步骤后,我们点击部署即可:
之后,使用其访问路基即可调取改API:
之后的使用,可以用Get/Post
发起请求,请求参数为:
sendkey
:上文自定义内容,类似token验证text
:需要发送到微信的消息部署服务后,这个API就已经可以使用了,我们可以测试一下:
这样的API就算搭建完成了,大家可以应用到自己的项目里了(比如:Vue内
、Springboot接口
等)
使用Web Function,方便用户部署当一功能,进而使用某一函数或者功能。十分方便,比如本文搭建的推送服务,方便用户的工程项目,更好地和开发者进行交互。
当然,目前还是有些不足(我使用时候的感受):
当然,对于开发一个推送服务给项目开发者来说,都不是什么大问题。
作者:小傅哥 博客: https://bugstack.cn 沉淀、分享、成长,让自己和他人都能...
1. 接口描述 接口请求域名: cvm.tencentcloudapi.com 。 本接口 (AssociateInst...
腾讯 云虚拟主机 叫什么?腾讯云现在基本搜不到 虚拟主机 了,像阿里云也不怎么...
真正的数据价值取决于对业务的洞察力。 数据分析是企业拥有的最强大的资源之一。...
在使用裸金属服务器前,您需要完成本文中的准备工作。 注册华为云并实名认证 为...
网络配置 设置“网络”:在下拉列表中选择可用的虚拟私有云、子网,并设置私有IP...
云服务器 内存最大多少?内存是决定 云服务器 性能的非常重要的一个参数,内存最...
背景介绍 监控告警系统作为最为常用的服务 能够让开发运维人员时刻了解服务的当...
本文转载自微信公众号「Java大数据与数据仓库」,作者老董。转载本文请联系Java...
今天,国际权威AI基准测试MLPerf公布了2021年最新推理测试榜单。 图像分类性能测...