微信公众号

微信公众号

账号注册

微信公众平台的地址
https://mp.weixin.qq.com/“>https://mp.weixin.qq.com
注:每个邮箱智能申请一种账号,服务号,公众号,企业号

公众账号的使用模式

主要分为编辑模式和开发者模式

编辑模式

编辑模式的简单应用
在使用编辑模式前,需要首先调左侧开发者中心功能中,将开发者模式停用
进入公众平台下,首页左侧的功能菜单下都是编辑模式的一些功能
例如:自动回复功能

开发者模式

开发者模式的应用
接入API接口的步骤
1. 填写服务器的URL和token
注:只支持80端口
2. 验证服务器地址有效性
* 将token,timestamp,nonce三个参数进行字典序排序
* 将三个参数字符串拼接成一个字符串进行sha1加密
* 将加密后的字符串和signature进行对比,标识该请求来源于微信

基本配置
URL 公网的ip或者域名,指向是验证服务器地址有效性文件
Token 与之对应即可
EncodingAESKey 随机生成
消息加密方式 选择兼容模式

验证代码如下:

<?php

    //1. 将token,timestamp,nonce三个参数按字典序排序
    $timestamp = $_GET['timestamp'];
    $nonce     = $_GET['nonce'];
    $token     = 'weixin';//和平台添加的token一致
    $signature = $_GET['signature'];

    $array = array($timestamp, $nonce, $token);
    sort($array);//排序

    //2. 将三个字符串合并成一个字符串并且用sha1加密
    $tmpStr = implode('', $array);//拼接
    $tmpStr = sha1($tmpStr);//加密

    //3. 将加密后的字符串和signature对比,判断该请求是否来源于微信
    if($tmpStr == $signature){//对比
        echo $_GET['echostr'];
        exit;
    }

注意:thinkphp5中token验证需要关闭debug模式

消息推送

消息推送和开放平台验证的地址一致,不同的是,验证url地址是第一次请求,结果返回echostr,关注和其他访问信息算是第一次以后,没有echostr的返回信息。
1. 获取微信推送的post信息
2. 处理消息类型,返回格式为xml,需要转换成对象

        //1.获取微信推送的post信息
        $postArr = $GLOBALS['HTTP_RAW_POST_DATA'];
        //2. 处理消息类型,返回格式为xml,需要转换成对象
        $postObj = simplexml_load_string($postArr);
        if($tmpStr == $signature && $_GET['echostr']){//对比//只有第一次验证的时候会传echostr这个值,其他的验证不会传
            echo $_GET['echostr'];
            exit;
        }else{
            //返回消息的方法
        }
关注公众号消息推送

如下是微信推送的post信息,由MsgType和Event来判断是否是关注信息

    /*<xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[FromUser]]></FromUserName>
    <CreateTime>123456789</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[subscribe]]></Event>
    </xml>*/

如果是文本信息,由MsgType和Content来判断信息并且返回相关信息

    /*<xml>
     <ToUserName><![CDATA[toUser]]></ToUserName>
     <FromUserName><![CDATA[fromUser]]></FromUserName>
     <CreateTime>1348831860</CreateTime>
     <MsgType><![CDATA[text]]></MsgType>
     <Content><![CDATA[this is a test]]></Content>
     <MsgId>1234567890123456</MsgId>
     </xml>*/
纯文本信息
    /**
     * 发送文本信息
     * @param $toUserName
     * @param $fromUserName
     * @param $content
     * @return string
     */
    public function getMsg($toUserName, $fromUserName, $content){
        $templete = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[text]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                            </xml>";
        $info = sprintf($templete, $toUserName, $fromUserName, time(), $content);
        return $info;
    }
图文信息
    /**
     * 发送图文信息
     * @param $toUserName
     * @param $fromUserName
     * @param $arr
     * @return string
     */
    public function getPicture($toUserName, $fromUserName, $arr){
        $templete = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[news]]></MsgType>
                    <ArticleCount>%s</ArticleCount>
                    <Articles>";
        $templete = sprintf($templete, $toUserName, $fromUserName, time(), count($arr));
        foreach ($arr as $k => $v){
            $info = "<item>
                    <Title><![CDATA[%s]]></Title> 
                    <Description><![CDATA[%s]]></Description>
                    <PicUrl><![CDATA[%s]]></PicUrl>
                    <Url><![CDATA[%s]]></Url>
                    </item>";
            $templete .= sprintf($info, $v['title'], $v['desc'], $v['picUrl'], $v['url']);
        }

          $templete .= "</Articles>
                    </xml>";
        return $templete;
    }

access_token

获取access_token,保存到session中

    /**
     * 获取access_token
     * @return mixed
     */
    public function getWxAccessToken(){
        //将access_token保存再session/cookie中
        if($_SESSION['access_token'] && $_SESSION['expire_time'] > time()){
            //如果access_token再session中没有过期
            return $_SESSION['access_token'];
        }else{
            //如果access_token不存在或者过期
            $appid = 'wx1fab8bfe534b7843';
            $appsecret = 'c7640ec02d5115bef4573d9f656c9424';
            $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret;
            $res = $this->httpCurl($url, 'get', 'json');
            $access_token = $res['access_token'];
            $_SESSION['access_token'] = $access_token;
            $_SESSION['expire_time'] = time() + 7000;
            return 'nihao';
        }
    }

curl

请求地址

    /**
     * curl的使用
     * @param $url 请求地址
     * @param string $type 请求类型,get和post
     * @param string $res 请求结果,默认返回json类型
     * @param string $arr 请求参数,post的body,默认空
     * @return mixed
     */
    public function httpCurl($url, $type='get', $res='json', $arr=''){
        //1.初始化curl
        $ch = curl_init();
        //2. 设置curl参数
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        if($type == 'post'){
            curl_setopt($ch, CURLOPT_PORT, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $arr);
        }
        //3. 采集
        $output = curl_exec($ch);
        //4. 关闭
        curl_close($ch);
        if($res == 'json'){
            return json_decode($output, true);
        }
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值