找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4249|回复: 0

[原创教程] 如何玩转微信公众平台PHP版

[复制链接]
发表于 2012-12-7 16:09:48 | 显示全部楼层 |阅读模式
一:如何申请微信公众平台账号?这个问题其实你一搜一大片答案出来,无非就是用QQ号注册一下。
注册网址是:http://mp.weixin.qq.com/

二:如何用微信公众平台自定义回复内容?
1:先设置好账户信息,传头像等操作。

2:设置“自定义回复”,依次点击:设置 - 自定义回复 - 调用公众平台消息接口 - 前往设置,最终页面具体如图所示:

图1

图1


负责人姓名:开发者的姓名;
手机号:能联系到开发者的手机号;
联系邮箱:你的邮箱;
url:你即将要互动的页面网址,如http://www.artengineer.cn/hudong.php
Token:随意命名一个,到时候在hudong.php里设置为一样即可(hudong.php代码见下面)。
注意:先不要提交,现在还提交不了,需要hudong.php放到你写的url里。

微信官方平台提供了PHP的源码,具体代码如下:
  1. <?php
  2. /**
  3.   * wechat php test
  4.   */

  5. //define your token
  6. define("TOKEN", "weixin");
  7. $wechatObj = new wechatCallbackapiTest();
  8. $wechatObj->valid();

  9. class wechatCallbackapiTest
  10. {
  11.         public function valid()
  12.     {
  13.         $echoStr = $_GET["echostr"];

  14.         //valid signature , option
  15.         if($this->checkSignature()){
  16.                 echo $echoStr;
  17.                 exit;
  18.         }
  19.     }

  20.     public function responseMsg()
  21.     {
  22.                 //get post data, May be due to the different environments
  23.                 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

  24.               //extract post data
  25.                 if (!empty($postStr)){
  26.                
  27.                       $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  28.                 $fromUsername = $postObj->FromUserName;
  29.                 $toUsername = $postObj->ToUserName;
  30.                 $keyword = trim($postObj->Content);
  31.                 $time = time();
  32.                 $textTpl = "<xml>
  33.                                                         <ToUserName><![CDATA[%s]]></ToUserName>
  34.                                                         <FromUserName><![CDATA[%s]]></FromUserName>
  35.                                                         <CreateTime>%s</CreateTime>
  36.                                                         <MsgType><![CDATA[%s]]></MsgType>
  37.                                                         <Content><![CDATA[%s]]></Content>
  38.                                                         <FuncFlag>0</FuncFlag>
  39.                                                         </xml>";            
  40.                                 if(!empty( $keyword ))
  41.                 {
  42.                               $msgType = "text";
  43.                         $contentStr = "Welcome to wechat world!";
  44.                         $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  45.                         echo $resultStr;
  46.                 }else{
  47.                         echo "Input something...";
  48.                 }

  49.         }else {
  50.                 echo "";
  51.                 exit;
  52.         }
  53.     }
  54.                
  55.         private function checkSignature()
  56.         {
  57.         $signature = $_GET["signature"];
  58.         $timestamp = $_GET["timestamp"];
  59.         $nonce = $_GET["nonce"];        
  60.                         
  61.                 $token = TOKEN;
  62.                 $tmpArr = array($token, $timestamp, $nonce);
  63.                 sort($tmpArr);
  64.                 $tmpStr = implode( $tmpArr );
  65.                 $tmpStr = sha1( $tmpStr );
  66.                
  67.                 if( $tmpStr == $signature ){
  68.                         return true;
  69.                 }else{
  70.                         return false;
  71.                 }
  72.         }
  73. }

  74. ?>
复制代码
3:在你指定的url里新建一个hudong.php文件,把上面的代码粘贴到hudong.php,并将define("TOKEN", "weixin");改为define("TOKEN", "token123456");//这里的token123456就是第二.2步里设置的Token,第二.2步那里填什么,就写什么。
4:点击提交(如果提示提交成功,就是成功了,不成功,一般是Token设置错误)
三:如何玩转微信公众平台的自定义回复?
如果.......你想这样: jc2.jpg
可以先关注一下美工网试试效果:微信加入账号:meigongw 或 通过扫描一下的二维码即可:

qrcode_for_gh_48b64567431d_430.jpg

如何利用腾讯微博平台提供的代码进行修改优化?

其实并不难,关键是看要实现什么功能,我把部分完整的代码发给大家,大家可以参考下,并且做出更强大的互动效果。
里面重点的代码我已经注释了:

以下是hudong.php源码:
  1. <?php
  2. /**
  3.   * wechat php test
  4.   */

  5. //define your token

  6. define("TOKEN", "
  7. token123456 ");
  8. $wechatObj = new wechatCallbackapiTest();
  9. $wechatObj->valid();

  10. class wechatCallbackapiTest
  11. {
  12.         public function valid()
  13.     {
  14.         $echoStr = $_GET["echostr"];

  15.         //valid signature , option
  16.         if($this->checkSignature()){
  17.                 echo $echoStr;
  18.                         $this->responseMsg();//调用回复,原本腾讯提供的代码是没有调用的。
  19.                 exit;
  20.         }
  21.     }

  22.     public function responseMsg()
  23.     {
  24.                 //get post data, May be due to the different environments
  25.                 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

  26.               //extract post data
  27.                 if (!empty($postStr)){
  28.                
  29.                       $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  30.                 $fromUsername = $postObj->FromUserName;
  31.                 $toUsername = $postObj->ToUserName;
  32.                 $keyword = trim($postObj->Content);
  33.                 $time = time();
  34.                 $textTpl = "<xml>
  35.                                                         <ToUserName><![CDATA[%s]]></ToUserName>
  36.                                                         <FromUserName><![CDATA[%s]]></FromUserName>
  37.                                                         <CreateTime>%s</CreateTime>
  38.                                                         <MsgType><![CDATA[%s]]></MsgType>
  39.                                                         <Content><![CDATA[%s]]></Content>
  40.                                                         <FuncFlag>0</FuncFlag>
  41.                                                         </xml>";            
  42.                                 
  43. //以上为代码A部分
  44.                                        
  45. //接上代码A部分

  46. if(!empty( $keyword ))
  47. {
  48. //
  49. $enkeyw=urlencode($keyword);
  50. $dekeyw="%E5%A6%82%E6%9E%9C%E6%82%A8%E9%9C%80%E8%A6%81%E4%BA%86%E8%A7%A3%E8%AF%A5%E5%BA%94%E7%94%A8%E7%9A%84%E6%89%80%E6%9C%89%E8%AF%A6%E6%83%85%EF%BC%8C%E5%8F%AF%E7%9B%B4%E6%8E%A5%E8%81%94%E7%B3%BB%E4%BB%96%E3%80%82";
  51. //require_once(dirname(dirname(__FILE__)) . '/db.php');//数据库连接
  52. //$queryStrmg = "select * from meigong where id>0 order by id desc limit 0,2";
  53. //$qqmg=mysql_query($queryStrmg);
  54. //$rptmg=mysql_fetch_array($qqmg);
  55. //$rptmgs=array();
  56. //while($rptmg=mysql_fetch_array($qqmg)){$rptmgs[]=$rptmg;}
  57. // &&
  58. $msgType = "text";//text为纯文本形式,news为图文形式
  59. $contentStr="您好,欢迎您关注美术工程师网(美工网)的微信公众平台。回复或输入美工、找美工、等关键字(还有很多隐藏关键字噢)与我互动吧!更多的互动请关注官方网:http://www.artengineer.cn";
  60. if($enkeyw=='%E8%94%A1%E6%B4%81%E9%94%90'){$contentStr=urldecode($dekeyw);}
  61. if($keyword=='4'){$contentStr="4是四也是④,能不能输入美工啊?亲";}
  62. elseif($keyword=='元芳'){$contentStr="元芳,你怎么看?";}
  63. elseif($keyword=='凤姐' || $keyword=='罗玉凤' || $keyword=='芙蓉姐姐'){$contentStr="不认识,不想认识";}
  64. elseif($keyword=='你是谁' || $keyword=='谁' ){$contentStr="我是美术工程师网(美工网),我的地址是www.artengineer.cn";}
  65. elseif($keyword=='你大爷' || $keyword=='你妹' || $keyword=='你' || $keyword=='操' || $keyword=='sb' || $keyword=='SB' || $keyword=='傻逼'){$contentStr="干嘛?干嘛?想动粗啊?!";}
  66. elseif($keyword=='美工' || $keyword=='找美工' ){
  67. /*图文调用说明:
  68. FromUserName 消息发送方
  69. ToUserName 消息接收方
  70. CreateTime 消息创建时间
  71. MsgType 消息类型,图文消息必须填写news
  72. Content 消息内容,图文消息可填空
  73. ArticleCount 图文消息个数,限制为10条以内
  74. Articles 多条图文消息信息,默认第一个item为大图
  75. Title 图文消息标题
  76. Description 图文消息描述
  77. PicUrl 图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80,限制图片链接的域名需要与开发者填写的基本资料中的Url一致
  78. Url 点击图文消息跳转链接
  79. */
  80. $msgType = "news";
  81. $textTpl="<xml>
  82. <ToUserName><![CDATA[%s]]></ToUserName>
  83. <FromUserName><![CDATA[%s]]></FromUserName>
  84. <CreateTime>%s</CreateTime>
  85. <MsgType><![CDATA[%s]]></MsgType>
  86. <Content><![CDATA[%s]]></Content>
  87. <ArticleCount>2</ArticleCount>
  88. <Articles>
  89. <item>
  90. <Title><![CDATA[".$mg[0]['title']."]]></Title>
  91. <Description><![CDATA[美工:".$rptmgs[0]['max_number']."]]></Description>
  92. <PicUrl><![CDATA[http://www.artengineer.cn/".$rptmgs[0]['image']."]]></PicUrl>
  93. <Url><![CDATA[http://www.artengineer.cn/index.php?id=".$rtpmgs[0]['id']."]]></Url>
  94. </item>
  95. <item>
  96. <Title><![CDATA[".$rptmgs[1]['title']."]]></Title>
  97. <Description><![CDATA[美工:".$rptmgs[1]['max_number']."]]></Description>
  98. <PicUrl><![CDATA[http://www.artengineer.cn/".$rptmgs[1]['image']."]]></PicUrl>
  99. <Url><![CDATA[http://www.artengineer.cn/index.php?id=".$rptmgs[1]['id']."]]></Url>
  100. </item>
  101. </Articles>
  102. <FuncFlag>1</FuncFlag>
  103. </xml>";
  104. //$contentStr = $cont1;//这里只是演示,具体代码请根据需要修改,实际上你输入美工是查不出来的,会提示以下信息:
  105. $contentStr = "抱歉,查美工功能更新中,请访问并关注美工论坛:http://bbs.artengineer.cn";
  106. $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  107. echo $resultStr;
  108. exit;
  109. }
  110. elseif($keyword!="Hello2BizUser"){//Hello2BizUser是微信默认开通后发送的关键词,这里主要是判断非默认开通并且该关键词没有的情况
  111. $contentStr==urldecode($dekeyw) ? $contentStr : $contentStr="[悠闲]Sorry啊,我看不懂[可怜]。元芳,你是怎么看".$keyword."这个关键词的?!";
  112. }
  113. $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  114. echo $resultStr;
  115. }else{
  116. echo "Input something...";
  117. }

  118. }else {
  119. echo "";
  120. exit;
  121. }
  122. }

  123. private function checkSignature()
  124. {
  125. $signature = $_GET["signature"];
  126. $timestamp = $_GET["timestamp"];
  127. $nonce = $_GET["nonce"];        

  128. $token = TOKEN;
  129. $tmpArr = array($token, $timestamp, $nonce);
  130. sort($tmpArr);
  131. $tmpStr = implode( $tmpArr );
  132. $tmpStr = sha1( $tmpStr );

  133. if( $tmpStr == $signature ){
  134. return true;
  135. }else{
  136. return false;
  137. }
  138. }
  139. }
  140. ?>
复制代码

87行的:$msgType = "news"; 代表这是一个图文形式的信息。
94行的:<ArticleCount>2</ArticleCount>里的2,表明有2条数据,1条数据对应一个<iteam>标签
109行的:<FuncFlag>1</FuncFlag> 代表这个用户发过来的信息加星号。

还挺好玩吧?赶紧试试吧。







您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表