微信开发源码注释
2016-06-11 18:11
549 查看
本文用于解释微信开发中的中PHP代码意义,记录学习php基础知识。
1、PHP代码开始与结束标记
<?
// PHP code
>
2、PHP注释信息使用双斜线//
注释块使用/* ... ...*/
3、PHP语句结束,使用分号(;)
4、PHP常量定义 define
<?php define("CONSTANT", "Hello world."); echo CONSTANT; // outputs "Hello world." echo Constant; // outputs "Constant" and issues a notice. define("GREETING", "Hello you.", true); echo GREETING; // outputs "Hello you." echo Greeting; // outputs "Hello you." ?>
5、php中$符号是变量符号;把$符号加上字符串,这个字符串就是一个变量名或对象名。
可以使用两个以及多个$,比如:
可变变量 $first ="hello"; $hello ="world"; echo $first." ".$$first; 结果是 hello world $$first就是$hello,因为$first的值是hello
6、php中类相关定义以及实例化,class 声明累,new实例化
类中定义可以方法以及属性
属性值需要使用$标示以及权限修饰关键字 public private
类的继承使用extends
7、实例化一个对象后,使用 -> 操作符来访问对象的成员属性和方法。比如:
object->var_name; object->function_name;
8、在定义的类里面访问成员的属性或者方法,可以使用伪变量 $this 。$this 用于表示当前对象或对象本身 。
<?php class Person { // 人的成员属性 var $name; //人的名字 var $age; //人的年龄 //人的成员 say() 方法 function say() { echo "我的名字叫:".$this->name."<br />"; echo "我的年龄是:".$this->age; } } //类定义结束 $p1 = new Person(); //实例化一个对象 $p1->name = "Gonn"; //给 $p1 对象属性赋值 $p1->age = 25; $p1->say(); //调用对象中的 say()方法 ?>
9、PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。
$GLOBALS //在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。 $_SERVER //保存关于报头、路径和脚本位置的信息。 $_REQUEST //用于收集 HTML 表单提交的数据。 $_POST //广泛用于收集提交 method="post" 的 HTML 表单后的表单数据。$_POST 也常用于传递变量。 $_GET //用于收集提交 HTML 表单 (method="get") 之后的表单数据。也可以收集 URL 中的发送的数据。 $_FILES $_ENV $_COOKIE $_SESSION
PHP中全局变量
元素/代码 | 描述 |
---|---|
$_SERVER['PHP_SELF'] | 返回当前执行脚本的文件名。 |
$_SERVER['GATEWAY_INTERFACE'] | 返回服务器使用的 CGI 规范的版本。 |
$_SERVER['SERVER_ADDR'] | 返回当前运行脚本所在的服务器的 IP 地址。 |
$_SERVER['SERVER_NAME'] | 返回当前运行脚本所在的服务器的主机名(比如 www.w3school.com.cn)。 |
$_SERVER['SERVER_SOFTWARE'] | 返回服务器标识字符串(比如 Apache/2.2.24)。 |
$_SERVER['SERVER_PROTOCOL'] | 返回请求页面时通信协议的名称和版本(例如,“HTTP/1.0”)。 |
$_SERVER['REQUEST_METHOD'] | 返回访问页面使用的请求方法(例如 POST)。 |
$_SERVER['REQUEST_TIME'] | 返回请求开始时的时间戳(例如 1577687494)。 |
$_SERVER['QUERY_STRING'] | 返回查询字符串,如果是通过查询字符串访问此页面。 |
$_SERVER['HTTP_ACCEPT'] | 返回来自当前请求的请求头。 |
$_SERVER['HTTP_ACCEPT_CHARSET'] | 返回来自当前请求的 Accept_Charset 头( 例如 utf-8,ISO-8859-1) |
$_SERVER['HTTP_HOST'] | 返回来自当前请求的 Host 头。 |
$_SERVER['HTTP_REFERER'] | 返回当前页面的完整 URL(不可靠,因为不是所有用户代理都支持)。 |
$_SERVER['HTTPS'] | 是否通过安全 HTTP 协议查询脚本。 |
$_SERVER['REMOTE_ADDR'] | 返回浏览当前页面的用户的 IP 地址。 |
$_SERVER['REMOTE_HOST'] | 返回浏览当前页面的用户的主机名。 |
$_SERVER['REMOTE_PORT'] | 返回用户机器上连接到 Web 服务器所使用的端口号。 |
$_SERVER['SCRIPT_FILENAME'] | 返回当前执行脚本的绝对路径。 |
$_SERVER['SERVER_ADMIN'] | 该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。 |
$_SERVER['SERVER_PORT'] | Web 服务器使用的端口。默认值为 “80”。 |
$_SERVER['SERVER_SIGNATURE'] | 返回服务器版本和虚拟主机名。 |
$_SERVER['PATH_TRANSLATED'] | 当前脚本所在文件系统(非文档根目录)的基本路径。 |
$_SERVER['SCRIPT_NAME'] | 返回当前脚本的路径。 |
$_SERVER['SCRIPT_URI'] | 返回当前页面的 URI。 |
假设我们有一张页面含有带参数的超链接:
<html> <body> <a href="test_get.php?subject=PHP&web=W3school.com.cn">测试 $GET</a> </body> </html>
当用户点击链接 "Test $GET",参数 "subject" 和 "web" 被发送到 "test_get.php",然后您就能够通过 $_GET 在 "test_get.php" 中访问这些值了。
下面的例子是 "test_get.php" 中的代码:
实例
<html> <body> <?php echo "Study " . $_GET['subject'] . " at " . $_GET['web']; ?> </body> </html>
10、PHP中用于输出信息,使用关键字echo
11、function用于定义类中的方法;
12、关键词解释:
isset(var) ---检测变量是否设置,如果
var存在并且值不是
NULL则返回
TRUE,否则返回
FALSE。
empty(var) — 检查一个变量是否为空,当
var存在,并且是一个非空非零的值时返回
FALSE否则返回
TRUE.
echo — 输出一个或多个字符串
exit — 输出一个消息并且退出当前脚本
-> 是对象成员访问符号
=> 是数组成员访问符
微信开发第一课实例代码如下:
<?php /* WeiXin 学习代码实例 */ define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); if (isset($_GET['echostr'])) { $wechatObj->valid(); }else{ $wechatObj->responseMsg(); } class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; if($this->checkSignature()){ echo $echoStr; exit; } } private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml>"; if($keyword == "?" || $keyword == "?") { $msgType = "text"; $contentStr = date("Y-m-d H:i:s",time()); $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; } }else{ echo ""; exit; } } } ?>
微信在接受信息后,通过$_GET方法请求是否设置了echostr
微信加密签名:signature--结合token参数以及timestamp、nonce参数等
timestamp--时间戳
nonce--随机数
echostr-- 随机字符串
微信信息构造XML类型如下:
字符串类型
<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>
相关文章推荐
- 【转】微信订阅号的运营
- 我的第一篇博客 ——【ToDoList】小程序开发
- WordPress按钮秒支付插件发布,支持微信支付,支付宝,银联,京东,苏宁,易宝支付
- 模仿微信通讯录侧边栏快速索引
- 微信开发之自定义菜单--weixin-java-tools
- 微信接口开发之前准备工作
- 从小程序中看make和Makefile的简单使用
- Android调用微信扫一扫
- 电商与微信SSO解决方案
- 代码GG 公众号
- 如何查看小视频参数【微信高级教程7】
- 基于netty的客户端和服务器收发消息的小程序
- WordPress WooCommerce微信支付插件免费版下载
- iOS微信支付
- java 计算器小程序
- pc微信客户端玩具分享
- 微信接入机器人实现对别人消息和群at消息的自动回复
- 微信 "{"errcode":-1,"errmsg":"system error"}"
- 微信支付
- 微信公众号获取的图片不能正常显示的问题