您的位置:首页 > 移动开发 > 微信开发

微信开发源码注释

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。
$_GET传递参数实例

假设我们有一张页面含有带参数的超链接:

<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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: