这篇文章主要介绍了PHP对接微信公众平台消息接口开发流程,如何使用PHP版接口操作公众平台消息,需要的朋友可以参考下

一、写好接口程序

在你的服务器上上传好一个接口程序文件内容如下:

代码如下:<?php

define("TOKEN", "weixin");//自己定义的token 就是个通信的私钥

$wechatObj = new wechatCallbackapiTest();

$wechatObj->valid();

//$wechatObj->responseMsg();

class wechatCallbackapiTest

{

public function valid()

{

$echoStr = $_GET["echostr"];

if($this->checkSignature()){

echo $echoStr;

exit;

}

}

public function responseMsg()

{

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

if (!empty($postStr)){

$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

$fromUsername = $postObj->FromUserName;

$toUsername = $postObj->ToUserName;

$keyword = trim($postObj->Content);

$time = time();

$textTpl = "

%s

0

";

if(!empty( $keyword ))

{

$msgType = "text";

$contentStr = '你好啊,屌丝';

$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);

echo $resultStr;

}else{

echo '咋不说哈呢';

}

}else {

echo '咋不说哈呢';

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和Token(url填上面的http://www.yourdomain.com/weixin.php,token必须跟上面程序里面定义的Token一致)

三、验证接口

用自己的个人微信关注下你的公众账号,给这个账号发一条消息过去,收到原样的消息返回,即验证成功了。

四、开始自定义回复

注释掉$wechatObj->valid(); 这行,同时去掉//$wechatObj->responseMsg();这行的注释。

你可以修改responseMsg函数里面的代码,根据用户的消息类型('text','image','location')和消息内容来回复用户不同的内容。

消息接口就可以使用了,发个消息试试看吧?

1.封装weixin.class.php

由于微信公众平台的通信使用的是特定格式的XML数据,每次接受和回复都要去做一大堆的数据处理。

我们就考虑在这个基础上做一次封装,weixin.class.php,代码如下:

代码如下:<?php

class Weixin

{

public $token = '';//token

public $debug = false;//是否debug的状态标示,方便我们在调试的时候记录一些中间数据

public $setFlag = false;

public $msgtype = 'text'; //('text','image','location')

public $msg = array();

public function __construct($token,$debug)

{

$this->token = $token;

$this->debug = $debug;

}

//获得用户发过来的消息(消息内容和消息类型 )

public function getMsg()

{

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

if ($this->debug) {

$this->write_log($postStr);

}

if (!empty($postStr)) {

$this->msg = (array)simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

$this->msgtype = strtolower($this->msg['MsgType']);

}

}

//回复文本消息

public function makeText($text='')

{

$CreateTime = time();

$FuncFlag = $this->setFlag ? 1 : 0;

$textTpl = "

msg['FromUserName']}]]>

msg['ToUserName']}]]>

{$CreateTime}

1

]>

%s

";

return sprintf($textTpl,$text,$FuncFlag);

}

//根据数组参数回复图文消息

public function makeNews($newsData=array())

{

$CreateTime = time();

$FuncFlag = $this->setFlag ? 1 : 0;

$newTplHeader = "

msg['FromUserName']}]]>

msg['ToUserName']}]]>

{$CreateTime}

%s";

$newTplItem = "

";

$newTplFoot = "

%s

";

$Content = '';

$itemsCount = count($newsData['items']);

$itemsCount = $itemsCount < 10 ? $itemsCount : 10;//微信公众平台图文回复的消息一次最多10条

if ($itemsCount) {

foreach ($newsData['items'] as $key => $item) {

if ($key<=9) {

$Content .= sprintf($newTplItem,$item['title'],$item['description'],$item['picurl'],$item['url']);

}

}

}

$header = sprintf($newTplHeader,$newsData['content'],$itemsCount);

$footer = sprintf($newTplFoot,$FuncFlag);

return $header . $Content . $footer;

}

public function reply($data)

{

if ($this->debug) {

$this->write_log($data);

}

echo $data;

}

public function valid()

{

if ($this->checkSignature()) {

if( $_SERVER['REQUEST_METHOD']=='GET' )

{

echo $_GET['echostr'];

exit;

}

}else{

write_log('认证失败');

exit;

}

}

private function checkSignature()

{

$signature = $_GET["signature"];

$timestamp = $_GET["timestamp"];

$nonce = $_GET["nonce"];

$tmpArr = array($this->token, $timestamp, $nonce);

sort($tmpArr);

$tmpStr = implode( $tmpArr );

$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){

return true;

}else{

return false;

}

}

private function write_log($log){

//这里是你记录调试信息的地方 请自行完善 以便中间调试

}

}

?>

2.调用weixin.class.php

把你的微信公众平台主接口文件中,修改代码为:

代码如下:<?php

include_once('weixin.class.php');//引用刚定义的微信消息处理类

define("TOKEN", "mmhelper");

define('DEBUG', true);

$weixin = new Weixin(TOKEN,DEBUG);//实例化

$weixin->getMsg();

$type = $weixin->msgtype;//消息类型

$username = $weixin->msg['FromUserName'];//哪个用户给你发的消息,这个$username是微信加密之后的,但是每个用户都是一一对应的

if ($type==='text') {

if ($weixin->msg['Content']=='Hello2BizUser') {//微信用户第一次关注你的账号的时候,你的公众账号就会受到一条内容为'Hello2BizUser'的消息

$reply = $weixin->makeText('欢迎你关注哦,屌丝');

}else{//这里就是用户输入了文本信息

$keyword = $weixin->msg['Content']; //用户的文本消息内容

include_once("chaxun.php");//文本消息 调用查询程序

$chaxun= new chaxun(DEBUG,$keyword,$username);

$results['items'] =$chaxun->search();//查询的代码

$reply = $weixin->makeNews($results);

}

}elseif ($type==='location') {

//用户发送的是位置信息 稍后的文章中会处理

}elseif ($type==='image') {

//用户发送的是图片 稍后的文章中会处理

}elseif ($type==='voice') {

//用户发送的是声音 稍后的文章中会处理

}

$weixin->reply($reply);

?>

3.查询代码

还需要将数据库里面的查询结果格式化为特定的形式

代码如下:<?php

public function search(){

$record=array(); //定义返回结果的数组

$list = $this->search($this->keyword);//普通的根据关键词查询数据库的操作 代码就不用分享了

if(is_array($list)&&!empty($list)){

foreach($list as $msg){

$record[]=array(//以下代码,将数据库中查询返回的数组格式化为微信返回消息能接收的数组形式,即title、description、picurl、url 详见微信官方的文档描述

'title' =>$msg['title'],

'description' =>$msg['discription'],

'picurl' => $msg['pic_url'],

'url' =>$msg['url']

);

}

}

return $record;

}

?>

php微信公众号怎么开发_PHP对接微信公众平台消息接口开发流程详解及实例相关推荐

  1. php网站怎么对接微信群,PHP对接微信公众平台消息接口开发流程教程

    PHP(外文名:PHP: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使 ...

  2. php对接微信提醒,PHP对接微信公众平台消息接口开发流程教程

    PHP对接微信公众平台消息接口开发流程教程 发布于 2015-02-15 08:54:13 | 157 次阅读 | 评论: 1 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hyperte ...

  3. 微信公众平台消息接口开发(4)天气预报

    一.请求数据 首先需要能有取得天气数据的接口,这样的接口网上有很多.比如google, yahoo,天气网都提供天气接口 方倍工作室的API已经能提供全国各地的天气预报,使用方倍的API无需再建立城市 ...

  4. 微信公众平台消息接口开发(2)-封装weixin.class.php

    微信公众平台消息接口开发(2)-封装weixin.class.php 一.封装weixin.class.php 由于微信公众平台的通信使用的是特定格式的XML数据,每次接受和回复都要去做一大堆的数据处 ...

  5. 微信公众平台消息接口开发(34)微信墙之表白墙/婚礼墙/晚会墙/会议墙/晒单墙/照片墙/历史墙...

    微信公众平台开发模式 微信 公众平台 消息接口 开发模式 企业微信公众平台 微信墙 婚礼墙/晚会墙/会议墙/晒单墙/照片墙/历史墙 历史上的今天 作者:方倍工作室   原文: http://www.c ...

  6. 微信公众平台消息接口开发(1)

    原文链接 现在微信很热,微信公众平台的应用也很热,其实微信公众平台消息接口开发并不难,只要有接口调用就OK了. 要开发微信公众平台上的应用,得准备什么呢? 至少要有一个公众账号.服务器.域名这三样东西 ...

  7. 微信公众平台消息接口开发(34)微信墙之表白墙/婚礼墙/晚会墙/会议墙/晒单墙/照片墙/历史墙

    微信公众平台开发模式 微信 公众平台 消息接口 开发模式 企业微信公众平台 微信墙 婚礼墙/晚会墙/会议墙/晒单墙/照片墙/历史墙 历史上的今天 作者:方倍工作室   原文: http://www.c ...

  8. python 微信公众号 语音推送_微信公众平台消息接口开发(40)语音识别

    微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别 微信公众平台开发 语音识别 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/archive/2 ...

  9. 微信公众平台消息接口开发(3)中英翻译

    微信公众平台开发模式 微信 平台 消息 接口 英语翻译 互译   作者:http://www.cnblogs.com/txw1958/ 标题http://www.cnblogs.com/txw1958 ...

最新文章

  1. Android学习路线
  2. c++ gets()、scanf() 、getline()、cin读取字符、字符串
  3. mybatis 思维导图,让 mybatis 不再难懂(二)
  4. 工业4.0技术路线图 - OPC UA
  5. Gradle属性(四)
  6. 基于java的九宫格求解程序。以荷兰数学家设计的世界最难九宫格为例。
  7. c#中(,||)与(,|)的区别和应用
  8. ASP.NET弹出对话框的几种基本方法
  9. php分销根据上级id获取上级姓名,无限级分销系统查自己上级、下级之多叉树实现关系速查...
  10. Java MD5加密工具包
  11. 用python爬取链家二手房楼盘
  12. 空间点到直线的距离c语言,空间两直线间距离公式(文档篇).doc
  13. Oracle学习III —— Oracle客户端工具
  14. 解决Mac电脑无法读写ntfs硬盘分区的方法以及磁盘读写的简单方法
  15. 输入成绩等级c语言,C语言实现学生成绩等级划分的方法实例
  16. 转:GRE_那些不讨人爱的4字母单词
  17. 一阶高通滤波+二阶Mahony滤波的四元数姿态解算
  18. 论霸道,看大秦帝国有感
  19. 压缩软件 WinRAR 去广告
  20. Ultra-Fast Mathematician

热门文章

  1. 不变初心数 (15 分)
  2. dede常用标签(随时更新)
  3. 中兴echat_公网对讲机都有哪些平台?
  4. 细菌(disease)解题报告 - 搜索与回朔
  5. PAT --- 1072.开学寄语 (20 分)
  6. SpringBoot实现QQ邮箱发送功能
  7. 【深度学习】参数量、模型大小、显存
  8. vue项目中/deep/的用法-vue-cli中没法覆盖样式解决方法
  9. 快速上手云原生安全平台 NeuVector
  10. 总结常用损失函数的基本形式、原理及特点