上一节课,我给大家分享了微信API接入以及事件推送的回复,这是微信开发的第二节课,重点给说一说单图文回复,多图文回复,access_token,微信SDK。

公众号消息回复很多种形式,常见的形式有,文本,图片,视频,音频,图文等,常用的也就是文本,图文。文本回复上一节已经说过了,图文回复分为两种,单图文,多图文两种。其实实现的原理的一样的,只要会单图文,多图文自然也就会了。

单图文代码实现

<?php

/**

以下的代码是一个方法,接着上一节中的IndexAction.class.php类的,把以下的方法复制到上一个类中

**/

public  function  reposeNews(){

//获取微信用户发的信息

$object = $GLOBALS['HTPP_RAW_POST_DATA'];

//获取的数据是xml格式的,需要转换为对象的型的,这里使用simplexml_load_string()函数

$objNews = simplexml_load_string($object);

/**

微信图文回复的固定模板

<xml><ToUserName>< ![CDATA[toUser] ]></ToUserName><FromUserName>< ![CDATA[fromUser] ]></FromUserName><CreateTime>12345678</CreateTime><MsgType>< ![CDATA[news] ]></MsgType><ArticleCount>2</ArticleCount><Articles><item><Title>< ![CDATA[title1] ]></Title> <Description>< ![CDATA[description1] ]></Description><PicUrl>< ![CDATA[picurl] ]></PicUrl><Url>< ![CDATA[url] ]></Url></item><item><Title>< ![CDATA[title] ]></Title><Description>< ![CDATA[description] ]></Description><PicUrl>< ![CDATA[picurl] ]></PicUrl><Url>< ![CDATA[url] ]></Url></item></Articles></xml>

**/

//设置数据,正常来说这里的数据都是来自数据库的数据调取

$arr = array(

array("title"=>"网红星闻快手","description"=>"我们不生产八卦,我们只是八卦的搬运工。","picurl"=>"http://www.souhong.wang/img/logo2.png","url"=>"http://www.baidu.com")

);

//发送数据

$toUser = $objNews->FromUserName;

$fromUser = $objNews->ToUserName;

$time  =  time();

//分析模板可以得出,上半部分是固定的,下半部分数据的遍历,由此我们可以把这个模板进行分拆,分拆成三块,中间那个块就是图文

$template = "<xml><ToUserName>< ![CDATA[%s] ]></ToUserName><FromUserName>< ![CDATA[%s] ]></FromUserName><CreateTime>%s</CreateTime><MsgType>< ![CDATA[news] ]></MsgType><ArticleCount>.count($arr).</ArticleCount><Articles>";

foreach($arr as $key=>$v){

       $template .= "<item><Title>< ![CDATA[".$v['title']."] ]></Title> <Description>< ![CDATA[".$v['description']."] ]></Description><PicUrl>< ![CDATA[".$v['picurl']."] ]></PicUrl><Url>< ![CDAT".$v['url']."]></Url></item>";

}

       $template .= "</Articles></xml>";

if($objNews->MsgType == "text" && $objNews->content == "tuwen1"){

$info = sprintf($template,$toUser,$fromUser,$time);

echo $info;

}

}

以上代码就完成了单图文的回复了,所谓的多图文也就是多几条数据,默认第一条数据是大图,数据不能超过8条,超过8条则无响应,上面的关键字可以用swich自己设置,这样就可以多个选择了。

除了事件推送,文本,图文之外,微信公众平台还有非常多的功能,要想调用这些强大的功能就离不开一个东西,那就是access_token,这个在微信文档上叫票据,我更喜欢叫它令牌,就像古代皇帝给钦差大臣的令牌一样,持有令牌可以干好多事。要想使用access_token就先得获取access_token,获取令牌需要两个数据,一个appid,一个appsecret,这个两个参数。这两个参数上微信公众平台上面开发者模式下,已经提供了这两个数据。微信文档提供了API调用路径:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET,看到这好多同学应该知道怎么去做了,但对于很多php新手来说,可能就不知道怎么做了,这里就要用到php一个强大的工具curl,curl的具体说明这里就不详细说,看代码:

<?php

$appid = "wx37f6709f8475030assdf";//这里去自己的公众号里去取

$appsecret =  "Q1mInjfJukdh8ydITbezRQAYsSTbm4ytGFGhj4S9nvP";//这里去自己的公众号里去取

$url  = " https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;

//使用curl进行请求,第一步初始化

$ch = curl_init();

//设置参数

curl_setopt($ch , CURLOPT_URL , $url);

curl_setopt($ch , CURLRETURNTRANSFER, 1);

//执行

$token = curl_exec($ch);

curl_close();

//微信返回的数据格式是json的,所以这里需要用的php函数json_decode

$token = json_decode($token,true);//这里记得加参数tru,否则返回的就是一个对象。

$token = $token['access_token'];

到这里就拿到了票据access_token,拿到access_token需要注意两点,一点是token的唯一性,时效性,全局只有一个token,有效时长是2个小时,一天可以请求2000个token,这里对于我们一般的开发者足够了。

这里我们就用token获取微信服务器地址(主要是为了安全角度考虑),代码如下:

$url  = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=".$token;

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,$url);

curl_setopt($ch,RETURNTRANSFER,1);

$ip = curl_exec();

curl_close();

$ip = json_decode($ip,true);

var_dump($ip['ip_list']); //全部的微信服务器ip地址

微信SDK,好多同学可能不知道SDK是什么意思?SDK是软件开发工具包的意思,这个概念可能比较抽象,大家这里可以把SDK理解为封装了很多方法的包,把我们大家经常用的一些方法封装起来,这样就可以使我们开发起来更加的方便快捷,在TP框架中如何添加SDK呢?刚才我也说了,SDK就是封装了很多的方法,所以我们在TP框架定义一个模型,把我们微信开发常用的一些固定化的东西放到模型中去,在我们的控制器中我们就可以直接实例化使用就可以了。示例代码如下:

<?php

class  IndexModel extends Model{

public function resposeMsg($object){

//固定的方法写入就可以了

}

}

以上就是这次的基本内容了,补充一点,在微信开发中如何调用第三方的API,例如查询天气,关于查询天气的API,我比较习惯去百度的APIstore或者聚合数据去查找,我这里演示用的是百度的天气查询的一个系统。

$city = "北京";

$city = urlencode($city);

$url = "http://v.juhe.cn/weather/index?format=2&cityname=".$city."&key=您申请的KEY";

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,$url);

curl_setopt($ch,RETURNTRANSFER,1);

$tianqi = curl_exec();

curl_close();

$tianqi = json_decode($tianqi,true);

把天气的数据直接返回过用户,微信中调用第三方天气API就是这么简单。

接下来的微信开发我会讲解微信开发中的自定义菜单功能。

微信公众平台开发,图文回复、access_token生成调用、以及微信SDK的实现(2)的更多相关文章

  1. 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单

    我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...

  2. 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息

    在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同). 公众号可通过本接口来根据O ...

  3. 微信公众平台开发——为何不能在网页调用微信jsapi?

    说到这问题,相信大部分程序员老手都会轻蔑一笑,当然是跨域导致的啊!但是为了一些小白,我觉得还是很有必要再说一次的. 首先介绍什么是跨域,由于浏览器的同源策略,出于防范跨站脚本的攻击,禁止客户端脚本( ...

  4. Java微信公众平台开发(四)--回复消息的分类及实体的创建

    转自:http://www.cuiyongzhi.com/post/42.html 前面有说道对接收到微信服务器消息后对消息的分类,当时主要分为普通消息和事件消息,这里我们要讲述的是我们在给用户回复的 ...

  5. 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token

    一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...

  6. 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备

    相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结.所以下面给大家分享一下我的经验: 微信公众号是什么? 官网的介绍:再小的个 ...

  7. 第四篇 :微信公众平台开发实战Java版之完成消息接受与相应以及消息的处理

    温馨提示: 这篇文章是依赖前几篇的文章的. 第一篇:微信公众平台开发实战之了解微信公众平台基础知识以及资料准备 第二篇 :微信公众平台开发实战之开启开发者模式,接入微信公众平台开发 第三篇 :微信公众 ...

  8. 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装

    微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...

  9. 微信公众平台开发教程--方培工作室,PHP语言版本

    准备工作 微信公众平台的注册 介绍如何注册一个微信公众账号. 入门教程 微信公众平台开发入门教程 内容:1.申请SAE作为服务器; 2.启用开发模式; 3.微信公众平台PHP SDK; 4.接收发送消 ...

  10. 第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容

    第一部分:微信JS-SDK介绍 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统 ...

随机推荐

  1. AM335x(TQ335x)学习笔记——USB驱动移植

    对于AM335x来讲,TI维护的USB驱动已经非常完善了,本文称之为移植,实际上仅仅是配置内核选项使能USB HOST/OTG功能.废话少说,直接动手开启AM335x的USB驱动配置项. Step1. ...

  2. Linux显示目前与过去登入系统的用户相关信息

    Linux显示目前与过去登入系统的用户相关信息 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ last youhaido pts/0 :0 Sat Jan 2 ...

  3. 一篇关于PHP性能的文章

    一篇关于PHP性能的文章 昨晚清理浏览器收藏夹网址时,发现了http://www.phpbench.com/,想起来应该是2015年发现的一个比较性能的文章,我就点进去看了看,发现还是全英文耶,刚好最 ...

  4. 说出JQuery中常见的几种函数以及他们的含义是什么?

    jQuery中常见的函数如下:  (1)get()取得所有匹配的DOM元素集合. (2)get(index)取得其中一个匹配的元素.index表示取得第几个匹配的元素. (3)append(conte ...

  5. [TJOI2015]旅游

    树链剖分+线段树 线段树维护max,min,左往右的最大差,右往左的最大差 求LCA时一定要注意方向 # include <bits/stdc++.h> # define RG regis ...

  6. [BZOJ1112] [POI2008] 砖块Klo (treap)

    Description N柱砖,希望有连续K柱的高度是一样的. 你可以选择以下两个动作 1:从某柱砖的顶端拿一块砖出来,丢掉不要了. 2:从仓库中拿出一块砖,放到另一柱.仓库无限大. 现在希望用最小次 ...

  7. hadoop第一课

    Hadoop基本概念 在当下的IT领域,大数据很"热",实现大数据场 景的Hadoop系列产品更"热". Hadoop是一个开源的分布式系统基础架构,由 Apa ...

  8. VHDL和verilog应该先学哪个?

    网上有太多的VHDL和verilog比较的文章,基本上说的都是VHDL和verilog之间可以实现同一级别的描述,包括仿真级.寄存器传输级.电路级,所以可以认为两者是等同级别的语言.很多时候会了其中一 ...

  9. 什么是tcp/ip

    在了解Tcp /Ip之前.我们需要了解几个名词的含义: 什么是IP? IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层:相反,IP层也 ...

  10. 在windows8.1下安装ubuntu16.04

    (一)首先来简要了解一些linux的概念! 1.发行版本和内核版本的区别与联系:linux发行版本是"内核版本+一系列挂载软件"的集合体,光是一个内核版本是无法当做操作系统运行的. ...