博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信开发
阅读量:6801 次
发布时间:2019-06-26

本文共 12719 字,大约阅读时间需要 42 分钟。

 

准备工具:

微信web开发工具

微信术语解释:

access_token   就是一个签名,用来验证图片或者文件是否是从自己的公众账户发出去的

 

微信出现的奇葩问题:

1,将配置信息填好后,微信不出现任何的问题     解决:服务器配置选项没有打开

2, 大小写,图片要注意是否是多图文还是单图文,单图文,数量要写成1

 

 

 

最近在学习微信开发,遇到的问题记录在这里

1,微信js sdk invalid signature签名错误 问题解决。

 https://my.oschina.net/u/2308739/blog/371414/

2,使用的是新浪云,豆豆的那种,如果没有经过个人信息检验,是无法通过token验证的

 

3,使用到的函数

simplexml_load_string();

xml; $obj = simplexml_load_string($xml->ToUserName); ?>

3,接口介绍

1,json格式{"id":"1","username":"\u76ca\"}2,xml格式
$xml = <<
xml;

 

4,将array转化为json数据

'1','userName'=>'yida'); $arr = json_encode($array); //将数组转化为json数据    $obj = json_decode($arr); //将json转化为对象 $obj->属性 var_dump($arr);?>

 

5,微信验证匹配  -- 微信端 和  服务器端进行验证

1,将微信端填入 url 和 token 信息

2,当写好后会将token信息发送到url地址上面去

3,在服务器端写入token 信息,匹配成功可以进行操作

4,微信一般验证一次,就不需要再次验证了

receive();}else{ $obj->checkSignature();}class Weixin{ public function checkSignature() { //向服务器校验token } public function receive(){ }}?>

  

 

 1,自动回复

receive(); }else{ $obj->checkSignature(); } class Weixin{ public function checkSignature() { $signature = $_GET["signature"]; //加密签名 $timestamp = $_GET["timestamp"]; //时间戳 $nonce = $_GET["nonce"]; //随机数 $token = TOKEN; //token $tmpArr = array($token, $timestamp, $nonce);//组成新数组 sort($tmpArr, SORT_STRING);//重新排序 $tmpStr = implode( $tmpArr );//转换成字符串 $tmpStr = sha1( $tmpStr ); //再将字符串进行加密 if( $tmpStr == $signature ){ echo $_GET['echostr']; }else{ return false; } } public function receive(){ $obj=$GLOBALS['HTTP_RAW_POST_DATA']; $postSql=simplexml_load_string($obj,'SimpleXMLElement',LIBXML_NOCDATA); $this->logger("接受:\n".$obj); if(!empty($postSql)){ switch(trim($postSql->MsgType)){ case "text" : $result=$this->receiveText($postSql); if(!empty($result)){ echo $result; }else{ $xml="
%s
"; echo $result=sprintf($xml,$postSql->FromUserName,$postSql->ToUserName,time(),$postSql->MsgType,"没有这条文本消息"); } } } } private function receiveText($postSql){ $content=trim($postSql->Content); if(strstr($content,"你好")){ $xml="
%s
"; $result=sprintf($xml,$postSql->FromUserName,$postSql->ToUserName,time(),$postSql->MsgType,"hello"); return $result; } } private function logger($content){ $logSize=100000; $log="log.txt"; if(file_exists($log) && filesize($log) > $logSize){ unlink($log); } file_put_contents($log,date('H:i:s')." ".$content."\n",FILE_APPEND); }} ?>

 5,多图文

receive(); }else{ $obj->checkSignature(); } class Weixin{ public function checkSignature() { $signature = $_GET["signature"]; //加密签名 $timestamp = $_GET["timestamp"]; //时间戳 $nonce = $_GET["nonce"]; //随机数 $token = TOKEN; //token $tmpArr = array($token, $timestamp, $nonce);//组成新数组 sort($tmpArr, SORT_STRING);//重新排序 $tmpStr = implode( $tmpArr );//转换成字符串 $tmpStr = sha1( $tmpStr ); //再将字符串进行加密 if( $tmpStr == $signature ){ echo $_GET['echostr']; }else{ return false; } } public function receive(){ $obj=$GLOBALS['HTTP_RAW_POST_DATA']; $postSql=simplexml_load_string($obj,'SimpleXMLElement',LIBXML_NOCDATA); $this->logger("接受:\n".$obj); if(!empty($postSql)){ switch(trim($postSql->MsgType)){ case "text" : $result=$this->receiveText($postSql); if(!empty($result)){ echo $result; }else{ $xml="
%s
"; echo $result=sprintf($xml,$postSql->FromUserName,$postSql->ToUserName,time(),$postSql->MsgType,"没有这条文本消息"); } } } } private function receiveText($postSql){ $content=trim($postSql->Content); if(strstr($content,"你好")){ $xml="
%s
"; $result=sprintf($xml,$postSql->FromUserName,$postSql->ToUserName,time(),$postSql->MsgType,"hello"); }else if(strstr($content,"单图文")){ $result=$this->receiveImage($postSql); }else if(strstr($content,"多图文")){ $result=$this->receiveImages($postSql); } $this->logger("发送图文消息:\n".$result); return $result; } private function receiveImage($postSql){ $xml="
%s
1
<![CDATA[%s]]>
"; $result=sprintf($xml,$postSql->FromUserName,$postSql->ToUserName,time(),"news","跟益达学微信开发,教益达泡妹子","它就是 中国海南海花岛——缤纷水上乐园 23项游乐 打造雪山滑道区、激流河道区 巨浪演绎区、阖家欢乐区 极限滑道区五大主题游乐区","http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg","http://www.maiziedu.com/"); return $result; } private function receiveImages($postSql){ $content=array(); $content[]=array("Title"=>"跟益达学微信开发,教益达泡妹子","Description"=>"它就是 中国海南海花岛——缤纷水上乐园 23项游乐 打造雪山滑道区、激流河道区 巨浪演绎区、阖家欢乐区 极限滑道区五大主题游乐区","PicUrl"=>"http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg","http://www.maiziedu.com/"); $content[]=array("Title"=>"跟益达学微信开发,教益达泡妹子","Description"=>"它就是 中国海南海花岛——缤纷水上乐园 23项游乐 打造雪山滑道区、激流河道区 巨浪演绎区、阖家欢乐区 极限滑道区五大主题游乐区","PicUrl"=>"http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg","http://www.maiziedu.com/"); $content[]=array("Title"=>"跟益达学微信开发,教益达泡妹子","Description"=>"它就是 中国海南海花岛——缤纷水上乐园 23项游乐 打造雪山滑道区、激流河道区 巨浪演绎区、阖家欢乐区 极限滑道区五大主题游乐区","PicUrl"=>"http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg","http://www.maiziedu.com/"); $content[]=array("Title"=>"跟益达学微信开发,教益达泡妹子","Description"=>"它就是 中国海南海花岛——缤纷水上乐园 23项游乐 打造雪山滑道区、激流河道区 巨浪演绎区、阖家欢乐区 极限滑道区五大主题游乐区","PicUrl"=>"http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg","http://www.maiziedu.com/"); $content[]=array("Title"=>"跟益达学微信开发,教益达泡妹子","Description"=>"它就是 中国海南海花岛——缤纷水上乐园 23项游乐 打造雪山滑道区、激流河道区 巨浪演绎区、阖家欢乐区 极限滑道区五大主题游乐区","PicUrl"=>"http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg","http://www.maiziedu.com/"); $content[]=array("Title"=>"跟益达学微信开发,教益达泡妹子","Description"=>"它就是 中国海南海花岛——缤纷水上乐园 23项游乐 打造雪山滑道区、激流河道区 巨浪演绎区、阖家欢乐区 极限滑道区五大主题游乐区","PicUrl"=>"http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg","http://www.maiziedu.com/"); $content[]=array("Title"=>"跟益达学微信开发,教益达泡妹子","Description"=>"它就是 中国海南海花岛——缤纷水上乐园 23项游乐 打造雪山滑道区、激流河道区 巨浪演绎区、阖家欢乐区 极限滑道区五大主题游乐区","PicUrl"=>"http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg","http://www.maiziedu.com/"); $content[]=array("Title"=>"跟益达学微信开发,教益达泡妹子","Description"=>"它就是 中国海南海花岛——缤纷水上乐园 23项游乐 打造雪山滑道区、激流河道区 巨浪演绎区、阖家欢乐区 极限滑道区五大主题游乐区","PicUrl"=>"http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg","http://www.maiziedu.com/"); $content[]=array("Title"=>"跟益达学微信开发,教益达泡妹子","Description"=>"它就是 中国海南海花岛——缤纷水上乐园 23项游乐 打造雪山滑道区、激流河道区 巨浪演绎区、阖家欢乐区 极限滑道区五大主题游乐区","PicUrl"=>"http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg","http://www.maiziedu.com/"); $str="
<![CDATA[%s]]>
"; $news=""; foreach ($content as $newArray) { $news.=sprintf($str,$newArray['Title'],$newArray['Description'],$newArray['PicUrl'],$newArray['Url']); } $xml="
%s
%s
$news
"; $result=sprintf($xml,$postSql->FromUserName,$postSql->ToUserName,time(),"news",count($content)); return $result; } private function logger($content){ $logSize=100000; $log="log.txt"; if(file_exists($log) && filesize($log) > $logSize){ unlink($log); } file_put_contents($log,date('H:i:s')." ".$content."\n",FILE_APPEND); }} ?>

 

 

 

 

 

 

 

10,使用到的函数总结

1)$GLOBALS['HTTP_RAW_POST_DATA']  服务器接收来自微信发送的XML文件

This is useful in cases where the post Content-Type is not something PHP understands (such as text/xml).
也就是说,基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一样的。但是如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']来接收,比如 text/xml 或者 soap 等等。
PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型
用Content-Type=text/xml 类型,提交一个xml文档内容给了php server,要怎么获得这个POST数据。
The RAW / uninterpreted HTTP POST information can be accessed with: $GLOBALS['HTTP_RAW_POST_DATA'] This is useful in cases where the post Content-Type is not something PHP understands (such as text/xml).
由于PHP默认只识别application/x-www.form-urlencoded标准的数据类型,因此,对型如text/xml的内容无法解析为$_POST数组,故保留原型,交给$GLOBALS['HTTP_RAW_POST_DATA'] 来接收。
另外还有一项 php://input 也可以实现此这个功能
php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。php://input 不能用于 enctype="multipart/form-data"。

 

 

 

11,微信发送媒体文件注意项:

微信公众账号在回复图片、语音、视频的时候,将使用media_id来调用相关文件。

一、上传多媒体文件

公众号可调用本接口来上传图片、语音、视频等文件到微信服务器,上传后服务器会返回对应的media_id,公众号此后可根据该media_id来获取多媒体。请注意,media_id是可复用的,调用该接口需http协议。

通常,文件上传是通过html表单进行的,但通过CURL可以不经过浏览器,直接在服务器端进行表单的POST提交,完成文件上传功能。

需要注意的是:文件名必须是完整绝对路径,另外需要绝对路径前加上“@”以示区分。

在Windows服务器上,格式示例为:”@F:\israel\upload\winter.jpg”,而在Linux服务器上,格式示例为:”@home/israel/upload/winter.jpg”。

http请求方式: POST/FORM

http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE

参数说明

 

返回结果

{

"type": "thumb",
"thumb_media_id": "2RhP0caRKHVOmZO5AKelHkK--vqPPwgUaRp5-WE63dvmmPRWiYVKgvNblIp_gv79",
"created_at": 1389794771
}

 案例分析:

access_token; } $token=get_token(); $type="image"; $path=dirname(__FILE__)."/xiaotu.jpg"; $data=array("media"=>"@".$path); $url="http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token={$token}&type={$type}"; $arr=http_curl($url,$data); var_dump($arr); ?>

  

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/xiaoxiaomengxiangjia/p/5324341.html

你可能感兴趣的文章
Spring下载地址
查看>>
SQL性能优化总结
查看>>
WinHex数据恢复笔记(二)
查看>>
c#设计模式系列:观察者模式(Observer Pattern)
查看>>
NO23 Linux正则表达式结合三剑客企业级实践--取IP
查看>>
Max user processes limits
查看>>
Memcached 总结
查看>>
python 帮助和导入路径
查看>>
java连接oracle数据库(利用MyEclipse开发工具反向生成 bean与配置文件)
查看>>
Hue整合Sqoop报空指针异常的解决方法
查看>>
ObjectARX2012学习笔记之Autodesk.AutoCAD.AcInfoCenterConn Namespace
查看>>
mysql开发规范(优化)
查看>>
HEVC与VP9之间的对比
查看>>
linux-秘钥生成
查看>>
[解题报告]10110 - Light, more light
查看>>
Mac 共享 wifi
查看>>
CentOS7 下安装telnet服务
查看>>
APP 上线-打包上传环境配置(接上篇)
查看>>
图片垂直居中,兼容ie6
查看>>
iOS--资料--开源项目及库
查看>>