PHP技术开发微信公众平台


Posted in PHP onJuly 22, 2015

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

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

普通的功能可以通过编辑模式来搞定。开发模式具有更多的功能。让我们来使用开发模式开发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个工作日才能成功)

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

PHP技术开发微信公众平台

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

PHP技术开发微信公众平台

PHP技术开发微信公众平台

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

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

PHP技术开发微信公众平台

PHP技术开发微信公众平台

PHP技术开发微信公众平台

打开后是如下的代码:

<?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技术开发微信公众平台

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

PHP技术开发微信公众平台

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

PHP技术开发微信公众平台

PHP技术开发微信公众平台

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

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

PHP 相关文章推荐
eWebEditor v3.8 商业完整版 (PHP)
Dec 06 PHP
php 获取远程网页内容的函数
Sep 08 PHP
Ha0k 0.3 PHP 网页木马修改版
Oct 11 PHP
使用VisualStudio开发php的图文设置方法
Aug 21 PHP
用PHP读取超大文件的实例代码
Apr 01 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
Jun 21 PHP
PHP生成树的方法
Jul 28 PHP
Smarty模板引擎缓存机制详解
May 23 PHP
php 读写json文件及修改json的方法
Mar 07 PHP
PHP实现Redis单据锁以及防止并发重复写入
Apr 10 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
Oct 25 PHP
php xhprof使用实例详解
Apr 15 PHP
PHP使用array_merge重新排列数组下标的方法
Jul 22 #PHP
PHP结合jQuery实现找回密码
Jul 22 #PHP
使用PHP生成二维码的方法汇总
Jul 22 #PHP
使用PHP编写发红包程序
Jul 22 #PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 #PHP
php 把数字转换成汉字的代码
Jul 21 #PHP
通过Email发送PHP错误的方法
Jul 20 #PHP
You might like
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
php中的观察者模式简单实例
2015/01/20 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
PHP Filter过滤器全面解析
2016/08/09 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
大家未必知道的Js技巧收藏
2008/04/07 Javascript
Javascript 布尔型分析
2008/12/22 Javascript
jquery中ajax学习笔记4
2011/10/16 Javascript
js用typeof方法判断undefined类型
2014/07/15 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
2015/01/18 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
2016/11/16 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
mustache.js实现首页元件动态渲染的示例代码
2020/12/28 Javascript
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
自己使用总结Python程序代码片段
2015/06/02 Python
一份python入门应该看的学习资料
2018/04/11 Python
python实现QQ邮箱/163邮箱的邮件发送
2019/01/22 Python
python协程之动态添加任务的方法
2019/02/19 Python
Python创建数字列表的示例
2019/11/28 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
2020/02/17 Python
韩国女装NO.1网店:STYLENANDA
2016/09/16 全球购物
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
路政管理专业推荐信
2013/11/11 职场文书
医学生自我评价
2014/01/27 职场文书
事业单位分类改革实施方案
2014/03/21 职场文书
球队口号
2014/06/18 职场文书
主题党日活动总结
2014/07/08 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书