php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)

全屏阅读
  • 基本信息

怎么调用微信高级接口

微信高级接口和微信普通接口的区别

后台服务器可以调用微信的接口与微信用户进行讯息的通信,这样的行为就是在调用微信的接口,这些接口是基础接口,你不需要任何付费行为或者身份认证行为就可以调用。但是有一些高级接口,你的微信公众号必须达到一定的权限如通过微信认证才能调用自定义菜单、微信支付等高级功能。
不过微信公众帐号的测试号系统可以应用这些高级接口(微信支付等涉及交易的接口除外)。

微信高级接口的调用

微信高级接口的调用需要先调用一个token_access接口,只有先调用这个接口才能调用其它高级接口。
如下:连通高级接口示意图

调用token_access需要用到appID和appsecreset(在微信公众号平台开发(一)中已经讲述这两者的由来)

调用代码如下

<?php
$appid = "wxbad0b4x543aa0b5e";
$appsecret = "ed222a84da15cd24c4bdfa5d9adbabf2";
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
//下面是一个cURL会话过程,通过这个会话可以返回一段字符串{"access_token":"NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l-Se0I-WmOLLniAYLAwzhbYhXNjb"}
这就是我们要获得的Access Token了。在调用高级功能接口的时候就靠它。这个过程用的时候直接引用就好,不需要深究,这个cURL系统相关函数有点多而且复杂。

$ch = curl_init();//初始化
curl_setopt($ch, CURLOPT_URL, $url);//与url建立对话
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //进行配置
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); //进行配置
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//进行配置
$output = curl_exec($ch);//执行对话,获取接口数据Access Token
curl_close($ch);//关闭会话
$jsoninfo = json_decode($output, true);//解码接口数据,将json格式字符串转换成php变量或数组。默认是变量,加true后是数组。
$access_token = $jsoninfo["access_token"];

?>

调用微信高级接口

1)、调用自定义菜单功能

 //创建一个自定义菜单的json字符串
$jsonmenu = '{
  "button":[
  {
   "name":"关于我们",
   "sub_button":[
   {
    "type":"click",
    "name":"公司简介",
    "key":"公司简介"
   },
   {
    "type":"click",
    "name":"社会责任",
    "key":"社会责任"
   },
   {
    "type":"click",
    "name":"联系我们",
    "key":"联系我们"
   }]
  },
  {
   "name":"产品服务",
   "sub_button":[
   {
    "type":"click",
    "name":"微信平台",
    "key":"微信平台"
   },
   {
    "type":"click",
    "name":"微博应用",
    "key":"微博应用"
   },
   {
    "type":"click",
    "name":"手机网站",
    "key":"手机网站"
   }]
  },
  {
   "name":"技术支持",
   "sub_button":[
   {
    "type":"click",
    "name":"文档下载",
    "key":"文档下载"
   },
   {
    "type":"click",
    "name":"技术社区",
    "key":"技术社区"
   },
   {
    "type":"click",
    "name":"服务热线",
    "key":"服务热线"
   }]
  }]
 }';

 $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;//接口地址
$result = https_request($url, $jsonmenu);//与接口建立会话
var_dump($result);

function https_request($url,$data = null){
 $curl = curl_init();
 curl_setopt($curl, CURLOPT_URL, $url);
 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
 if (!empty($data)){
  curl_setopt($curl, CURLOPT_POST, 1);
  curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
 }
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 $output = curl_exec($curl);
 curl_close($curl);
 return $output;
}
//把这段代码加入到上面的调用Access Token接口的代码中就可以实现在微信公众号界面添加菜单的功能。

当我们为微信公众号添加菜单后怎么样设置点击菜单时会出现相应的效果呢?
这里涉及到另一种xml类型的数据传递:

<xml>
<ToUserName><![CDATA[gh_82479813ed64]]></ToUserName>
<FromUserName><![CDATA[ojpX_jig-gyi3_Q9fHXQ4rdHniQs]]></FromUserName>
<CreateTime>1392297442</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[CLICK]]></Event>
<EventKey><![CDATA[公司简介]]></EventKey>
</xml>
//上面是点击click菜单的数据传递类型,数据会发送给后台服务器,然后服务器做出响应。

菜单类型有多种,xml类型差别,详细情况可以在微信公众号平台上查看相应文档。

*这里要说明的是只要你有微信公众号的appID和appsecret,在任何服务器空间运行这段php代码都可以进入微信服务器调用相应功能,不一定非要在进行了token验证的服务器下运行。token验证是为了后台服务器进行判断数据来源是否是来自微信服务器,与调用微信服务器的高级接口并没有多大的关联。
php文件一定要在服务器运行才会产生效果。

其它高级接口的调用都同调用自定义菜单一样。

2)、调用客服接口

当微信用户主动发消息 给微信公众帐号的时候(包括发送信息、单击自定义菜单click事件、订阅事件、扫描二维码、支付成功事件)微信会把消息数据推送给开发者。开发者在一段时间内可以调用客服接口消息,通过post一个JSON数据包来发送消息给用户。

代码如下:

$access_token = "nFX6GFsspSLBKJLgMQ3kj1YM8_FchRE7vE2ZOIlmfiCOQntZKnBwuOen2GCBpFHBYS4QLGX9fGoVfA36tftME2sRiYsKPzgGQKU-ygU7x8cgy_1tlQ4n1mhSumwQEGy6PK6rdTdo8O8GROuGE3Hiag";
$openid = "o7Lp5t6n59DeX3U0C7Kric9qEx-Q";//微信用户都有一个openID

下图所示即为openID的获取方式。

$data = '{
 "touser":"'.$openid.'",
 "msgtype":"text",
 "text":
 {
   "content":"Hello World"
 }
}';//通过基础消息接口发送的数据是XML格式的,但是调用客服接口发送的数据是json数据格式,更易传输。
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$access_token;
$result = https_request($url,$data);
var_dump($result);

function https_request($url,$data)
{
 $curl = curl_init();
 curl_setopt($curl, CURLOPT_URL, $url);
 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
 curl_setopt($curl, CURLOPT_POST, 1);
 curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 $result = curl_exec($curl);
 if (curl_errno($curl)) {
  return 'Errno'.curl_error($curl);
 }
 curl_close($curl);
 return $result;
}

客服接口发送图文消息、音乐消息、视频消息具体格式请参看微信公众平台上的开发帮助文档。
客服接口可以和消息接口混合使用。

这里大家可能不明白既然可以直接通过被动响应消息的接口发送xml数据给用户,为什么还需要这样一个客服接口?可以这样理解,被动响应消息是一次性的只能回复一次相同的消息。如你向一个音乐平台输入一个歌星名称,通过被动响应方式发送的消息永远只会回复你一首相同的歌。但是通过客服接口方式可以每次回复不同的 歌曲,这涉及到MySQL数据库。

顶一下
(0)
100%
订阅 回复
踩一下
(0)
100%
» 郑重声明:本文由mpxq168发布,所有内容仅代表个人观点。版权归恒富网mpxq168共有,欢迎转载, 但未经作者同意必须保留此段声明,并给出文章连接,否则保留追究法律责任的权利! 如果本文侵犯了您的权益,请留言。

目前有 0 条留言 其中:访客:0 条, 博主:0 条

给我留言

您必须 [ 登录 ] 才能发表留言!