Sae与微信订阅号的php开发Word格式文档下载.docx
- 文档编号:22232504
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:19
- 大小:346.96KB
Sae与微信订阅号的php开发Word格式文档下载.docx
《Sae与微信订阅号的php开发Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Sae与微信订阅号的php开发Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
可以知道首次提交验证请求时,GET请求中包含参数echostr,而其后接收用户消息时,没有这个参数。
于是可以根据有没有echostr来判断是否是微信的首次接入请求。
如果是首次接入,则需要对TOKEN、timestamp、nonce三个参数进行处理,并将其处理结果与signature参数进行比较,如果比较结果为相同,则原样返回echostr参数,表示接入成功,否则接入失败。
如果不是首次接入(没有echostr参数),那么同样需要验证TOKEN、timestamp、nonce与signatuer(本文示例代码中略去了这个验证)。
不是首次接入,那么微信是将POST的数据放在xml中,xml中的数据包括消息类型(文本消息、图片消息、语言消息、视频消息、小视频消息、地理位置消息、链接消息)、消息内容等。
根据不同的消息内容程序可以做出不同的响应逻辑,回复不同的消息给用户。
1)本文中实现了网址接入。
2)本文示例代码中实现了各个消息类型的接收,但只实现了回复消息中的回复文本消息。
3)本文中实现了如果不是首次接入但没有接收到微信发送的消息的时候,其接下来的处理。
此时,将利用Storage中存储的图片,提醒用户关注微信订阅号。
4)本文实现了将用户发送的消息、订阅号回复的消息保存到Mysql数据库中的功能。
(★★需要注意的是,在sae中实现网址接入,sae账号必须要经过实名验证。
★★)
只需要经过实名验证,不需要经过开发者验证即可。
是否通过实名验证可以在资料中看得出来。
1)首次验证的实现方法:
//验证签名
publicfunctionvalid(){
//验证通过时原样返回的string:
echostr
$echoStr=$_GET["
echostr"
];
//待验证比较的字符串
$signature=$_GET["
signature"
//timestamp、nonce、TOKEN待组合、处理的三个字符串
$timestamp=$_GET["
timestamp"
$nonce=$_GET["
nonce"
$token=TOKEN;
//①现将三个字符串排序
$tmpArr=array($token,$timestamp,$nonce);
sort($tmpArr);
//②再将其连接成一个字符串
$tmpStr=implode($tmpArr);
//③进行sha1加密
$tmpStr=sha1($tmpStr);
//④与signature进行比较验证,若相同,则原样返回echostr
if($tmpStr==$signature){
echo$echoStr;
exit;
}
2)接收消息与回复消息请参见全部代码。
3)Storage的使用
//显示添加关注的图片
privatefunctionshowSubscribeImage(){
$accessKey=ACCESSKEY;
$secretKey=SECRETKEY;
$sae_storage=newSaeStorage($accessKey,$secretKey);
//domain名称
$domainName="
hellolamp"
;
//domain下文件夹路径
$directoryName="
BackImage"
//取得该文件夹下的所有文件信息
$lstFiles=$sae_storage->
getListByPath($domainName,$directoryName);
//取得所有文件
$files=$lstFiles['
files'
foreach($filesas$imageFile){
//匹配到文件
if($imageFile['
Name'
]=='
abc_qiu.jpg'
){
$tempName=$directoryName."
/"
.$imageFile['
//图片链接地址
$imageUrl=$sae_storage->
getUrl($domainName,$tempName);
}
}
if(isset($imageUrl)){
echo"
<
divalign='
center'
>
<
imgsrc='
{$imageUrl}'
alt='
欢迎扫码关注爱编程!
'
/div>
"
echo"
欢迎关注我的微信订阅号:
爱编程(abc_qiu)<
Source中一些参数,如domain名称(hellolamp),文件夹路径(BackImage),匹配到的文件名(abc_qiu.jpg)需要替换成实际开发时的参数。
效果如下:
网页中的图片需事先保存到Storage中。
图片来源是从微信公众账号平台中取得的。
在Storage保存图片的方法:
①开启Sotrage服务
②创建domain
③domain管理中的创建文件夹
④将文件上传到文件夹
以上步骤就可以保存将文件保存在storage中了。
然后就可以在代码中使用了(使用方法如前面的代码)。
4)Mysql数据库的使用
//日志记录(到mysql数据库中的Log表)
privatefunctionlogger($log_type,$log_content){
$mysql=newSaeMysql();
//获取IP地址
$ip=$_SERVER['
REMOTE_ADDR'
$sql="
insertintoLog(type,content,time,ip)values('
{$log_type}'
'
{$log_content}'
now(),'
{$ip}'
)"
$mysql->
runSql($sql);
//sql执行失败
if($mysql->
errno()!
=0){
//sae的日志中心进行记录
if(isset($_SERVER['
HTTP_APPNAME'
])){
sae_set_display_errors(false);
sae_debug("
mysqllogerror"
.$log_content);
sae_debug("
errormessage"
.$mysql->
errmsg());
sae_set_display_errors(true);
//关闭数据库连接
closeDb();
首先必须开启mysql服务,并在mysql中创建表。
①开启mysql服务
②管理mysql
③在mysql中创建Table
④我这边的Log表已经创建成功了,所以就看看创建的表结构类型吧
⑤保存的数据截图
表创建成功后,就可以在php中使用了。
使用的示例代码前面已经贴出来了。
全部代码(注释也很详细)如下所示。
将一下代码直接覆盖到你的sae代码,并配置好代码中的一些常量、变量,你就可以在微信中看到效果啦!
?
php
//定义TOKEN常量(常量使用时,需修改为自己的常量,不能照抄)
define("
TOKEN"
"
weixin11111"
);
//
ACCESSKEY"
yz2lk4m31111111wy"
SECRETKEY"
2ix5wyw4im5h05hzm3213x111111ymzljw4w2khh3mwxwk"
$chatObj=newchatCls();
//若GET参数不存在echostr,则为用户发送消息,微信需根据实际情况返回消息给用户
if(!
isset($_GET['
echostr'
])){
//响应用户发送的消息
$chatObj->
responseMsg();
}else{
//验证网址接入
valid();
//消息的处理
classchatCls
{
//响应消息
publicfunctionresponseMsg(){
$postStr=$GLOBALS["
HTTP_RAW_POST_DATA"
empty($postStr)){
//记录接收到的消息内容
$this->
logger("
接收消息"
$postStr);
//接收到的消息内容进行xml转化
$postObj=simplexml_load_string($postStr,'
SimpleXMLElement'
LIBXML_NOCDATA);
//取得消息类型
$RX_TYPE=trim($postObj->
MsgType);
//消息类型分离
switch($RX_TYPE)
{
//事件消息
case"
event"
:
$result=$this->
receiveEvent($postObj);
break;
//①文本消息
text"
receiveText($postObj);
//②图片消息
image"
receiveImage($postObj);
//③语音消息
voice"
receiveVoice($postObj);
//④视频消息
video"
receiveVideo($postObj);
//⑤小视频消息
case"
shortvideo"
$result=$this->
receiveShortVideo($postObj);
break;
//⑥地理位置消息
location"
receiveLocation($postObj);
//⑦链接消息
link"
receiveLink($postObj);
//其他未知消息
default:
$this->
其他"
未知消息类型:
"
.$RX_TYPE);
//记录发送的Log内容
回复消息"
$result);
echo$result;
}else{
//不含有微信发送来的消息,说明是从别的方式直接访问了网址,所以显示“广告”
$this->
showSubscribeImage();
//记录Log
用户直接访问app地址"
//接收事件消息
privatefunctionreceiveEvent($object){
$content=date("
Y-m-dH:
i:
s"
time())."
\n事件消息"
$result=$this->
transmitText($object,$content);
return$result;
//①接收文本消息
privatefunctionreceiveText($object){
$content=date("
\n文本消息tpj"
//②接收图片消息
privatefunctionreceiveImage($object){
\n图片消息"
//③接收语音消息
privatefunctionreceiveVoice($object){
\n语音消息"
//④接收视频消息
privatefunctionreceiveVideo($object){
\n视频消息"
//⑤接收小视频消息
privatefunctionreceiveShowVideo($object){
\n小视频消息"
//⑥接收位置消息
privatefunctionreceiveLocation($object){
\n位置消息"
//⑦接收链接消息
privatefunctionreceiveLink($object){
\n链接消息"
//回复文本消息
privatefunctiontransmitText($object,$content){
$xmlTpl="
xml>
<
ToUserName>
!
[CDATA[%s]]>
/ToUserName>
FromUserName>
/FromUserName>
CreateTime>
%s<
/CreateTime>
MsgType>
[CDATA[text]]>
/MsgType>
Content>
/Content>
<
/xml>
$result=sprintf($xmlTpl,$object->
FromUserName,$object->
ToUserName,time(),$content);
$mysql-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Sae 订阅 php 开发