zoukankan      html  css  js  c++  java
  • 微信应用开发-个人订阅号开发模式接入

    一、打开开发者模式

    1.

    请登录微信官网:http://mp.weixin.qq.com

    进入后台-基本配置。打开开发模式。

    先要上传index.php文件到新浪云【右键commit就好】;

    1. 根据已经申请成功的SAE云端可用域名(其它可用域名也可)和自定义的Token进行对接。
    2. 填写【接口配置信息】

    如果提交验证失败请访问:debug.fangbei.org进行在线调试,直到成功

    测试是否成功:

    关注后能够在手机端进行发送文本、语音、图片、视频、地理位置并进行自动回复。

     

     index.php代码详细解析:

    参考文档:https://www.cnblogs.com/mchina/archive/2013/06/07/3120592.html

      1 <?php
      2 /**
      3  * Created by PhpStorm.
      4  * Date: 2020/5/22
      5  * Time: 15:54
      6  * Content:接口文件
      7  *
      8  */
      9 
     10 header('Content-type:text');
     11 //定义token,token很重要在应用中要注意保密
     12 define("TOKEN", "weixin");
     13 /**将class wechatCallbackapiTest类实例化
     14  * 新建一个wechatCallbackapiTest类型对象wechatObj
     15  * 下面有wechatCallbackapiTest类
     16  */
     17 $wechatObj = new wechatCallbackapiTest();
     18 
     19 //对接请求那么请求中包含'echostr'
     20 //全局变量$_GET
     21 if (isset($_GET['echostr'])) { //echostr存在的话去执行wechatObj类中的valid函数
     22     $wechatObj->valid();//使用->访问类中valid方法,用来验证开发模式
     23 } else {//echostr不存在的话去执行wechatObj类中的responseMsg函数
     24     $wechatObj->responseMsg();
     25 }
     26 
     27 
     28 /**
     29  *声明一个类 wechatCallbackapiTest,该类中包含有三个方法(函数)。
     30  * signature    微信加密签名,
     31  * signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
     32  * timestamp    时间戳
     33  * nonce    随机数
     34  * echostr    随机字符串
     35  */
     36 class wechatCallbackapiTest
     37 {
     38 //验证接口的函数,用于申请成为开发者时向微信发送验证信息。
     39     public function valid()
     40     {
     41 //从微信用户端获取一个随机字符赋予变量echostr
     42         $echoStr = $_GET["echostr"];
     43 //valid signature,option访问地的checkSignature函数签名验证方法,
     44 //如果签名一致,输出变量echostr,完整验证配置接口的操作
     45 /**this在OOP中就是伪变量,
     46  * (伪变量不是真正的变量,只是形式上是变量,变量中存储的是固定的值,$this中并没有,哪个对象调用,$this就代表哪个对象)
     47  * 同时,也可以将$this理解为对象的引用,$this通过引用的形式访问一个对象的方法和属性
     48  * 所以$this代表这个类wechatCallbackapiTest
     49  **/
     50         if ($this->checkSignature()) {//函数在下面
     51             echo $echoStr;
     52             exit;
     53         }
     54     }
     55 
     56 //校验函数,校验对接身份函数,签名验证程序
     57     private function checkSignature()
     58     {
     59 //从用户端获取参数signature的值再赋值给变量signature(签名)
     60 //获取参数timestamp的值再赋值给变量timestamp(时间戳)
     61 //获取参数nonce的值再赋值给变量nonce(随机数、临时数)
     62         $signature = $_GET["signature"];
     63         $timestamp = $_GET["timestamp"];
     64         $nonce = $_GET["nonce"];
     65 //将TOKEN赋值给变量token(就是固定值"weixin")
     66         $token = TOKEN;
     67 //数组变量tmpArr,存储$token, $timestamp, $nonce
     68         $tmpArr = array($token, $timestamp, $nonce);
     69 //新建排序,将token、timestamp、nonce三个参数进行字典序排序
     70         sort($tmpArr);
     71 //implode() 函数返回由数组元素组合成的字符串
     72         $tmpStr = implode($tmpArr);
     73 //shal加密!!!
     74         $tmpStr = sha1($tmpStr);
     75 
     76         if ($tmpStr == $signature) {
     77             return true;
     78         } else {
     79             return false;
     80         }
     81     }
     82 
     83 
     84 //响应消息函数
     85 //发送问号响应回复用户时间
     86     public function responseMsg()
     87     {
     88 //接收微信公众平台发送过来的用户消息,
     89 //该消息数据结构为XML,不是php默认的识别数据类型,
     90 //因此这里用了$GLOBALS['HTTP_RAW_POST_DATA']来接收,
     91 //同时赋值给了$postStr
     92         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
     93 
     94         if (!empty($postStr)) {
     95 
     96             $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
     97 //将对象$postObj中的发送消息用户的OPENID赋值给$fromUsername变量
     98             $fromUsername = $postObj->FromUserName;
     99 //将对象$postObj中的公众账号的ID赋值给$toUsername变量
    100             $toUsername = $postObj->ToUserName;
    101 //trim() 函数从字符串的两端删除空白字符和其他预定义字符,这里就可以得到用户输入的关键词
    102             $keyword = trim($postObj->Content);
    103 //time() 函数返回当前时间的 Unix 时间戳,即自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。
    104             $time = time();
    105 //xml的数据格式,存放微信输出内容的模板
    106             $textTpl = "<xml>
    107                         <ToUserName><![CDATA[%s]]></ToUserName>
    108                         <FromUserName><![CDATA[%s]]></FromUserName>
    109                         <CreateTime>%s</CreateTime>
    110                         <MsgType><![CDATA[%s]]></MsgType>
    111                         <Content><![CDATA[%s]]></Content>
    112                         <FuncFlag>0</FuncFlag>
    113                         </xml>";
    114             if ($keyword == "学号") {
    115                 $msgType = "text";
    116                 $content = "1111111";
    117                 $result = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $content);
    118                 echo $result;
    119             }
    120             if ($keyword == "?" || $keyword == "?") {//两个问号不一样,一个中文一个英文
    121                 $msgType = "text";
    122                 $content = date("Y-m-d H:i:s", time());
    123                 $result = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $content);
    124                 echo $result;
    125             }
    126         } else {
    127             echo "";
    128             exit;
    129         }
    130     }
    131 }
    index.php

    没有注解的index.php

     1 <?php
     2 header('Content-type:text');
     3 define("TOKEN", "weixinac");
     4 $wechatObj = new wechatCallbackapiTest();
     5 if (isset($_GET['echostr'])) { 
     6     $wechatObj->valid();
     7 } else {
     8     $wechatObj->responseMsg();
     9 }
    10 
    11 class wechatCallbackapiTest
    12 {
    13 //验证接口的函数,用于申请成为开发者时向微信发送验证信息。
    14     public function valid()
    15     {
    16         $echoStr = $_GET["echostr"];
    17         if ($this->checkSignature()) {
    18             echo $echoStr;
    19             exit;
    20         }
    21     }
    22 //校验函数,校验对接身份函数,签名验证程序
    23     private function checkSignature()
    24     {
    25         $signature = $_GET["signature"];
    26         $timestamp = $_GET["timestamp"];
    27         $nonce = $_GET["nonce"];
    28         $token = TOKEN;
    29         $tmpArr = array($token, $timestamp, $nonce);
    30         sort($tmpArr);
    31         $tmpStr = implode($tmpArr);
    32         $tmpStr = sha1($tmpStr);
    33         if ($tmpStr == $signature) {
    34             return true;
    35         } else {
    36             return false;
    37         }
    38     }
    39 //响应消息函数
    40     public function responseMsg()
    41     {
    42         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
    43         if (!empty($postStr)) {
    44             $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
    45             $fromUsername = $postObj->FromUserName;
    46             $toUsername = $postObj->ToUserName;
    47             $keyword = trim($postObj->Content);
    48             $time = time();
    49             $textTpl = "<xml>
    50                         <ToUserName><![CDATA[%s]]></ToUserName>
    51                         <FromUserName><![CDATA[%s]]></FromUserName>
    52                         <CreateTime>%s</CreateTime>
    53                         <MsgType><![CDATA[%s]]></MsgType>
    54                         <Content><![CDATA[%s]]></Content>
    55                         <FuncFlag>0</FuncFlag>
    56                         </xml>";
    57             if ($keyword == "学号") {
    58                 $msgType = "text";
    59                 $content = 1111111
    60                 $result = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $content);
    61                 echo $result;
    62             }
    63             if ($keyword == "?" || $keyword == "?") {//两个问号不一样,一个中文一个英文
    64                 $msgType = "text";
    65                 $content = date("Y-m-d H:i:s", time());
    66                 $result = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $content);
    67                 echo $result;
    68             }
    69         } else {
    70             echo "";
    71             exit;
    72         }
    73     }
    74 }
    index.php

    注:若是index.php代码有所修改

     

    所以需要先commit到服务器

     

    点击ok就好啦。

    2020/5/22


  • 相关阅读:
    codeforce 1478B B. Nezzar and Lucky Number 找规律 打表 C
    codeforce 1478C C. Nezzar and Symmetric Array 模拟 认真写 C
    Ansible自动化入门
    多线程执行传值
    js 文本框根据开始结束符号控制输入内容(IE)
    update where in 子查询的梗
    Qt中的QThread:使用QSemaphore进行多线程数据同步
    linux服务器下CPU爆满
    linux下磁盘爆满问题排查
    每日一题(算法)
  • 原文地址:https://www.cnblogs.com/jiuzhen/p/12938179.html
Copyright © 2011-2022 走看看