php 用户向微信发送信息

1:制作微信菜单栏

<?php
header("Content-type: text/html; charset=utf-8");
function request_post($url = ‘‘, $param = ‘‘)
{
    if (empty($url) || empty($param)) {
        return false;
    }
    $postUrl = $url;
    $curlPost = $param;
    $ch = curl_init(); //初始化curl
    curl_setopt($ch, CURLOPT_URL, $postUrl); //抓取指定网页
    curl_setopt($ch, CURLOPT_HEADER, 0); //设置header
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //要求结果为字符串且输出到屏幕上
    curl_setopt($ch, CURLOPT_POST, 1); //post提交方式
    curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
    $data = curl_exec($ch); //运行curl
    curl_close($ch);
    return $data;
}
/*$xml="<xml>
 <ToUserName>bj_xiangfubao</ToUserName>
 <FromUserName>oMbrFjgLt5W6SjwIQTLRHhIvX4ro</FromUserName>
 <CreateTime>time()</CreateTime>
 <MsgType>text</MsgType>
 <Content>dffff</Content>
 <MsgId>1234567890123456</MsgId>
 </xml>";*/
//$result = request_post($url = ‘http://integral.xiangfubao.com.cn/beidong.php‘, $xml);
//var_dump($result);
function request_get($url = ‘‘)
{
    if (empty($url)) {
        return false;
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}
function getToken($appid, $appsecret)
{
    /*if (S($appid)) {
        $access_token = S($appid);
    } else {
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appid . "&secret=" . $appsecret;
        $token = $this->request_get($url);
        $token = json_decode(stripslashes($token));
        $arr = json_decode(json_encode($token), true);
        $access_token = $arr[‘access_token‘];
        S($appid, $access_token, 720);
    }*/
     $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appid . "&secret=" . $appsecret;
        $token = request_get($url);
        $token = json_decode(stripslashes($token));
        $arr = json_decode(json_encode($token), true);
        $access_token = $arr[‘access_token‘];
        return $access_token;
}
$token = getToken(‘wxdeeda2690614a91f‘, ‘fb9dd84cef34972c607c967d71b28402‘);
$url = ‘https://api.weixin.qq.com/cgi-bin/menu/create?access_token=‘.$token;
$data = ‘{
     "button":[
      {
           "name":"祥付电商",
           "sub_button":[
            {
               "type":"view",
               "name":"祥付·海淘商城",
               "url":"http://shop.gogo198.cn/app/index.php?i=6&c=entry&p=designer&pageid=23&m=sz_yi&do=plugin&mid=35"
            },
            {
               "type":"view",
               "name":"祥付·友卖网站",
               "url":"http://shop.xiangfubao.com.cn"
            }]
      },
      {
           "name":"关于我的",
           "sub_button":[
            {
               "type":"click",
               "name":"积分查询",
               "key":"V1001_HELLO_WORLD"
            }]
       }]
}‘;
$result = dataPost($data,$url);

function dataPost($post_string,$url)
 {//POST方式提交数据
     $context =
    array (‘http‘ =>
    array (‘method‘ =>
    "POST",
    ‘header‘ =>
    "User-Agent:
     Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) \r\n Accept: */*",
    ‘content‘ =>
    $post_string )
     );
     $stream_context =
     stream_context_create ( $context );
     $data =
    file_get_contents (
    $url,
     FALSE, $stream_context );
     return $data;
 }
var_dump($result);
?>

2:微信服务器端接收消息回复用户信息

<?php  
header("Content-type: text/html; charset=utf-8");  
$testObj = new Test();

if(!empty($_GET[‘echostr‘])){
    $testObj->valid();  
      
}else{
    $testObj->responseMsg();  
}
 
exit;
 
class Test  
{  
    /**
     * 绑定url、token信息
     */  
    public function valid(){  
        $echoStr = $_GET["echostr"];  
        if ($this->checkSignature()) {  
            echo $echoStr;  
        }  
        exit();  
    }  
    /**
     * 检查签名,确保请求是从微信发过来的
     */  
    private function checkSignature()  
    {  
        $signature = $_GET["signature"];  
        $timestamp = $_GET["timestamp"];  
        $nonce = $_GET["nonce"];      
                  $this->log(‘--‘.$signature.‘--‘);
        $token = "Fyh3b27ih7vveRQeRDI3Ydd3Vb32iVZs";//与在微信配置的token一致,不可泄露  
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr,SORT_STRING);  
        $tmpStr = implode( $tmpArr );  
        $tmpStr = sha1( $tmpStr );
        if( $tmpStr == $signature ){  
            return true;  
        }else{  
            return false;  
        }  
    }  
 
    /**
     * 接收消息,并自动发送响应信息
     */  
    public function responseMsg(){  
          
        //验证签名  
        if (11){  
            //$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
            $postStr=file_get_contents(‘php://input‘);
            $this->log_request_info();  
      
            //提取post数据  
            if (!empty($postStr)){  
                    $postObj = simplexml_load_string($postStr, ‘SimpleXMLElement‘, LIBXML_NOCDATA);  
                    $fromUsername = $postObj->FromUserName;//发送人  
                    $toUsername = $postObj->ToUserName;//接收人  
                    $MsgType = $postObj->MsgType;//消息类型
                    $ContentText = $postObj->Content;//消息类型
                    $MsgId = $postObj->MsgId;//消息id  
                    $time = time();//当前时间做为回复时间   
                    //如果是文本消息(表情属于文本信息)  
                    if($MsgType == ‘text‘){  
                        $content = trim($postObj->Content);//消息内容  
                        if(!empty( $content )){  
                              
                            //如果文本内容是图文,则回复图文信息,否则回复文本信息  
                            if($content == "图文"){  
                                  
                                //回复图文消息,ArticleCount图文消息个数,多条图文消息信息,默认第一个item为大图  
                                $ArticleCount = 2;   
                                $newsTpl = "<xml>  
                                <ToUserName><![CDATA[%s]]></ToUserName>  
                                <FromUserName><![CDATA[%s]]></FromUserName>  
                                <CreateTime>%s</CreateTime>  
                                <MsgType><![CDATA[%s]]></MsgType>  
                                <ArticleCount>%s</ArticleCount>  
                                <Articles>  
                                <item>  
                                <Title><![CDATA[%s]]></Title>   
                                <Description><![CDATA[%s]]></Description>  
                                <PicUrl><![CDATA[%s]]></PicUrl>  
                                <Url><![CDATA[%s]]></Url>  
                                </item>  
                                <item>  
                                <Title><![CDATA[%s]]></Title>  
                                <Description><![CDATA[%s]]></Description>  
                                <PicUrl><![CDATA[%s]]></PicUrl>  
                                <Url><![CDATA[%s]]></Url>  
                                </item>  
                                </Articles>  
                                </xml>";
                                $resultStr = sprintf($newsTpl, $fromUsername, $toUsername, $time, ‘news‘,   
                                            $ArticleCount,‘我是图文信息‘,‘我是描述信息‘,‘http://www.test.com/DocCenterService/image?photo_id=236‘,  
                                            ‘http://www.test.com‘,‘爱城市网正式开通上线‘,‘描述2‘,‘http://jn.test.com/ac/skins/img/upload/img/20131116/48171384568991509.png‘,  
                                            ‘http://www.test.com‘);  
                                echo $resultStr;  
                                $this->log($resultStr);  
                            }else{
                                if($ContentText==‘积分查询‘)
                                {
                                    require(‘mysql.php‘);
                                    $db = new mysql(‘localhost‘, ‘root‘, ‘123456‘, "jifen");
                                    $db->select("user", "*", "openid = "."‘".$fromUsername."‘");
                                    $re = $db->fetchArray(MYSQL_ASSOC);
                                    $jifen = $re[0][‘jifen‘];
                                    $jifen =(string)$jifen.‘积分‘;
                                    //回复文本信息  
                                    $textTpl = "<xml>  
                                                <ToUserName><![CDATA[%s]]></ToUserName>  
                                                <FromUserName><![CDATA[%s]]></FromUserName>  
                                                <CreateTime>%s</CreateTime>  
                                                <MsgType><![CDATA[%s]]></MsgType>  
                                                <Content><![CDATA[%s]]></Content>  
                                                <FuncFlag>0</FuncFlag>  
                                                </xml>";               
                                    //$contentStr = ‘你发送的信息是:接收人:‘.$toUsername.‘,发送人:‘.$fromUsername.‘,消息类型:‘.$MsgType.‘,消息内容:‘.$jifen.‘ www.icity365.com‘;
                                    $contentStr = ‘您目前‘.$jifen;
                                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, ‘text‘, $contentStr);
                                    echo $resultStr;  
                                    $this->log($resultStr);
                                }                                  
                            }  
                        }else{  
                            echo "Input something...";  
                            $this->log($resultStr);  
                        }  
                          
                      //如果是图片消息  
                    }elseif ($MsgType == ‘image‘){  
                        $MediaId = $postObj->MediaId;//图片消息媒体id,可以调用多媒体文件下载接口拉取数据。  
                        $imageTpl = "<xml>  
                                    <ToUserName><![CDATA[%s]]></ToUserName>  
                                    <FromUserName><![CDATA[%s]]></FromUserName>  
                                    <CreateTime>%s</CreateTime>  
                                    <MsgType><![CDATA[%s]]></MsgType>  
                                    <Image>  
                                    <MediaId><![CDATA[%s]]></MediaId>  
                                    </Image>  
                                    </xml>";  
                        $resultStr = sprintf($imageTpl, $fromUsername, $toUsername, $time, $MsgType, $MediaId);  
                        echo $resultStr;  
                        $this->log("自动响应图片信息");  
                        $this->log($resultStr);  
                          
                    //如果是视频  
                    }else if($MsgType == ‘video‘){  
                        $MediaId = $postObj->MediaId;//视频消息媒体id,可以调用多媒体文件下载接口拉取数据。  
                        $ThumbMediaId = $postObj->ThumbMediaId;//视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。   
                        $videoTpl = "<xml>  
                                    <ToUserName><![CDATA[%s]]></ToUserName>  
                                    <FromUserName><![CDATA[%s]]></FromUserName>  
                                    <CreateTime>%s</CreateTime>  
                                    <MsgType><![CDATA[%s]]></MsgType>  
                                    <Video>  
                                    <MediaId><![CDATA[%s]]></MediaId>  
                                    <ThumbMediaId><![CDATA[%s]]></ThumbMediaId>  
                                    <Title><![CDATA[%s]]></Title>  
                                    <Description><![CDATA[%s]]></Description>  
                                    </Video>   
                                    </xml>";  
                        $resultStr = sprintf($videoTpl, $fromUsername, $toUsername, $time, $MsgType, $MediaId,$ThumbMediaId,‘我是标题‘,‘我是描述‘);  
                        echo $resultStr;  
                        $this->log("自动响应视频信息".$ThumbMediaId);  
                        $this->log($resultStr);  
                          
                    //如果是地理位置  
                    }else if($MsgType == ‘location‘){  
                        $Location_X = $postObj->Location_X;//维度  
                        $Location_Y = $postObj->Location_Y;//经度  
                        $Scale = $postObj->Scale;//地图缩放大小  
                        $Label = $postObj->Label;//地里位置信息  
                          
                        //回复文本信息  
                        $textTpl = "<xml>  
                                    <ToUserName><![CDATA[%s]]></ToUserName>  
                                    <FromUserName><![CDATA[%s]]></FromUserName>  
                                    <CreateTime>%s</CreateTime>  
                                    <MsgType><![CDATA[%s]]></MsgType>  
                                    <Content><![CDATA[%s]]></Content>  
                                    <FuncFlag>0</FuncFlag>  
                                    </xml>";               
                        $msgType = "text";  
                        $contentStr = ‘经度:‘.$Location_Y.‘,维度:‘.$Location_X.‘,地图缩放大小‘.$Scale.‘,地理位置信息:‘.$Label;  
                        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);  
                        echo $resultStr;  
                        $this->log($resultStr);  
                          
                    //如果是事件  
                    }else if($MsgType == ‘event‘){  
                          
                        $Event = $postObj->Event;  
                          
                        //subscribe(关注,也叫订阅)  
                        if($Event == ‘subscribe‘){  
                              
                            $EventKey = $postObj->EventKey;//事件KEY值,qrscene_为前缀,后面为二维码的参数值  
                              
                            //未关注时,扫描二维码  
                            if(!empty($EventKey)){  
                                $Ticket = $postObj->Ticket;//二维码的ticket,可用来换取二维码图片  
                                $this->log($fromUsername.‘扫描二维码关注!EventKey=‘.$EventKey.‘,Ticket=‘.$Ticket);  
                            }else{  
                                $this->log($fromUsername.‘关注我了!‘);  
                            }  
                              
                        //unsubscribe(取消关注)  
                        }elseif ($Event == ‘unsubscribe‘){  
                            $this->log($fromUsername.‘取消关注我了!‘);  
                              
                        //已关注时,扫描二维码事件  
                        }elseif($Event == ‘SCAN‘ || $Event == ‘scan‘){  
                            $EventKey = $postObj->EventKey;//事件KEY值,是一个32位无符号整数,即创建二维码时的二维码scene_id  
                            $Ticket = $postObj->Ticket;//二维码的ticket,可用来换取二维码图片  
                            $this->log($fromUsername.‘关注我了!EventKey=‘.$EventKey.‘,Ticket=‘.$Ticket);  
                          
                        //菜单点击事件  
                        }elseif($Event == ‘CLICK‘){
                            require(‘mysql.php‘);
                            $db = new mysql(‘localhost‘, ‘root‘, ‘123456‘, "jifen");
                            $db->select("user", "*", "openid = "."‘".$fromUsername."‘");
                            $re = $db->fetchArray(MYSQL_ASSOC);
                            $jifen = $re[0][‘jifen‘];
                            $jifen =(string)$jifen.‘积分‘;
                            $EventKey = $postObj->EventKey;//事件KEY值,与自定义菜单接口中KEY值对应  
                            //回复文本信息  
                            $textTpl = "<xml>  
                                        <ToUserName><![CDATA[%s]]></ToUserName>  
                                        <FromUserName><![CDATA[%s]]></FromUserName>  
                                        <CreateTime>%s</CreateTime>  
                                        <MsgType><![CDATA[%s]]></MsgType>  
                                        <Content><![CDATA[%s]]></Content>  
                                        <FuncFlag>0</FuncFlag>  
                                        </xml>";               
                            //$contentStr = ‘你点击了菜单,菜单项key=‘.$EventKey;
                            $contentStr = ‘您目前有‘.$jifen;
                            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, ‘text‘, $contentStr);  
                            echo $resultStr;  
                            $this->log($resultStr);  
 
                        //其他事件类型  
                        }else{  
                            $this->log(‘事件类型:‘.$Event);  
                        }  
                          
                    //其他消息类型,链接、语音等  
                    }else{  
                        //回复文本信息  
                        $textTpl = "<xml>  
                                    <ToUserName><![CDATA[%s]]></ToUserName>  
                                    <FromUserName><![CDATA[%s]]></FromUserName>  
                                    <CreateTime>%s</CreateTime>  
                                    <MsgType><![CDATA[%s]]></MsgType>  
                                    <Content><![CDATA[%s]]></Content>  
                                    <FuncFlag>0</FuncFlag>  
                                    </xml>";               
                        $contentStr = ‘消息类型:‘.$MsgType.‘我们还没做处理。。。。【爱城市网】‘;  
                        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, ‘text‘, $contentStr);  
                        echo $resultStr;  
                        $this->log($resultStr);  
                    }  
      
            }else {  
                $this->log("未收到post信息:");    
                exit;  
            }  
        }else{  
                $this->log("验证签名未通过!");        
        }  
    }  
    /**
     * 记录请求信息
     */  
    function log_request_info() {  
        $post = ‘‘;
        foreach($_POST   as   $key   =>   $value)   {   
            $post = $post.$key.‘ : ‘.$value.‘ , ‘;   
        }   
        $get = ‘‘;  
        foreach($_GET   as   $key   =>   $value)   {   
            $get = $get.$key.‘ : ‘.$value.‘ , ‘;   
        }   
        $this->log("get信息:".$get);  
        $this->log("post信息:".$post);  
    }  
    /**
     * 记录日志
     * @param $str
     * @param $mode
     */  
    function log($str){  
        $mode=‘a‘;//追加方式写  
        $file = "log.txt";  
        $oldmask = @umask(0);  
        $fp = @fopen($file,$mode);  
        @flock($fp, 3);  
        if(!$fp)  
        {  
            Return false;  
        }  
        else  
        {  
            @fwrite($fp,$str);  
            @fclose($fp);  
            @umask($oldmask);  
            Return true;  
        }  
    }  
}  
 
?>

时间: 2024-08-12 01:25:11

php 用户向微信发送信息的相关文章

(九)Zabbix_监控报警无法通过微信发送信息

(九)Zabbix监控报警无法通过微信发送信息 背景:通过脚本测试脚本正常发送信息,zabbix服务器web端也能够正常报警并执行动作. 思路:查看日志 一.通过动作日志查看错误信息,分3中情况 1.第一种情况脚本无参数 (1)下图是web端的动作日志报警 (2)下图是脚本测试报警 根据上2图发现报错的信息一样,这样不难发现是脚本没有添加参数造成的(此脚本也是从网上下载未做相应的更改) 如下脚本内容,供参考: #!/usr/bin/python #_*_coding:utf-8 _*_ impo

微信开发调试小工具进化→微信用户发送信息模拟器发布!——这标题起真是好数码暴龙的说

直接说正题吧.最近在做微信第三方服务器.在模拟用户发过来的请求方面,网上流传着一个“微信开发调试小工具”,谁做都不知道了.反正我觉得那个东西看起来挺不爽的,因为其信息发送类型不是很全面,于是我就把它反编译过来自己重写一个了. 我复用了它原本项目的一个类和几个方法 .与原版相比,功能改进如下: 1涵盖了迄今为止所有的信息类型和事件类型(具体的参见微信官方文档里面的接收信息节点); 2对于所有参数都有相关的提示信息 3参数的所属范围除了少数外都用groupbox圈了起来,更加直观地看到了各类信息之间

微信开发第六篇服务器主动发送信息

上几篇文章基本是介绍有手机客户端触发的事件在先,这种有手机微信客户端触发的请求,咱们的服务器被动响应,这种模式我个人理解为被动发送信息. 但是除此之外我们有时间要让用户推送消息,比如向家长每天发送孩子的作业信息.这就要用到模板消息了 对于模板消息首先要添加 进入模板选择行业之后就要等两天才能用模板消息 能用模板消息之后 根据自己的情况,查看模板选择适用于自己的模板 如果没有可以自己定义 只要微信官方审核通过就可以用(我申请的好像说是7-15天,完成审计,但是好像30分钟就给我发通知说申请成功)

函数TH_POPUP 功能: 向函数入口参数 client , user决定的用户发送信息(信息为入口参数 message 决 定的信息)

. 函数TH_POPUP      功能: 向函数入口参数 client , user决定的用户发送信息(信息为入口参数 message 决            定的信息)      事例﹕ZBC_LSL_017   http://www.uwins.cn/ ERP交流群379113944(验证:来自博客) 微信扫扫二维码加入我们的平台 七夕送女友送母亲---最佳的礼物

使用shell脚本监控少量服务器并发送微信告警信息

01. 概括 1.0 脚本更新地址Git更新地址:shell_monitor_script.sh文章原文地址:使用shell脚本监控少量服务器并发送微信告警信息 1.1 前提:平台系统:linux系统下接收信息:微信企业号 1.2 脚本说明需要修改微信接口脚本对应参数的修改:包括IP,告警阈值等 1.3 脚本使用该脚本监控包括Disk.CPU.MEM.LOAD等主机资源,以及docker服务和docker容器.将该脚本附件假定放于:/home/mai/.check_host.sh.那么在定时任务

微信相关信息

关注/取消关注事件<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> &l

微信发送消息后显示该公共号暂时无法提供服务,请稍后再试!

用户发送信息,公众账号会提示"该公众号暂时无法提供服务,请稍后再试".遇到这个问题,我们可以排除一下是否我们返回的数据有问题. 首先代码返回一个空的字符串,如果还是出现这样的提示,请看看签名验证是否失败,调试一下,看看log.     如果没有出现这样的提示,说明我们返回的结果格式有问题. 下面参考一下我返回的错误格式: <xml> <toUserName><![CDATA[o_ZKtuBGHyFi2YcpSKlugRAomGrU]]></to

利用百度地图Android sdk高仿微信发送位置功能

接触了百度地图开发平台半个月了,这2天试着模仿了微信给好友发送位置功能,对百度地图的操作能力又上了一个台阶 (假设须要完整demo.请评论留下邮箱) (眼下源代码已经不发送,假设须要源代码.加qq316701116,不喜勿扰)    我在实现这个功能的时候,遇到一些困难,可能也是别人将会遇到的困难,特在此列出 1.在微信发送功能中,无论用户怎样拖拽地图.总有个覆盖物固定了MapView中央,怎么实现?     事实上这非常easy实现.仅仅要MapView的布局文件里.将一个ImageView覆

微信在线信息模拟测试工具(基于Senparc.Weixin.MP)

目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具在线DEMO:http://weixin.senparc.com/SimulateTool Senparc.Weixin.MP是一个开源的微信SDK项目,地址:https://github.com/JeffreySu/WeiXinMPSDK (其中https://github.com/Jeffrey