微信公众平台PHP开发版本例子

 更新时间:2016年11月25日 17:18  点击:1983
微信公众平台现在有许多的api接口了我们可以利用微信公众平台来实现许多的一些功能,下面来看一个php版本的微信公众平台开发实例。
最近在做微信公众平台开发,一口气写了二十几个功能,挺有意思的~
 
闽南师大小秘书
 
今天来分享一下开发经验~
微信公众平台提供的接口很简单,先看看消息交互流程:
 
微信公众平台消息交互流程
 
说的通俗一些,用户使用微信发送消息 -> 微信将数据发送给开发者 -> 开发者处理消息并返回数据至微信 -> 微信把返回数据发送给用户,期间数据交互通过XML完成,就这么简单。
 
下面写个实例,开发微信智能聊天机器人:
 
1. 注册微信公众平台账号
微信公众平台:
https://mp.weixin.qq.com/


注: 目前一张身份证只能注册两个账号,账号名称关乎加V认证,请慎重注册。
 
2. 申请服务器/虚拟主机
没有服务器/虚拟主机的童鞋可以使用BAE和SAE,不多介绍。
 
3. 开启开发者模式
微信公众平台有两个模式,一个是编辑模式(傻瓜模式),简单但功能单一。另一个是开发者模式,可以通过开发实现复杂功能。两个模式互斥,显而易见,登录微信公众平台并通过“高级功能”菜单开启开发者模式。
 
4. 填写接口配置信息
同样是在“高级功能”菜单中配置,需要配置两项参数:
URL: 开发者应用访问地址,目前仅支持80端口,以“http://www.YoonPer.com/weixin/index.php”为例。
TOKEN: 随意填写,用于生成签名,以“YoonPer”为例。
填写完把下面代码保存为index.php并上传至http://www.YoonPer.com/weixin/目录,最后点击“提交”完成验证

<?php
define("TOKEN", "YoonPer"); //TOKEN值
$wechatObj = new wechat();
$wechatObj->valid();
class wechat {
 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);
  $tmpStr = implode( $tmpArr );
  $tmpStr = sha1( $tmpStr );
  if( $tmpStr == $signature ) {
   return true;
  } else {
   return false;
  }
 }
}
?>


这玩意儿就是微信公众平台校验URL是否正确接入,研究代码没有实质性意义,验证完即可删除文件,就不详细说明了,有兴趣的童鞋可以查看官方文档。
微信公众平台API文档:
http://mp.weixin.qq.com/wiki/index.php


5. 开发微信公众平台功能
OK,上面提到了,微信公众平台与开发者之间的数据交互是通过XML完成的,既然用到XML,当然得遵循规范,所以在着手开发之前先看看官方接口文档提供的XML规范,以文本消息为例:
 
当用户向微信公众账号发送消息时,微信服务器会POST给开发者一些数据:
<xml>
<!--开发者微信号-->
<ToUserName><![CDATA[toUser]]></ToUserName>
<!--发送方帐号(OpenID)-->
<FromUserName><![CDATA[fromUser]]></FromUserName>
<!--消息创建时间 (整型)-->
<CreateTime>12345678</CreateTime>
<!--消息类别 (text文本消息)-->
<MsgType><![CDATA1]></MsgType>
<!--消息内容-->
<Content><![CDATA[content]]></Content>
<!--消息ID (64位整型)-->
<MsgId>1234567890123456</MsgId>
</xml>
 
开发者在处理完消息后需要返回数据给微信服务器:
<xml>
<!--接收方帐号(OpenID)-->
<ToUserName><![CDATA[toUser]]></ToUserName>
<!--开发者微信号-->
<FromUserName><![CDATA[fromUser]]></FromUserName>
<!--消息创建时间 (整型)-->
<CreateTime>12345678</CreateTime>
<!--消息类别 (text文本消息)-->
<MsgType><![CDATA1]></MsgType>
<!--回复消息内容-->
<Content><![CDATA[content]]></Content>
<!--星标操作(位0x0001被标志时 星标刚收到的消息)-->
<FuncFlag>0</FuncFlag>
</xml>
除文本消息外,微信公众平台还支持用户发送图片消息、地理位置消息、链接消息、事件推送,而开发者还可以向微信公众平台回复音乐消息和图文消息,各类消息XML规范也可以参见官方文档。
 
来看看官方提供的一个PHP示例,我做了一些精简:
<?php
$wechatObj = new wechat();
$wechatObj->responseMsg();
class wechat {
 public function responseMsg() {

  //---------- 接 收 数 据 ---------- //

  $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //获取POST数据

  //用SimpleXML解析POST过来的XML数据
  $postObj = simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);

  $fromUsername = $postObj->FromUserName; //获取发送方帐号(OpenID)
  $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>";

  $msgType = "text"; //消息类型
  $contentStr = 'http://www.YoonPer.com'; //返回消息内容

  //格式化消息模板
  $resultStr = sprintf($textTpl,$fromUsername,$toUsername,
  $time,$msgType,$contentStr);
  echo $resultStr; //输出结果
 }
}
?>
把代码保存为index.php并上传至http://www.YoonPer.com/weixin/目录,如果刚才没删除该文件,则直接覆盖。
 
现在用户通过微信公众平台发送任何消息公众账号均会返回一条内容为“http://www.YoonPer.com”的消息。
接下来需要做的就是根据用户消息动态返回结果~
 
SimSimi(小黄鸡)是目前比较火的聊天机器人,我用CURL开发了一个免费的SimSimi(小黄鸡)接口,传入关键词会返回文本回复,这部分不是本文重点,就不多说明,直接上代码(2014.07.28更新):
<?php
function simsimi ($keyword)
{
    $keyword = urlencode($keyword);
    //----------- 获取COOKIE ----------//
    $url = "http://www.simsimi.com/";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $content = curl_exec($ch);
    list($header, $body) = explode("\r\n\r\n", $content);
    preg_match_all("/set\-cookie:([^\r\n]*);/iU", $header, $matches);
    $cookie = implode(';', $matches[1]).";simsimi_uid=1;";
    curl_close($ch);
    //----------- 抓 取 回 复 ----------//
    $url = "http://www.simsimi.com/func/reqN?lc=ch&ft=0.0&req=$keyword&fl=http%3A%2F%2Fwww.simsimi.com%2Ftalk.htm";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_COOKIE, $cookie);
    $content = json_decode(curl_exec($ch), 1);
    curl_close($ch);
    if ( $content['result'] == '200' ) {
        return $content['sentence_resp'];
    } else {
        return '我还不会回答这个问题...';
    }
}
?>
把上面两段代码整合在一起就大功告成了,需要说明一点,微信服务器在5秒内收不到响应会断掉连接,通过此接口有可能会超时,且SimSimi已经屏蔽了BAE和SAE上的抓取请求,推荐使用SimSimi官方收费API,速度比较快~

简易信息聚合(也叫聚合内容)是一种RSS基于XML标准,在互联网上被广泛采用的内容包装和投递协议。RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,使用非常的多,下面我们来介绍在生成rss时pubDate所需日期时间格式的方法

SS / ATOM 的格式要产生都很简单, 麻烦的是日期格式的产生(RSS => pubDate, ATOM => created).

发现 PHP Date 有提供这些需要的相关全域变量可以使用:(PHP 5.1.1 以后开始支援这些全域变量)

 echo DATE_RSS; // D, d M Y H:i:s O

    echo DATE_ATOM; // Y-m-d\TH:i:sP

    echo date(DATE_RSS); // Wed, 23 Apr 2008 19:27:19 +0800

    echo date(DATE_ATOM); // 2008-04-23T19:27:38+08:00

如果是 MySQL timestamp/datetime format 直接拉出来的资料, 就可以直接使用:

 date(DATE_RSS, ($MYSQL_DATETIME_DATA));

目前支持的日期全域变量有以下:

 DATE_ATOM: Atom  Atom (example: 2005-08-15T15:52:01+00:00)

    DATE_COOKIE: HTTP Cookies (example: Monday, 15-Aug-05 15:52:01 UTC)

    DATE_ISO8601: ISO-8601 (example: 2005-08-15T15:52:01+0000)

    DATE_RFC822: RFC 822 (example: Mon, 15 Aug 05 15:52:01 +0000)

    DATE_RFC850: RFC 850 (example: Monday, 15-Aug-05 15:52:01 UTC)

    DATE_RFC1036: RFC 1036 (example: Mon, 15 Aug 05 15:52:01 +0000)

    DATE_RFC1123: RFC 1123 (example: Mon, 15 Aug 2005 15:52:01 +0000)

    DATE_RFC2822: RFC 2822 (Mon, 15 Aug 2005 15:52:01 +0000)

    DATE_RFC3339: Same as DATE_ATOM

    DATE_RSS: RSS (Mon, 15 Aug 2005 15:52:01 +0000)

    DATE_W3C: World Wide Web Consortium (example: 2005-08-15T15:52:01+00:00)

PHP 预定义的日期格式

自 PHP 5.1.1 起定义有以下常量来提供标准日期表达方法,可以用于日期格式函数

 echo DATE_RSS; // D, d M Y H:i:s O

    echo DATE_ATOM; // Y-m-d\TH:i:sP

    echo date(DATE_RSS); // Wed, 23 Apr 2008 19:27:19 +0800

    echo date(DATE_ATOM); // 2008-04-23T19:27:38+08:00

虽然格式简单, 但用PHP内的预定义格式岂不更加方便.

目前PHP所有支持的日期格式:

DATE_ATOM: Atom  Atom (example: 2005-08-15T15:52:01+00:00)

    DATE_COOKIE: HTTP Cookies (example: Monday, 15-Aug-05 15:52:01 UTC)

    DATE_ISO8601: ISO-8601 (example: 2005-08-15T15:52:01+0000)

    DATE_RFC822: RFC 822 (example: Mon, 15 Aug 05 15:52:01 +0000)

    DATE_RFC850: RFC 850 (example: Monday, 15-Aug-05 15:52:01 UTC)

    DATE_RFC1036: RFC 1036 (example: Mon, 15 Aug 05 15:52:01 +0000)

    DATE_RFC1123: RFC 1123 (example: Mon, 15 Aug 2005 15:52:01 +0000)

    DATE_RFC2822: RFC 2822 (Mon, 15 Aug 2005 15:52:01 +0000)

    DATE_RFC3339: Same as DATE_ATOM

    DATE_RSS: RSS (Mon, 15 Aug 2005 15:52:01 +0000)

    DATE_W3C: World Wide Web Consortium (example: 2005-08-15T15:52:01+00:00)

 

生成rss例子

header("Content-type: application/xml");  //定义header头,以防止chrome内核的浏览器不支持rss订阅,如果不支持就输出xml格式的文件
/**
 * 查询数据库,获取要输出rss的数据
 */
$database = "nameofthedatabase";
$dbconnect = mysql_pconnect(localhost, dbuser, dbpassword);
mysql_select_db($database, $dbconnect);
$query = "select link, headline, description from `headlines` limit 15";
$result = mysql_query($query, $dbconnect);
while ($line = mysql_fetch_assoc($result)) {
    $return[] = $line;
}
$now = date("D, d M Y H:i:s T");
$output = "<?xml version=\"1.0\" encoding=\"utf-8\"?>
            <rss version=\"2.0\">
                <channel>
                    <title>山东道路交通安全网-$lanmu</title>
                    <link>http://sdjtaq.cn/rss</link>
                    <description>Latest 100 articles of $lanmu</description>
                    <pubDate>$now</pubDate>
                    <lastBuildDate>$now</lastBuildDate>
                    <docs>http://someurl.com</docs>
                    <managingEditor>810706080@qq.com</managingEditor>
                    <webMaster>810706080@qq.com</webMaster>
            ";
foreach ($artList as $line) {
    $date = strtotime($line['add_time']); //将数据库的时间格式化成时间戳
    $output .= "<item> \n"
            . "<title>" . $line['title'] . "</title>\n"
            . " <link>http://sdjtaq.cn/aq_show_" . $line['id'] . ".html</link>\n"
            . "<description><![CDATA[" . $line['zhaiyao'] . "]]></description>\n"
            . "<pubDate>" . date("D, d M Y H:i:s O", $date) . "</pubDate>\n"
            . "</item>\n";
}
$output .= "</channel>\n</rss>";
echo $output;

删除空格非常的简单了我们通过可以直接使用相关的函数来实现了,这里在网上找到了许多的例子,下面各位和111cn小编来看看吧。

php内设的删除空白的函数!感觉不怎么的好使用。找了网上的代码。非常的好使用。查看源码的时候所有空白都是去除的。使用方法很简单。直接使用写入要替换的变量就OK了。
 
<?php

function trimall($str)//删除空格
 {
     $qian=array(" "," ","\t","\n","\r");$hou=array("","","","","");
     return str_replace($qian,$hou,$str);   
}

通过php自带的函数

<?php
/*
trim 去除一个字符串两端空格,
rtrim 是去除一个字符串右部空格,
ltrim 是去除一个字符串左部空格。

*/
?>
<?php
echo trim(" 空格 ")."<br>";
echo rtrim(" 空格 ")."<br>";
echo ltrim(" 空格 ")."<br>";
?>

例子

<?php
$str=" 去除前后空格 ";
echo "方括号中为原始字符串:[".$str."]<br>";
echo "原始字符串长度:".strlen($str)."<br>";
$str1=ltrim($str);
echo "执行ltrim()之后的长度:".strlen($str1)."<br>";
$str2=rtrim($str);
echo "执行rtrim()之后的长度:".strlen($str2)."<br>";
$str3=trim($str);
echo "执行trim()之后的长度:".strlen($str3)."<br>";
echo "去掉首尾空格之后的字符串:[".$str3."]";
?>

curl函数的强大之处就可以像用户一样的去访问一个网页并且可以是php所能接受的所有数据提交模式了,下面我们来看一个php中curl实现GET和POST请求抓取网页或上传文件的例子并且它还支持跨项目和跨服务器的哦。

一:curl 函数和参数详解

函数库:
1:curl_init 初始化一个curl会话
2:curl_close 关闭一个curl会话
3:curl_setopt 为一个curl设置会话参数
4:curl_error 返回一个包含当前会话错误信息的字符串
5:curl_exec 执行一个curl会话
6:curl_multi_add_handle 向curl批处理会话中添加单独的curl句柄资源
7:curl_multi_close 关闭一个批处理句柄资源
8:curl_multi_exec 解析一个curl批处理句柄
9:curl_multi_getcontent 返回获取的输出的文本流
10:curl_multi_info_read 获取当前解析的curl的相关传输信息
11:curl_multi_init 初始化一个curl批处理句柄资源
12:curl_multi_remove_handle 移除curl批处理句柄资源中的某个句柄资源
13:curl_multi_select 阻塞直到cURL批处理连接中有活动连接
14:curl_setopt_array 以数组的形式为一个curl设置会话参数
15:curl_version 获取curl相关的版本信息
16:curl_getinfo 获取一个curl连接资源句柄的信息
17:curl_copy_handle 拷贝一个curl连接资源的所有内容和参数
18:curl_errno 返回一个包含当前会话错误信息的数字编号

curl_setopt常用可设置参数:
CURLOPT_URL 请求的url地址
CURLOPT_RETURNTRANSFER 设置是否获取数据返回,数据以文件流的形式返回,不是直接输出
CURLOPT_POST 设置是否POST请求,类型为:application/x-www-form-urlencoded,跟表单提交一样
CURLOPT_POSTFIELDS POST请求的数据
CURLOPT_HEADER 启用时会将头文件的信息作为数据流输出
CURLOPT_HTTPGET 启用时会设置HTTP的method为GET,默认是GET

二:curl GET 方式


$ch = curl_init();
//设置选项参数
curl_setopt($ch, CURLOPT_URL, http://www.111cn.net);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设置返回数据
curl_setopt($ch, CURLOPT_HEADER, 0);//设置头部不执行
$output = curl_exec($ch);//执行
curl_close($ch);//释放curl句柄
var_dump($output);


三:POST 方式

$url = "http://localhost/ceshi.php";
$post_data = array ("username" =&gt; "ceshi","pwd" =&gt; "sada&amp;1dsw1","key"=&gt;"ha");
$ch = curl_init();//初始化curl
curl_setopt($ch, CURLOPT_URL, $url);//设置请求地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//返回值
curl_setopt($ch, CURLOPT_POST, 1);//设置请求方式POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);//请求所带变量数据
$output = curl_exec($ch);//执行获取返回数据,返回的数据建议json_encode($return_data);
curl_close($ch);
$output =json_decode($output );//解析返回数据

四:curl POST 方式上传文件


$post_data=array("Filedata"=&gt;"@".$image_file);//利用数组传值,image_file为图片地址,@不能少,标明是一个文件
$url = "http://localhost/ceshi.php";
$ch = curl_init(); //初始化curl
curl_setopt($ch, CURLOPT_URL, $url);//设置链接
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//设置是否返回信息
curl_setopt($ch, CURLOPT_POST, true);//设置为POST方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);//POST数据
$result = curl_exec($ch);//接收返回信息
if(curl_errno($ch)){//出错则显示错误信息
die(json_encode($ch));
}
curl_close($ch); //关闭curl链接
if (ord($result[0])==239&amp;&amp;ord($result[1])==187&amp;&amp;ord($result[2])== 191){
$result = substr( $result,3);//解决Bom头带来的json_decode为空的bug,Bom头是固定的,可以检测后去除掉
}
$result=json_decode($result);

五:curl POST 文件上传常见问题和解决办法:

1:curl_setopt设置CURLOPT_POSTFIELDS 传值是个数组,后端一直无法获取数据$_POST的值

错误现象:
如果$post_data是数组(包括多维数组)的话会出现”entity is too large”的错误提示,接收数据的receive.php 无法获取curl传过来的数据

原因:
curl POST方法时候,传递一个数组到CURLOPT_POSTFIELDS,curl会把数据编码成 multipart/form-data,如果传递一个URL-encoded字符串时,数据会被编码成 application/x-www-form-urlencoded,对于multipart/form-data的编码方式其实相当于我们直接以”enctype=”multipart/form-data” method=”post” 这样的表单进行操作

解决办法:
a:
对$post_data 数组经 urlencode() 编码后进行字符串连接,
例:$post_data=”&name=urlencode($name)&pwd=usrlencode($pwd)”

b:
直接利用http_build_query()进行参数的拼接。

ps:
“multipart/form-data” 是把表单设置为MIME编码,目的是用来传输二进制文件的,若想上传文件,必须用这个编码(例子见上面的curl POST上传文件的例子);但是普通的url数据使用的是“application/x-www-form-urlencoded” 格式。

2:curl请求返回数据头部多了三个字节,post请求后端是以json_encode 数据格式返回,进行json_decode后返回值始终为空

原因:bom头搞的鬼,bom头:在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark),就是这前面多了三个字节导致json_decode后返回值为空
对返回值进行bom头检测检测:


echo substr( $result, 0, 1 ); //看到一个乱码
echo substr( $result, 0, 2 ); //看到两个乱码
echo substr( $result, 0, 3 ); //空白
echo substr( $result, 0, 4 ); //看到o
证明确实是bom头的问题

解决办法:


if ( ord( $result[0] ) == 239 &amp;&amp; ord( $result[1] ) == 187&amp;&amp; ord( $result[2] ) == 191 ) {
$result = substr( $result, 3 );//Bom头是固定的,可以检测后去除掉
}

前面介绍过一个过滤了些特殊字符的php程序,下面我们升级一下这个敏感词过滤函数更强大了有了它再也不怕敏感词中间加空格或者其他标点符号了。


只要用户可以发言的地方,就可能出现广告或者其他敏感词,因此必须加入敏感词过滤机制来保持站点的”纯洁”。

过滤机制:加入php关键字正则匹配

//$str 为用户数据
function wordFilter($str)
{
       /*
    获取敏感词列表
    敏感词的存储方法:
    1:存储在txt文件中(一般的方法)
    2:存储在缓存(比较好的方法)
    我是存储在memcachd中。
    */
    $words = getSensitiveWords();

    foreach ($words as $word)
    {
        $preg_letter = '/^[A-Za-z]+$/';
        if (preg_match($preg_letter, $str))
        {//匹配中文
        $str = strtolower($str);
        $pattern_1 = '/([^A-Za-z]+' . $word . '[^A-Za-z]+)|([^A-Za-z]+' . $word . '\s+)|(\s+' . $word . '[^A-Za-z]+)|(^' . $word . '[^A-Za-z]+)|([^A-Za-z]+' . $word.'$)/';
        //敏感词两边不为空
        if (preg_match($pattern_1, $str))
        {
            $flag = TRUE;
        }
        $pattern_2 = '/(^' . $word . '\s+)|(\s+' . $word . '\s+)|(\s+' . $word . '$)|(^' . $word . '$)/';
        //敏感词两边可以为空格
        if (preg_match($pattern_2, $str))
        {
            $flag = TRUE;
        }
        }
        else
        {//匹配英文字符串,大小写不敏感
        $pattern = '/\s*' . $word . '\s*/';
        if (preg_match($pattern, $str))
        {
            $flag = TRUE;
        }
        }
    }
}
存在问题:

如果单纯只加入关键字匹配,用户反过滤的方法五花八门,包括中间加入空格或者其他标点符号。
例子:
敏感词:扣扣

用户处理后:
扣 扣
扣,扣
扣@扣
扣1扣
这时候代码的正则匹配就可能匹配不出来。

解决办法:

先对用户数据去除所有的标点符号和一些特殊字符,然后再进行敏感词判断。

代码:

$flag_arr=array('?','!','¥','(',')',':','‘','’','“','”','《','》',',','…','。','、','nbsp','】','【','~');

        $content_filter=preg_replace('/\s/','',preg_replace("/[[:punct:]]/",'',strip_tags(html_entity_decode(str_replace($flag_arr,'',$content),ENT_QUOTES,'UTF-8'))));
$content_filter 就是处理后的用户数据,然后再进行 wordFilter($content_filter ) 过滤操作

[!--infotagslink--]

相关文章

  • 微信公众平台实现微信网页登陆授权开发

    微信公众平台实现微信网页登陆授权开发其实是非常的简单了,因为官方的参考程序了,下面小编就看了一站长根据官方参考做的一个网页登陆授权例子,大家可看看。 文件1:in...2016-11-25
  • PHP Curl模拟登录微信公众平台、新浪微博实例代码

    这篇文章主要介绍了PHP Curl模拟登录微信公众平台、新浪微博实例代码的相关资料,涉及到php curl模拟登录相关知识,需要的朋友可以参考下...2016-02-01
  • php版本微信公众平台回复乱码问题解决方法

    微信公众平开发时碰到回复中文乱码了,这个问题小编发现是编码问题,其实只要把编码转成utf8就可以解决了,具体来看看。 很多微信公众平台的自动回复程序都是 ThinkWec...2016-11-25
  • 无需ROOT!MIUI 8开发版可使用屏幕录屏功能

    年1月份,MIUI已经悄然在体验版中升级了录屏功能,小米3、小米4、小米5、小米Note的体验版系统已经加入了该功能,其它机型会在后期陆续加入。,MIUI开发版迎来了第323周更新,已经更新升级的用户会发现,在系统工具中增加了屏幕录制应用,下面我们来看看怎么操作吧...2017-07-06
  • MySQL 8.0.0开发里程碑版发布!

    MySQL 8.0.0开发里程碑版发布,感兴趣的小伙伴们可以阅读一下...2016-10-02
  • 微信公众平台开发通过php创建自定义菜单

    自定义菜单可以在后台设置但如果你使用了开发者之后那么后台的自定义菜单功能就失效了,必须通过程序来创建了,下面一起来看一个简单的通过php创建自定义菜单的例子。...2016-11-25
  • php版微信公众平台账号自定义菜单类

    微信公众平台服务号可申请自定义菜单了,其它的号暂时不支持自定义菜单了,这个不但可以使用api来操作,还可以直接在后台定义菜单与参数哦。 申请自定义菜单 服务号可...2016-11-25
  • php 微信公众平台开发之验证步骤

    微信公众平台开发我们现在做得比较多了,下面给各位介绍的是一个入门级别的微信公众平台验证基础知识了,有兴趣的和小编来看看。 开发微信的时候 需要验证一下 。...2016-11-25
  • MIUI8开发版加入录屏功能 MIUI录屏功能亮点介绍

    MIUI8全新录屏功能正式上线,很多小伙伴等了很久,这次终于上线了。今年1月份,MIUI已经悄然在体验版中升级了录屏功能,小米3、小米4、小米5、小米Note的体验版系统已经加入了该功能,现在MIUI8开发版加入录屏功能,下面为大家带来 MIUI录屏功能亮点,来看看吧...2017-07-06
  • 微信公众平台模拟登录之验证码获取

    最近在模拟登录的时候愈发的出现登录失败的情况,原因是:微信公众平台登录如果时不时的会对一些异常帐号要求输入验证码才可以登录 这个时候平台首页的登录逻辑就会...2016-11-25
  • 微信公众平台开发入门教程

    要对微信公众平台进行开发,首先需要成为开发者,可以到https://mp.weixin.qq.com/注册一个帐号,然后按要求填写相关信息即可。 有了公众号后,在公众平台的高级功能里选...2016-11-25
  • 使用c#开发公众平台自定义菜单功能

    微信公众平台服务号开放了自定义菜单API,本案例介绍C#开发微信公众号自定义菜单功能。在此基础上可以开发更完善的自定义菜单管理功能...2020-06-25
  • 微信公众平台预约提交后发送email例子

    其实这种发送邮件是非常的简单了我们只要接受由用户提交过来的邮箱地址然后再由php的邮件控制进行邮件发送了,下面看一个综合开发例子。 首先yyuc框架是支持发送em...2016-11-25
  • 微信公众平台PHP开发版本例子

    微信公众平台现在有许多的api接口了我们可以利用微信公众平台来实现许多的一些功能,下面来看一个php版本的微信公众平台开发实例。 最近在做微信公众平台开发,一口...2016-11-25
  • MIUI8开发版、稳定版有什么区别?神图讲解两者区别

    对于很多小米手机用户来说,MIUI各个版本看的让人有点眼晕,稳定版、开发版、内测版什么的简直太多,那么MIUI8开发版、稳定版有什么区别?下面小编就为大家介绍一下,来看看吧...2016-09-12
  • 微信公众平台开发关注/取消关注事件例子

    用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL。方便开发者给用户下发欢迎消息或者做帐号的解绑 下面是一个微信公众平台关注和取消关注的...2016-11-25
  • 微信公众平台网页获取用户OpenID方法

    下面我们一起来看看关于微信公众平台网页获取用户OpenID方法,有需要了解的朋友可以一起来看看吧. 用户点击微信自定义菜单view类型按钮后,微信客户端将会打开开发者...2016-11-25
  • 分析微信公众平台“接收普通消息”相关数据的获取

    在微信公众平台中,有一个接收普通消息的接口,关注公众号之后,每回复一条信息,都会post到开发中心填写的地址上面去。 接收普通消息在官方开发文档中截图如下: 上面的...2016-05-19
  • 微信公众平台之CURL应用

    本文章来给各位同学介绍一下关于微信公众平台之CURL应用实例,如果你碰到此类问题不防进入参考一下吧。 这几天工作有大量用curl,curl就是模拟浏览器来传输数据,他支...2016-11-25
  • MIUI 8开发版升级时存在的一些问题官方解答汇总

    在今天我们正式推送了 MIUI 8 开发版,小米兰亭、手机分身、长截图等重磅功能强势更新,干货还是满满的!下面脚本之家为大家分享MIUI 8开发版升级时存在的一些问题官方解答,来看看吧...2016-07-04