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 相关文章推荐
apache+mysql+php+ssl服务器之完全安装攻略
Sep 05 PHP
php中删除字符串中最先出现某个字符的实现代码
Feb 03 PHP
php sybase_fetch_array使用方法
Apr 15 PHP
PHP扩展模块memcached长连接使用方法分析
Dec 24 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
Oct 22 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
Dec 15 PHP
PHP引用的调用方法分析
Apr 25 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
Nov 05 PHP
php与c 实现按行读取文件实例代码
Jan 03 PHP
php str_getcsv把字符串解析为数组的实现方法
Apr 05 PHP
PHP生成加减算法方式的验证码实例
Mar 12 PHP
Laravel程序架构设计思路之使用动作类
Jun 07 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
详解Laravel设置多态关系模型别名的方式
2019/10/17 PHP
自己开发Dojo的建议框架
2008/09/24 Javascript
jquery photoFrame 图片边框美化显示插件
2010/06/28 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
Jquery获取元素的父容器对象示例代码
2014/02/10 Javascript
jQuery 和 CSS 的文本特效插件集锦
2014/12/12 Javascript
PHP实现的各种中文编码转换类分享
2015/01/23 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
2016/12/25 Javascript
Bootstrap 表单验证formValidation 实现远程验证功能
2017/05/17 Javascript
微信小程序返回多级页面的实现方法
2017/10/27 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
axios 实现post请求时把对象obj数据转为formdata
2019/10/31 Javascript
微信小程序关键字变色实现代码实例
2019/12/13 Javascript
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
Python按行读取文件的实现方法【小文件和大文件读取】
2016/09/19 Python
深入理解NumPy简明教程---数组2
2016/12/17 Python
Python 数据结构之堆栈实例代码
2017/01/22 Python
Python编程之event对象的用法实例分析
2017/03/23 Python
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
python解决字符串倒序输出的问题
2018/06/25 Python
Python函数中的可变长参数详解
2019/09/12 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
如何整合JQuery和Prototype
2014/01/31 面试题
秘书专业自荐信范文
2013/12/26 职场文书
大学生演讲稿范文
2014/01/11 职场文书
迟到检讨书400字
2014/01/13 职场文书
测试工程师程序员求职信范文
2014/02/20 职场文书
课外活动总结
2015/02/04 职场文书