使用前提条件:拥有一个公网上的HTTP服务器主机空间,具有创建目录、上传文件等权限。推荐新浪的SAE。http://sae.sina.com.cn/

首先请注册微信公众平台的账号,注册地址:http://mp.weixin.qq.com/

本教程主要讲解接口的开发流程。

事例代码也跑不通。我研究了一番,终于搞定。方法如下:

一、写好接口程序

在你的服务器上上传好一个接口程序文件,如http://www.yourdomain.com/weixin.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')和消息内容来回复用户不同的内容。

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

封装weixin.class.php

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

我们就考虑在这个基础上做一次封装,weixin.class.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}

%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){
       //这里是你记录调试信息的地方  请自行完善   以便中间调试
    }

}

?>

调用weixin.class.php

把你的微信公众平台主接口文件(如前面定义的http://www.yourdomain.com/weixin.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);

?>

查询代码

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

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;

}

?>

来源:http://www.weste.net/2013/4-27/90846.html

微信公众平台api下载php,微信公众平台消息接口PHP版相关推荐

  1. 微信公众平台消息接口PHP版

    使用前提条件:拥有一个公网上的HTTP服务器主机空间,具有创建目录.上传文件等权限.推荐新浪的SAE.http://sae.sina.com.cn/ 首先请注册微信公众平台的账号,注册地址:http: ...

  2. 微信公众平台消息接口-java-jsp版

    微信公众平台现在推出自动回复消息接口,但是由于是接口内容用的是PHP语言写的,很多地方操作起来让本人这个对java比较熟悉的小伙很别扭,所以仿照PHP的接口代码做了一套jsp语言编写的接口. 首先先把 ...

  3. android测试版微信7.0下载地址,微信7.0.7下载地址-微信 7.0.7安卓内测版下载-西西软件下载...

    微信 7.0.7安卓内测版是微信官方最新推出的版本,目前安卓还在内测阶段,这次更新的小游戏非常火爆,跳一跳小游戏更是火爆朋友圈.安卓用户可以通过下载这里的内测版体验全新的微信,看看自己能跳多少分吧. ...

  4. 微信云linux sdk下载,02.微信SDK下载及安装

    ## **下载并载入SDK到项目中** ## **方法`A`**使用[Composer](https://getcomposer.org/)下载安装,`SDK`符合`PSR`标准\*\*(推荐)\*\ ...

  5. Java中的微信支付:API V3对微信服务器响应进行签名验证3

    前言 牢记一句话:公钥加密,私钥解密:私钥加签,公钥验签. 微信支付V3版本前两篇分别讲了如何对请求做签名和如何获取并刷新微信平台公钥,本篇将继续展开如何对微信支付响应结果的验签. 2. 为什么要对响 ...

  6. 微信小程序api调起微信提供的功能-网络、媒体、文件、数据存储、位置、设备、界面、开发接口

    微信小程序-API 框架提供丰富的微信原生API,可以方便的调起微信提供的能力,如获取用户信息,本地存储,支付功能等. 说明: wx.on 开头的 API 是监听某个事件发生的API接口,接受一个 C ...

  7. 微信开发php插件下载图片,微信开发之微信jsapi选择图片,上传图片,预览和下载图片方法...

    参数描述 appId公众号的唯一标识 应用id timestamp生成签名的时间戳 nonceStr生成签名的随机串 signature签名 上述表格中的四个参数是初始化调用微信jsapi的凭证,咱们 ...

  8. asp微信点餐系统下载,asp微信扫码点餐支付,asp源码开发的mdb数据库

    上周接了一个朋友的私活,用asp开发一套点餐系统,因为他现在的服务器就是支持asp的,点餐系统本身是不大的,但是他的要求很高: 1.要能点套餐,先扫码确定桌号,然后选套餐和人数,下单支付 2.扫码确定 ...

  9. php查询google pr值接口api介绍,最新 google pr值查询 接口 php版 示例

    ?php/*php获取网站谷歌pr值完整示例*/function app_hash_url($url){$seed="Mining PageRank is AGAINST GOOGLE'S ...

最新文章

  1. 文件系统管理 之 Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍...
  2. 新年新气象,用新年的喜庆来迎接的生活
  3. 实际场景中,云原生存储面临的 7 个挑战
  4. 《AutoCAD全套园林图纸绘制自学手册》一第1章 园林设计基本概念1.1 概述
  5. SQL Server 2016的新功能–临时数据表
  6. SharedObject实例.
  7. 自定义checkbox大小(注:用CSS的ZOOM属性 )
  8. 李炎恢老师的php源码以及附带一个php手册
  9. Swift5.2 Extension(工具类)
  10. 最速下降法解析(理解笔记)
  11. Java web前端——HTML常用标签
  12. KEIL MDK平台 S3C2440 编译链接、烧写调试
  13. 利用计算机对信息加工的步骤,计算机是通过______的存储程序来______完成数据的加工处理。...
  14. 小程序 js把本地或取得临时的视频或者图片路径封装成file文件流
  15. 拒绝无脑跳转“下载某度APP“!
  16. Method findById should have no parameters
  17. Angular Material 学习笔记 Chips
  18. 自考生三级跳成博士生 从英语零分到专业讲师
  19. 嵌入式应用市场四大热点及趋势
  20. Ubuntu-12.04 OpenStack (Folsom)安装和部署手册

热门文章

  1. python支付宝自动收能量_叫你蚂蚁森林如何自动收取能量(Python)
  2. XR Interaction Toolkit教程⭐一、简介、安装和基本配置
  3. insmod: ERROR: could not insert module: Invalid module format
  4. 联发科的芯片出货量超越了高通,但销售额只有后者一半
  5. 24 分钟让 AI 跑起飞车类游戏
  6. 小虎电商浏览器:知虾数据分析软件用处有哪些?
  7. 校运动会mysql索引_(定稿)校运动会数据库设计(完整版)
  8. php微信 消息推送 配置,模板消息通知配置
  9. 戴琼海院士:5年后大模型将成为AI的操作系统!
  10. Window10系统下联想笔记本进入BIOS界面方法