PHP技术开发微信公众平台

5年以前  |  阅读数:691 次  |  编程语言:PHP 

下面通过图文并茂的方式介绍微信公众平台开发过程,具体内容如下:

微信公众平台有两种模式:编辑模式 和 开发模式。

普通的功能可以通过编辑模式来搞定。开发模式具有更多的功能。让我们来使用开发模式开发helloword吧

步骤如下:

第一步:先注册一个公众号(https://mp.weixin.qq.com

第二步:注册sae(http://sae.sina.com.cn/),作为你的服务器。

第三步:登录微信公众平台(https://mp.weixin.qq.com)查看开发文档并下载官方提供的demo。做适当修改。

第四步:将代码压缩成zip格式,上传到sae平台。

第五步:登录微信公众平台,进入开发者中心。开启"服务者配置"。

第六步:成功了。

开始吧:

1.先注册一个公众号(https://mp.weixin.qq.com

2.注册sae(http://sae.sina.com.cn/

注册完以后要记得进行实名认证,不然绑定到公众平台的时候,会有永远的"无法获取token"的提示。(实名认证需要3个工作日才能成功)

然后可以点击创建应用。创建后可以在下面看到。

进入自己创建的应用。然后点击代码管理。

3.登录微信公众平台(https://mp.weixin.qq.com

查看开发文档并下载官方提供的demo。

打开后是如下的代码:


    <?php
    /**
     * wechat php test
     */
    //define your token
    define("TOKEN", "weixin");
    $wechatObj = new wechatCallbackapiTest();
    $wechatObj->valid();
    class wechatCallbackapiTest
    {
     public function valid()
     {
     $echoStr = $_GET["echostr"];
     //valid signature , option
     if($this->checkSignature()){
      echo $echoStr;
      exit;
     }
     }
     public function responseMsg()
     {
     //get post data, May be due to the different environments
     $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
      //extract post data
     if (!empty($postStr)){
      /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
       the best way is to check the validity of xml by yourself */
      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 = "<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(!empty( $keyword ))
      {
       $msgType = "text";
       $contentStr = "Welcome to wechat world!";
       $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
       echo $resultStr;
      }else{
       echo "Input something...";
      }
     }else {
      echo "";
      exit;
     }
     }
     private function checkSignature()
     {
     // you must define TOKEN by yourself
     if (!defined("TOKEN")) {
      throw new Exception('TOKEN is not defined!');
     }
     $signature = $_GET["signature"];
     $timestamp = $_GET["timestamp"];
     $nonce = $_GET["nonce"];
     $token = TOKEN;
     $tmpArr = array($token, $timestamp, $nonce);
     // use SORT_STRING rule
     sort($tmpArr, SORT_STRING);
     $tmpStr = implode( $tmpArr );
     $tmpStr = sha1( $tmpStr );
     if( $tmpStr == $signature ){
      return true;
     }else{
      return false;
     }
     }
    }
    ?>

我试过,如上代码,似乎无法执行到response那一块。所以做了更改


    <?php
    /**
     * wechat php test
     */
    //define your token
    define("TOKEN", "weixin");
    $wechatObj = new wechatCallbackapiTest();
    //这里做了更改
    if($_GET["echostr"]){
     $wechatObj->valid();
    }else{
     $wechatObj->responseMsg();
    }
    class wechatCallbackapiTest
    {
     public function valid()
     {
     $echoStr = $_GET["echostr"];
     //valid signature , option
     if($this->checkSignature()){
      echo $echoStr;
      exit;
     }
     }
     public function responseMsg()
     {
     //get post data, May be due to the different environments
     $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
      //extract post data
     if (!empty($postStr)){
      /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
       the best way is to check the validity of xml by yourself */
      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 = "<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(!empty( $keyword ))
      {
       $msgType = "text";
       $contentStr = "Welcome to wechat world!";
       $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
       echo $resultStr;
      }else{
       echo "Input something...";
      }
     }else {
      echo "";
      exit;
     }
     }
     private function checkSignature()
     {
     // you must define TOKEN by yourself
     if (!defined("TOKEN")) {
      throw new Exception('TOKEN is not defined!');
     }
     $signature = $_GET["signature"];
     $timestamp = $_GET["timestamp"];
     $nonce = $_GET["nonce"];
     $token = TOKEN;
     $tmpArr = array($token, $timestamp, $nonce);
     // use SORT_STRING rule
     sort($tmpArr, SORT_STRING);
     $tmpStr = implode( $tmpArr );
     $tmpStr = sha1( $tmpStr );
     if( $tmpStr == $signature ){
      return true;
     }else{
      return false;
     }
     }
    }
    ?>

你可以将Welcome to wechat world!更改为Hello Word!

4.将代码压缩成zip格式,上传到sae平台。

点击"编辑代码",可以看到你上传的php文件。然后右击,url查看。复制url(http://1.carlzhang.sinaapp.com/wx_carlzhang819.php)。在这里要记住在此php文件中定义的token。此处为"weixin",可以在如下图中看到。

5.登录微信公众平台,进入开发者中心。开启"服务者配置"。url填写上一步复制的url(这里我删除了前面的1.因为我的sae默认第一版。你可以试试,删除1,若是url访问,不报404,那就是没问题)。token填写的是代码中的token(上面是"weixin")。

如果启用成功,就可以关注你的微信平台,输入内容,看看提示是不是Welcome to wechat world!或者Hello Word!

以上全部内容就是针对微信公众平台做的讲解,希望可以帮助到大家。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
将二进制数据转为16进制以便显示
获取IMSI
获取IMEI
Java生成UUID
PHP自定义函数获取搜索引擎来源关键字的方法
让你成为最历害的git提交人
在Zeus Web Server中安装PHP语言支持
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Yii2汉字转拼音类的实例代码
Python 2与Python 3版本和编码的对比
php+ajax+json 详解及实例代码
php封装的page分页类完整实例
PHP设计模式之工厂模式与单例模式
php数组合并array_merge()函数使用注意事项
PHP实现简单爬虫的方法
php实现数组中索引关联数据转换成json对象的方法
wget使用技巧