微信实验三、微信公众号开发者PHP入门

《软件工程》实训指导书

微信实验三、微信公众号开发者PHP入门

开源项目:https://github.com/chenxhjeo,个人博客:http://blog.csdn.net/u013487761

技术QQ群名称:豆豆咨询,群号:625686304

微信公众号名称:豆豆咨询,微信公众号:douAsk

初建日期:2017.03.29修改日期:2017.03.29

一、实验目的

1、掌握微信公众号后台开发PHP接收数据、发送数据。

二、实验内容

1、成为微信开发者;

2、在家、寝室、实验室等环境,配置开发环境;

3、在微信PHP后台验证。

4、PHP接收用户输入以及回送消息。

三、实验步骤及过程

由于手机端特性(例如内存小)与微信广泛应用,微信开发与应用成为当前的开发热点。但微信公众号存在一些局限,例如难以通过查询功能得到想要的结果。以下我们将引导大家如何成为微信公众号的开发者。

1、如何成为微信开发者,即取得开发者密钥。

1)在微信后台(通过https://mp.weixin.qq.com登录)点击开发->基本配置,打开基本配置页面,如下所示。

微信实验三、微信公众号开发者PHP入门_第1张图片

2)生成AppSecret(应用密钥):需要完成三个步骤,如图所示:

微信实验三、微信公众号开发者PHP入门_第2张图片

a)身份确认:二维码扫描,授权设置开发者密钥。

b)密码验证:输入登录密码和验证码,如下图所示。

微信实验三、微信公众号开发者PHP入门_第3张图片

c)查看AppSecret(微信为AppSecert,哈哈,是不是英语写错了?):注意保存好你的AppID和AppSecret,如下图所示。

微信实验三、微信公众号开发者PHP入门_第4张图片

2、在家、寝室、实验室、公网等环境,配置开发环境。

如果您在家、寝室、实验室等环境,想配置开发环境,那么请关注“豆豆咨询”公众号,我们将传递给您具体的手册及工具。

1)这里假设您具有公网地址或者域名,则配置URL(服务器地址)、Token(令牌)、EncodingAESKey(消息加密密钥)、消息加密方式,如下图所示。

微信实验三、微信公众号开发者PHP入门_第5张图片

2)填写URL(服务器地址)、Token(令牌)、EncodingAESKey(消息加密密钥)、消息加密方式信息。分别解释如下:

a)URL是你服务器的地址,具有验证、接收消息、发送消息等功能的服务器,分别支持80端口和443端口。

b)Token是自己设定的令牌,必须为英文或者数字,长度为3-32字符。

c)EncodingAESKey为消息加密密钥,随机产生,由43位字符组成,字符范围为A-Z,a-z,0-9。

d)消息加密方式:根据业务需要,可以设定明文模式、兼容模式、安全模式,系统推荐安全模式。我们以明文模式简化开发流程,如下图所示。

微信实验三、微信公众号开发者PHP入门_第6张图片

注意:微信开放平台账号的绑定在内测中。

3、在微信PHP后台验证。主要涉及到验证消息,确认微信服务器能够确认您所建立服务器的具有相关权限,具体PHP代码如下:

//define yourtoken

define("TOKEN","weixin");

echo"I'am already Waiting for something...S.";

$wechatObj =new wechatCallbackapiTest();

$wechatObj->valid();//验证消息

class wechatCallbackapiTest

{

public function valid()

{

$echoStr = $_GET["echostr"];

//valid signature , option

if($this->checkSignature()){

echo$echoStr;

exit;

}

}

private function checkSignature()

{

// you must define TOKEN by yourself

if (!defined("TOKEN")) {

throw new Exception('TOKEN is notdefined!');

}

$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;

}

}

}

?>

4、在微信PHP后台接收用户输入的消息和回送给用户的消息。微信要求必须在5秒之内得到回复,如果没有得到回复,则尝试三次。PHP接收消息和发送消息代码描述如下:

define("TOKEN","weixin");

echo"I'am already Waiting for something...S.";

$wechatObj =new wechatCallbackapiTest();

$wechatObj->responseMsg ();//发送消息

private function is_utf8($str)//判断是否是utf8编码

{

returnpreg_match('//u', $str);

}

public function responseMsg()

{

//get post data, May be due tothe different environments

$postStr =$GLOBALS["HTTP_RAW_POST_DATA"];

//extractpost data

if (!empty($postStr)){

libxml_disable_entity_loader(true);

$postObj= simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

$fromUsername =$postObj->FromUserName;

$toUsername =$postObj->ToUserName;

$keyword =trim($postObj->Content);

$time = time();

$textTpl = "

%s

0

";

if(!empty($keyword ))

{

$msgType= "text";

$contentStr = "Welcome to wechat world!我是谁?";

$resultStr = sprintf($textTpl, $fromUsername, $toUsername,$time, $msgType, $contentStr);

$content = trim($postObj->Content);//消息内容json_encode($postObj->Content);

$contentStr = '你发送的信息是:接收人:'.$toUsername.',发送人:'.$fromUsername.',消息类型:'.$MsgType.',消息内容:'.$content.' ';

$resultStr = sprintf($textTpl, $fromUsername, $toUsername,$time, $msgType, $contentStr);

if ($this->is_utf8($resultStr)) {

//$resultStr = $resultStr;

} else {

//$resultStr = iconv('gb2312', 'UTF-8//IGNORE',$resultStr);

}

echo $resultStr;

}else{

echo "Input something...";

}

}else {

echo"";

exit;

}

}

四、常见错误

1、验证不通过:在windows开发,主要由于编码的差异导致验证不通过,如果你遇到了类似问题还无法解决,请成为关注“豆豆咨询”公众号,我们将为您解答问题。

2、接收和发送中文信息,有时候会出现乱码,原因也是同上所示。解决方法是采用utf-8编码。如果你遇到了类似问题还无法解决,请成为关注“豆豆咨询”公众号,我们将为您解答问题。

五、技术服务

1、如果有疑问或者需要帮助,请加入QQ群(群名称:豆豆咨询,群号:625686304);或者公众号douAsk,公众号名称为“豆豆咨询”。扫描以下二维码,关注“豆豆咨询”

微信实验三、微信公众号开发者PHP入门_第7张图片

2、本文的程序链接地址为 https://github.com/CompSchool/ThinkPHP/blob/master/application/weixin/check.php。

你可能感兴趣的:(微信实验三、微信公众号开发者PHP入门)