365bet亚洲真人:微信公众号支付之微信公共平台音讯回复类

function http_curl(){
//获取imooc
//1.初始化curl
$ch = curl_init();
$url = ”;
//2.设置curl的参数
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//3.采集
$output = curl_exec($ch);
//4.关闭
curl_close($ch);
var_dump($output);
}

代码布置环境是用了网易sae,thinkphp框架基础上完成效益。

第一接触的时候写的一部分,有点乱…也没去整理…
ps–近日都不想做事了,各样烦,午饭也没吃,就是想表明一下本身过的不佳。–请忽略个人心理往下看。

                        $template = “<xml>

 

效率是在关怀意创3D打印测试这一个订阅号之后,输入月日,比如0204(代表九月4日),会收取众多天历史上的这一天发生的大事件。

<?php
/**
 * 微信公共平台信息回复类
 *

                        $content  = ‘欢迎关心大家的微信公众号’;

}
}

内部实例化的$wxSdkModel代表model类IndexModel.class.php

 *
 */
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’]);
  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;
 }
 
}
 
?>

      //2.处理信息类型,并设置回复类型和内容

 

}

 代码如下

//接受事件推送并还原

}
$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);

 //调取历史上的今日接口,重返新闻
        if(strtolower($postObj->MsgType) == “text”){
            $time = $postObj->Content;
            $yue = substr($time,0,2);
            $ri = substr($time,-2);
            //历史上的今天接口
            $path =
“”;
            //初始化
            $ch = curl_init();
            //设置参数
            curl_setopt($ch,CURLOPT_URL,$path);
           
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);//将curl_exec()获取的音讯以文件流的款式再次来到,而不是一贯出口
            //调接口
            $res = curl_exec($ch);
            //关闭
            curl_close($ch);
            if(curl_errno($ch)){
                echo curl_error($ch);
            }
            $arr =
json_decode($res,true);//不加true是对象,加true是数组
            $content = “一共查到”.$arr[‘total’].”条数据\n”;
            $arrnews = $arr[‘result’];
            foreach($arrnews as $k => $v){
                $content.=
$v[‘year’].”年的这一天”.$v[‘title’].”\n”;
            }
            $wxSdkModel = new \Home\Model\IndexModel();
            $wxSdkModel -> reponseText($postObj,$content);   
            }
    }

      $postArr = $GLOBALS[‘HTTP_RAW_POST_DATA’];

}
}
*/
//用户发送tuwen1关键字的时候,回复一个单图文
if( strtolower($postObj->MsgType) == ‘text’ &&
trim($postObj->Content)==’tuwen2′ ){
$toUser = $postObj->FromUserName;
$fromUser = $postObj->ToUserName;
$arr = array(
array(
‘title’=>’imooc’,
‘description’=>”imooc is very cool”,
‘picUrl’=>”,
‘url’=>”,
),
array(
‘title’=>’hao123’,
‘description’=>”hao123 is very cool”,
‘picUrl’=>”,
‘url’=>”,
),
array(
‘title’=>’qq’,
‘description’=>”qq is very cool”,
‘picUrl’=>”,
‘url’=>”,
),
);
$template = “<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>”.count($arr).”</ArticleCount>
<Articles>”;
foreach($arr as $k=>$v){
$template .=”<item>
365bet亚洲真人,<Title><![CDATA[“.$v[‘title’].”]]></Title>
<Description><![CDATA[“.$v[‘description’].”]]></Description>
<PicUrl><![CDATA[“.$v[‘picUrl’].”]]></PicUrl>
<Url><![CDATA[“.$v[‘url’].”]]></Url>
</item>”;
}

事实上那一个model类就是一个合并的sdk,一些通用的方法都坐落此处,不用每趟都写一回,比如回复文本新闻,回复图文音讯,回复图片新闻,那里贴出的只是復苏文本音讯

                                             
<FromUserName><![CDATA[%s]]></FromUserName>

function getWxAccessToken(){
//1.请求url地址
$appid = ‘wx08d5c2cb632bb5e4’;
$appsecret = ’06d3444fb9abd8d00314eb4a38ad61a8′;
$url =
“;
//2初始化
$ch = curl_init();
//3.设置参数
curl_setopt($ch , CURLOPT_URL, $url);
curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
//4.调用接口
$res = curl_exec($ch);
//5.关闭curl
curl_close( $ch );
if( curl_errno($ch) ){
var_dump( curl_error($ch) );
}
$arr = json_decode($res, true);
var_dump( $arr );
}

控制器中:

                       $toUser  = $postObj->FromUserName;

发表评论

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