PHP菜鸟博客_共同学习分享PHP技术心得【PHP爱好者】
微信服务号通过客服接口主动给普通微信号推送消息
2015-11-2 菜鸟站长


     当用户主动发消息给公众号的时候(包括发送信息、点击自定义菜单、订阅事件、扫描二维码事件、支付成功事件、用户维权),微信将会把消息数据推送给开发者,开发者在一段时间内(目前修改为48小时)可以调用客服消息接口,通过POST一个JSON数据包来发送消息给普通用户,在48小时内不限制发送次数。此接口主要用于客服等有人工消息处理环节的功能,方便开发者为用户提供更加优质的服务。



官方说明地址:http://mp.weixin.qq.com/wiki/1/70a29afed17f56d537c833f89be979c9.html











  目前我已经测试48小时内普通微信号点击服务自定义菜单跳转 以及给服务号发送个消息 其他的自己测试下吧,服务号就可以给该普通微信号 发送文本 单多图文等。









代码:



step1.php



<?php

include("function.php");

define("APPID","wx3f839ee5ed734***");

define("APPSECRET","1c9f66fa8d394bd410a821a91c47b***");

//获取accesstoken

$access_token=getAccessToken(APPID,APPSECRET);



//客服发送消息接口

$url="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=$access_token";

$content="感谢您关注菜鸟博客@wlphp.com";

$json='{"touser":"ofRsxuGNUpSuCBQVEF6YmbQ2y7dg","msgtype":"text","text":{"content":"'.$content.'"}}';

$return=post_json($url,$json);



var_dump($return);

?>




















function.php



<?php



function getAccessToken($appId,$appSecret) {

    // access_token 应该全局存储与更新,以下代码以写入到文件中做示例

    $data = json_decode(file_get_contents("access_token.json"));

    if ($data->expire_time < time()) {

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

      //$res = json_decode(httpGet($url));   //改用file_get_contents 注意需要环境支持 谢谢

      $res = json_decode(file_get_contents($url));

      

      

      $access_token = $res->access_token;

      if ($access_token) {

        $data->expire_time = time() + 7000;

        $data->access_token = $access_token;

        $fp = fopen("access_token.json", "w");

        fwrite($fp, json_encode($data));

        fclose($fp);

      }

    } else {

      $access_token = $data->access_token;

    }

    return $access_token;

  }

 

 

 

     // 工具函数 //

     /* 使用curl来post一个json数据 */

     // CURLOPT_SSL_VERIFYPEER,CURLOPT_SSL_VERIFYHOST - 在做https中要用到

     // CURLOPT_RETURNTRANSFER - 不以文件流返回,带1

    

 function post_json($url,$json){

 $post_url = $url;

 $post_data =$json;

 $ch = curl_init();//初始化

 curl_setopt($ch, CURLOPT_TIMEOUT, '30');//超时时间

 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Keep-Alive: 300','Connection: keep-alive')) ;

 curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.4; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)');

 curl_setopt($ch, CURLOPT_POST,1);

 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

 curl_setopt($ch, CURLOPT_URL,$post_url);

 curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data);

 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  

 

 

 $contents = curl_exec($ch);

   

 if(curl_errno($ch)){}

 

 return  $contents;

   }







截图:



QQ截图20151102190718.png







11.png













还有就是使用json_encode组装数组数据,但是用过的人可能会发现content里的汉子都会被换成unicode字符,解决办法是网上找一个ch_json_encode()方法,可以完美解决!




/*

$content="感谢您关注菜鸟博客@wlphp.com";

$json='{"touser":"ofRsxuGNUpSuCBQVEF6YmbQ2y7dg","msgtype":"text","text":{"content":"'.$content.'"}}';

*/

$data="";

$data['touser']="ofRsxuGNUpSuCBQVEF6YmbQ2y7dg";

$data['msgtype']="text";

$data['text']['content']="感谢您关注菜鸟博客@@wlphp.com";

$json=ch_json_encode($data);   //如果是json_encode函数 中文会变成unicode字符     ch_json_encode  用这个函数可以解决

$return=post_json($url,$json);







22.png







ch_json_encode 函数:



 function ch_json_encode($data) {

   

   function ch_urlencode($data) {

       if (is_array($data) || is_object($data)) {

           foreach ($data as $k => $v) {

               if (is_scalar($v)) {

                   if (is_array($data)) {

                       $data[$k] = urlencode($v);

                   } else if (is_object($data)) {

                       $data->$k = urlencode($v);

                   }

               } else if (is_array($data)) {

                   $data[$k] = ch_urlencode($v); //递归调用该函数

               } else if (is_object($data)) {

                   $data->$k = ch_urlencode($v);

               }

           }

       }

       return $data;

   }  

   $ret = ch_urlencode($data);

   $ret = json_encode($ret);

   return urldecode($ret);  

   

 }






发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容