PHP对接微信公众平台消息接口开发流程教程

发布于 2015-02-15 08:54:13 | 157 次阅读 | 评论: 1 | 来源: 网友投递

PHP开源脚本语言PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域。PHP的文件后缀名为php。

本文为大家讲解的是PHP对接微信公众平台消息接口开发流程教程,感兴趣的同学参考下.

一、写好接口程序

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

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

1.封装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}

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

把你的微信公众平台主接口文件(如前面定义的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);

?>

3.查询代码

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

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实现微信公众平台音乐点播示例

php实现微信公众平台账号自定义菜单类

PHP版微信公众平台红包API

基于php的微信公众平台开发入门实例

使用PHP进行微信公众平台开发的示例

php实现微信公众平台账号自定义菜单类

微信公众平台开发接口PHP SDK完整版

php实现基于微信公众平台开发SDK(demo)扩展的方法

php微信公众平台开发类实例讲解

php微信公众平台开发之获取用户基本信息

php实现微信公众号主动推送消息

php对接微信提醒,PHP对接微信公众平台消息接口开发流程教程相关推荐

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

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

  2. 微信平台接口php实现的_PHP对接微信公众平台消息接口开发流程教程

    一.写好接口程序 在你的服务器上上传好一个接口程序文件,如http://www.yourdomain.com/weixin.php  内容如下: 复制代码 代码如下:<?php define(& ...

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

    这篇文章主要介绍了PHP对接微信公众平台消息接口开发流程,如何使用PHP版接口操作公众平台消息,需要的朋友可以参考下 一.写好接口程序 在你的服务器上上传好一个接口程序文件内容如下: 代码如下:< ...

  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. 微信公众平台消息接口开发(4)天气预报

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

  9. 微信公众平台消息接口开发(13)多语种互译

    微信公众平台消息接口 微信公众平台API 微信开发模式 多语种翻译 多语言互译 Microsoft Translator 方倍工作室 Paraphrase API 10 out of 11 rated ...

最新文章

  1. 损坏防浪涌电插排内部电路
  2. RASPBERRY 端口(GPIO)基本测试
  3. 2021春季学期-创新设计与实践-Lesson2
  4. 67.数据库系统的三级模式
  5. OS_FLAG.C(3)
  6. 干货!一文看Doris在作业帮实时数仓中的应用实践
  7. DDL 操作数据表 查询表
  8. 语法分析—自上而下分析
  9. UE4之设置打包程序分辨率
  10. python重定向作用_Python重定向不起作用
  11. 常见数据库url和driver
  12. feign三:覆写feign的默认配置及feign的日志
  13. Mybatis-Plus 自定义 id 生成器
  14. 天线波束形成matlab,数字多波束形成的MATLAB仿真
  15. unity android gyro,Unity3D手机陀螺仪的使用方法
  16. FTP成功连接服务器后,出现乱码问题
  17. 开发右脑,数字桩记忆扑克牌训练教程
  18. 毕业设计 基于单片机的智能盲人头盔系统 - 导盲杖 stm32
  19. 我的/etc/motd 卡哇伊内~
  20. python pls_【建模应用】PLS偏最小二乘回归原理与应用

热门文章

  1. Asp.Net常用文件【牛腩】
  2. IIS 请求报503
  3. Android手机设备唯一标识符
  4. 让味蕾动起来的蛋糕甜点
  5. Qt运行程序弹出异常窗口解释
  6. 人工智能 漆桂林_2020年CCF专委活动计划(预通过)
  7. 解决Android Studio等开发软件出现更新TKK失败的两种方案
  8. c语言中swap表示什么意思,swap是什么意思_单片机里的SWAP A是什么意思啊?
  9. Python量化交易平台开发教程系列4-事件驱动引擎原理和使用
  10. android仿钉钉日程日历,Flutter仿钉钉考勤日历的示例代码