菜单

接受事件订阅后复原响应信息

2019年1月31日 - 金沙编程资讯

//当微信用户发送imooc,公众账号回复‘imooc is very good’
/*<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>*/
/*if(strtolower($postObj->MsgType) == ‘text’){
switch( trim($postObj->Content) ){
case 1:
$content = ‘您输入的数字是1’;
break;
case 2:
$content = ‘您输入的数字是2’;
break;
case 3:
$content = ‘您输入的数字是3’;
break;
case 4:
$content = “<a href=’;”;
break;
case ‘英文’:
$content = ‘imooc is ok’;
break;

代码陈设环境是用了天涯论坛sae,thinkphp框架基础上已毕效益。

起先接触的时候写的一对,有点乱…也没去整理…
ps–目前都不想做事了,种种烦,午饭也没吃,就是想发挥一下本人过的不得了。–请忽略个人心态往下看。

                        $msgType  = ‘text’;

public function index(){
//得到参数 signature nonce token timestamp echostr
$nonce = $_GET[‘nonce’];
$token = ‘imooc’;
$timestamp = $_GET[‘timestamp’];
$echostr = $_GET[‘echostr’];
$signature = $_GET[‘signature’];
//形成数组,然后按字典序排序
$array = array();
$array = array($nonce, $timestamp, $token);
sort($array);
//拼接成字符串,sha1加密 ,然后与signature举办校验
$str = sha1( implode( $array ) );
if( $str == $signature && $echostr ){
//首次对接weixin api接口的时候
echo $echostr;
exit;
}else{
$this->reponseMsg();
}
}
// 接收事件推送并回复
public function reponseMsg(){
//1.取获得微信推送过来post数据(xml格式)
$postArr = $GLOBALS[‘HTTP_RAW_POST_DATA’];
//2.甩卖音信类型,并设置回复类型和情节
/*<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
</xml>*/
$postObj = simplexml_load_string( $postArr );
//$postObj->ToUserName = ”;
//$postObj->FromUserName = ”;
//$postObj->CreateTime = ”;
//$postObj->MsgType = ”;
//$postObj->Event = ”;
// gh_e79a177814ed
//判断该数据包是还是不是是订阅的风云推送
if( strtolower( $postObj->MsgType) == ‘event’){
//若是是关怀 subscribe 事件
if( strtolower($postObj->Event == ‘subscribe’) ){
//回复用户音信(纯文本格式)
$toUser = $postObj->FromUserName;
$fromUser = $postObj->ToUserName;
$time = time();
$msgType = ‘text’;
$content =
‘欢迎关心我们的微信公众账号’.$postObj->FromUserName.’-‘.$postObj->ToUserName;
$template = “<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>”;
$info = sprintf($template, $toUser, $fromUser, $time, $msgType,
$content);
echo $info;
/*<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>*/

功用是在关怀意创3D打印测试其一订阅号之后,输入月日,比如0204(代表八月4日),会接受众多天历史上的这一天暴发的大事件。

<?php
/**
 * 微信公物平台音讯回复类
 *

            }

}//if end
}//reponseMsg end

 

 代码如下

                        $content  = ‘欢迎关怀我们的微信公众号’;

public function __construct(){

class IndexController extends Controller {
   
//token验证,微信服务器发送post请求过来
    public function index(){
      $timestamp = $_GET[“timestamp”];//a时间戳
      $nonce = $_GET[“nonce”];//随机数
      $token = “weixin”;//token
      $signature = $_GET[“signature”];//加密签名
      $echoStr = $_GET[“echostr”];;//随机字符串
      //1)将token、timestamp、nonce八个参数进行字典序排序
      $tmpArr = array($token, $timestamp, $nonce);
      sort($tmpArr, SORT_STRING);
     //2)将八个参数字符串拼接成一个字符串举办sha1加密
     $tmpStr = implode( $tmpArr );
     $tmpStr = sha1( $tmpStr );
    
//3)开发者得到加密后的字符串可与signature比较,标识该请求来源于微信
    if( ($tmpStr == $signature) && $echoStr ){
         echo  $echoStr;//第两次对接
         exit;
       }else{
          
$this->responseMsg();//第二、三、、、、、、次对接,除了第五遍对接,未来的联网不会传递$echoStr
       }
    }
    public function responseMsg(){
       //获取到微信推送过来的数目
       $postArr = $GLOBALS[“HTTP_RAW_POST_DATA”];
       
       //处理音信
        $postObj = simplexml_load_string($postArr);//转成了目标
       
//用户关切后,微信推送过来一个含有用户音信的xml数据包,大家吸纳后并还原
        //判断音信类型
        if(strtolower($postObj->MsgType) == “event”){
            //判断事件类型,是订阅(subscribe),仍然退订(unsubscribe)
            if(strtolower($postObj->Event) == “subscribe”){
                //$content =
“旅行者,欢迎您–用户的openid:”.$postObj->FromUserName.”–开发者微信号:”.$postObj->ToUserName.”–音讯类型:”.$postObj->MsgType.”–事件类型:”.$postObj->伊芙nt;
                $content =
“欢迎你,旅行者,快恢复生机,告诉您个神秘,你输入月日自我就可以帮你查到历史上的大事件,比如0101”;
                $wxSdkModel = new \Home\Model\IndexModel();
                $wxSdkModel ->
reponseSubscribe($postObj,$content); 
            }
        }

 *
 */
class BBCweixin{
 
 private $APPID=”******”;
 private $APPSECRET=”******”;
 /*
  *文本音信回复
  *@param array object
  *@param string content
  *@return string
  */
 public function resText($object,$content,$flag=0){
  $xmlText=”<xml>
                 
<ToUserName><![CDATA[%s]]></ToUserName>
                 
<FromUserName><![CDATA[%s]]></FromUserName>
                  <CreateTime>%s</CreateTime>
                 
<MsgType><![CDATA[text]]></MsgType>
                 
<Content><![CDATA[%s]]></Content>
                  <FuncFlag>%d</FuncFlag>
                  </xml>”;
    
$resultStr=sprintf($xmlText,$object->FromUserName,$object->ToUserName,time(),$content,$flag);
  echo $resultStr;exit();
 }
 /*
  *图表新闻回复
  *@param array object
  *@param string url
  *@return string
  */
 public function resImage($object,$media_id){
  $xmlImage=”<xml>”;
  $xmlImage.=”<ToUserName><![CDATA[%s]]></ToUserName>”;
  $xmlImage.=”<FromUserName><![CDATA[%s]]></FromUserName>”;
  $xmlImage.=”<CreateTime>%s</CreateTime>”;
  $xmlImage.=”<MsgType><![CDATA[image]]></MsgType>”;
  $xmlImage.=”<Image><MediaId><![CDATA[%s]]></MediaId></Image>”;
  $xmlImage.=”</xml>”;
  $resultStr=sprintf($xmlImage,$object->FromUserName,$object->ToUserName,time(),$media_id);
  echo $resultStr;exit();
 }
 /*
  *图文新闻回复
  *@param array object
  *@param array newsData 二维数组
必须包含[Title][Description][PicUrl][Url]字段
  *@return string
  */
 public function resNews($object,$newsData=array()){
     $CreateTime=time();
     $FuncFlag=0;
     $newTplHeader=”<xml>
       
<ToUserName><![CDATA[{$object->FromUserName}]]></ToUserName>
       
<FromUserName><![CDATA[{$object->ToUserName}]]></FromUserName>
        <CreateTime>{$CreateTime}</CreateTime>
        <MsgType><![CDATA[news]]></MsgType>
        <Content><![CDATA[%s]]></Content>
        <ArticleCount>%s</ArticleCount><Articles>”;
     $newTplItem=”<item>
      <Title><![CDATA[%s]]></Title>
      <Description><![CDATA[%s]]></Description>
      <PicUrl><![CDATA[%s]]></PicUrl>
      <Url><![CDATA[%s]]></Url>
      </item>”;
     $newTplFoot=”</Articles>
      <FuncFlag>%s</FuncFlag>
      </xml>”;
     $Content=”;
     $itemsCount=count($newsData);
    
$itemsCount=$itemsCount<10?$itemsCount:10;//微信公众平台图文回复的音讯三遍最多10条
     if($itemsCount){
      foreach($newsData as
$key=>$item){
       if($key<=9){
  
   $Content.=sprintf($newTplItem,$item[‘Title’],$item[‘Description’],$item[‘PicUrl’],$item[‘Url’]);
    }
      }
  }
     $header=sprintf($newTplHeader,0,$itemsCount);
     $footer=sprintf($newTplFoot,$FuncFlag);
     echo $header.$Content.$footer;exit();
 }
 
 /*
  *音乐音讯回复
  *@param array object
  *@param array musicContent 二维数组
包括[Title][Description][MusicUrl][HQMusicUrl]字段
  *@return string
  */
 public function resMusic($object,$musicContent=array()){
   $xmlMusic=”<xml>
                   
<ToUserName><![CDATA[%s]]></ToUserName>
                   
<FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                   
<MsgType><![CDATA[music]]></MsgType>
                    <Music>
     <Title><![CDATA[%s]]></Title>
                   
<Description><![CDATA[%s]]></Description>
                   
<MusicUrl><![CDATA[%s]]></MusicUrl>
                   
<HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
                    </Music>
                    </xml>”;
  if(empty($musicContent[0][‘HQMusicUrl’])){
   $musicContent[0][‘HQMusicUrl’]=$musicContent[0][‘MusicUrl’];
  }
  $resultStr=sprintf($xmlMusic,$object->FromUserName,$object->ToUserName,time(),$musicContent[0][‘Title’],$musicContent[0][‘Description’],$musicContent[0][‘MusicUrl’],$musicContent[0][‘HQMusicUrl’]金沙8331,);
  echo $resultStr;exit();
 }
 /*
  *上传多媒体文件接口
  *@param
金沙国际手机官网,  *@param array mediaArr filename、filelength、content-type
  *@return object
  */
 public function uploadMedia($accessToken,$type=’image’,$mediaArr){
  $url=”;
  $doPost=self::curlPost($mediaArr,$url);
  return $doPost;
 }
 /*
  *GPS,谷歌坐标转换成百度坐标
  *@param lnt
  *@param lat
  *@return array
  */
 public function mapApi($lng,$lat,$type){
  $map=array();
  if($type==’gps’){
   $url=”;
   $res=json_decode(file_get_contents($url));
   $map[‘lng’]=$res->baidu->lng;
   $map[‘lat’]=$res->baidu->lat;
  }
  if($type==’google’){
   $url=”;
   $res=json_decode(file_get_contents($url));
   $map[‘lng’]=base64_decode($res[0]->x);
   $map[‘lat’]=base64_decode($res[0]->y);
  }
  return $map;
 }
 
 /**************************************************************
  *
  *  使用特定function对数组中持有因素做拍卖
  *  @param  string  &$array     要拍卖的字符串
  *  @param  string  $function   要举办的函数
  *  @return boolean $apply_to_keys_also     是还是不是也利用到key上
  *  @access public
  *
 
*************************************************************/
 public function arrayRecursive(&$array, $function,
$apply_to_keys_also = false)
 {
  static $recursive_counter = 0;
  if (++$recursive_counter > 1000) {
   die(‘possible deep recursion attack’);
  }
  foreach ($array as $key => $value) {
   if (is_array($value)) {
    self::arrayRecursive($array[$key], $function,
$apply_to_keys_also);
   } else {
    $array[$key] = $function($value);
   }
 
   if ($apply_to_keys_also && is_string($key)) {
    $new_key = $function($key);
    if ($new_key != $key) {
     $array[$new_key] = $array[$key];
     unset($array[$key]);
    }
   }
  }
  $recursive_counter–;
 }
 
 /**************************************************************
  *
  *  将数组转换为JSON字符串(包容普通话)
  *  @param  array   $array      要更换的数组
  *  @return string      转换得到的json字符串
  *  @access public
  *
 
*************************************************************/
 public function JSON($array) {
  self::arrayRecursive($array, ‘urlencode’, true);
  $json = json_encode($array);
  return urldecode($json);
 }
 /*
  *创设菜单
  *
  */
 public function creatMenu($shop_id,$data){
  $jsonArray=self::JSON($data);
  $AccessToken=self::accessToken($weiXin[0][‘key’],$weiXin[0][‘secret’]);
  $MENU_URL=”;
  return self::curlPost($jsonArray,$MENU_URL);
 }
 /*
  *客服音讯回复
  *@param array jsonArray Array
{“touser”:”OPENID”,”msgtype”:”text”,”text”:{“content”:”Hello World”}}
  *@return string
  */
 
  public function customService($jsonArray,$hash){
  if(empty($jsonArray)){
   return false; 
  }
  $db=M();
  $sql=”select * from
bbc_wechats where hash='”.$hash.”‘”;
  $weChast=$db->query($sql);
  $AccessToken=self::accessToken($weChast[0][‘key’],$weChast[0][‘secret’]);
  $TokenUrl=”;
     $CustomRes=self::curlPost($jsonArray,$TokenUrl);
  return $CustomRes;
  }
  /*
 
   *获取access_token
   *@return objectStr
   */
  public function accessToken($appid,$secret){
   $access_token=BBCcache::getCache(‘accesstoken’.$appid);
   if($access_token){
    $AccessTokenRet=$access_token;
   }else{
   
$TookenUrl=””;
    $AccessTokenRes=@file_get_contents($TookenUrl);
    $AccessToken=json_decode($AccessTokenRes);
    $AccessTokenRet=$AccessToken->access_token;
   
BBCcache::setCache(‘accesstoken’.$appid,$AccessToken->access_token,3600);
   }
   return $AccessTokenRet;
  }
  /*
   *向远程接口POST数据
   *@data Array
{“touser”:”OPENID”,”msgtype”:”text”,”text”:{“content”:”Hello World”}}
   *@return objectArray
   */
  public function curlPost($data,$url){
    $ch = curl_init();
 
   curl_setopt($ch,
CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_CUSTOMREQUEST, “POST”);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
   curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/5.0 (compatible; MSIE
5.01; Windows NT 5.0)’);
   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
   curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
   curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 
   $info = curl_exec($ch);
 
   if (curl_errno($ch)) {
    echo ‘Errno’.curl_error($ch);
   }
 
   curl_close($ch);
   return json_decode($info);
  }
 //依照经纬度统计距离和趋势
 function getRadian($d){
  return $d * M_PI / 180;
 }
 
 function getDistance ($lat1, $lng1, $lat2, $lng2){
  $EARTH_RADIUS=6378.137;//地球半径
  $lat1 =getRadian($lat1);
  $lat2 = getRadian($lat2);
 
  $a = $lat1 – $lat2;
  $b = getRadian($lng1) – getRadian($lng2);
 
  $v = 2 * asin(sqrt(pow(sin($a/2),2) + cos($lat1) * cos($lat2) *
pow(sin($b/2),2)));
 
  $v = round($EARTH_RADIUS * $v * 10000) / 10000;
 
  return $v;
 }
 
}
 
?>

                                             
<MsgType><![CDATA[%s]]<MsgType>

}
}

//用户发送文书音信,接收到后重操旧业文本新闻
    public function reponseText($postObj,$content){
         $toUserName = $postObj->FromUserName;
         $fromUserName =
$postObj->ToUserName;//开发者微信号(原始ID)
         $crateTime = time();
         $msgType = “text”;
         $template=”
                <xml>
               
<ToUserName><![CDATA[%s]]></ToUserName>
               
<FromUserName><![CDATA[%s]]></FromUserName>
                <CreateTime>%s</CreateTime>
               
<MsgType><![CDATA[%s]]></MsgType>
               
<Content><![CDATA[%s]]></Content>
                </xml>”;
                $info =
sprintf($template,$toUserName,$fromUserName,$crateTime,$msgType,$content);
                echo $info; 
    }

      //2.处理音讯类型,并安装回复类型和情节

//代码如下

class IndexModel{

public function reponseMsg(){

//注意:举办多图文发送时,子图文个数无法超越10个
}else{
switch( trim($postObj->Content) ){
case 1:
$content = ‘您输入的数字是1’;
break;
case 2:
$content = ‘您输入的数字是2’;
break;
case 3:
$content = ‘您输入的数字是3’;
break;
case 4:
$content = “<a href=’;”;
break;
case ‘英文’:
$content = ‘imooc is ok’;
break;
}
$template = “<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>”;
//注意模板中的中括号 无法少 也不可能多
$fromUser = $postObj->ToUserName;
$toUser = $postObj->FromUserName;
$time = time();
// $content = ‘18723180099’;
$msgType = ‘text’;
echo sprintf($template, $toUser, $fromUser, $time, $msgType,
$content);

其中实例化的$wxSdkModel代表model类IndexModel.class.php

                       $fromUser = $postObj->toUserName;

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图