免费的新浪云sae服务器申请和使用(图)
2021-06-25
1 公众号准备
先申请公众号申请公众号网页
由于一般个人订阅账号开放功能有限,作为学习者,我们不建议使用该账号的开发者模式进行开发。相反微信公众平台开发 php,申请一个测试帐户进行开发和学习。测试账号的开通功能基本可以满足我们的学习需求。
默认的测试账号登录是这样的
2 服务器准备
微信开发需要有公网IP的服务器,一般可以使用各种云平台的服务器:比如腾讯云、阿里云等,大部分都是收费的。如果你只是体验一下,你可以使用免费的。新浪云服务器
2.1 新浪sae服务器的应用和使用(仅支持PHP)2.1.1 创建应用
打开官网
注册或登录,点击控制台->云应用SAE,点击创建应用
选择空间(运行环境选择标准环境,其他需要付费)
2.1.2 代码管理
在应用列表中选择管理
选择运行环境管理、代码管理、创建新版本
创建完成后可以直接在线编辑代码并上传代码包
2.1.3 接入测试
创建新版本时,默认没有代码,所以直接访问的结果是404
此时可以通过在线编辑或上传代码包的方式添加代码。比如我在线编辑一个.html
保存后访问
由于目前还没有实名认证,浏览器有风险提示,但是我们的代码已经生效了。
新浪云用户中心可进行实名认证
2.1.4 使用git进行代码控制
新浪云创建新应用后,新浪云默认为我们创建了一个代码仓库,地址:,只需替换成你的二级域名微信公众平台开发 php,我们就可以克隆这个代码仓库了
示例:
git clone https://git.sinacloud.com/chzchat
cd chzchat
这样我们就可以在这个目录下进行开发了。开发完成后,使用git命令将代码推送到代码库。代码库与服务器相关联。这个操作相当于上传代码包,但是更方便。 git的使用请参考廖雪峰老师的教程
2.2 腾讯云15天免费云服务器2.2.1 获取免费服务器
接收地址需要先实名认证。我这里选择的操作系统是
激活后,您会在控制台的通知中收到一条消息,其中包含操作系统的初始密码,我们可以选择重置密码来设置新密码
2.2.2 登录服务器2.2.3 配置开发环境 3 将公众号与服务器关联3.1 微信入口文件
在开发目录新建微信入口file.php
define('TOKEN','chz');
$signature=$_GET['signature'];
$timestamp=$_GET['timestamp'];
$nonce=$_GET['nonce'];
$echostr=$_GET['echostr'];
$tmpArr=array(TOKEN,$timestamp,$nonce);
sort($tmpArr,SORT_STRING);
// 拼接字符串 sha1加密
$tmpStr=join($tmpArr);
$tmpStr=sha1($tmpStr);
if ($tmpStr==$signature) {
echo $echostr;
}else{
echo "error";
exit;
}
3.2 接口配置信息
上传代码到服务器,配置微信测试账号界面配置信息
网址填写:您服务器的公网IP(或域名)/微信入口文件名
填写微信入口文件中的定义。如果信息匹配且服务器已实名验证,提交后会提示配置成功。
4 微信开发小demo-微信消息访问和消息回复
修改微信入口文件的代码为
// 加密签名
$signature=$_GET['signature'];
// 时间戳
$timestamp=$_GET['timestamp'];
// 随机出
$nonce=$_GET['nonce'];
// 随机字符串
$echostr=$_GET['echostr'];
// TOKEN
define('TOKEN','chz');
// 字典序排序
$tmpArr=array(TOKEN,$timestamp,$nonce);
sort($tmpArr,SORT_STRING);
// 拼接字符串 sha1加密
$tmpStr=join($tmpArr);
$tmpStr=sha1($tmpStr);
// 加密签名的比较
if ($tmpStr==$signature) {
echo $echostr;
}else{
echo "error";
exit;
}
// 接受xml数据
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!$postStr) {
echo "post data error";
exit;
}
$postObj=simplexml_load_string($postStr,'SimpleXMLElement', LIBXML_NOCDATA );
$MsgType=$postObj->MsgType;
switch ($MsgType) {
case 'text':
$Content=$postObj->Content;
switch ($Content) {
case 'hello':
$xml='
%d
';
echo sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),'欢迎关注');
break;
default:
$xml='
%d
';
echo sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),$postObj->Content);
break;
}
break;
case 'image':
$xml='
%d
';
echo sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),$postObj->MediaId);
break;
default: