微信公众号图文回复验证码并写入数据库的基本思路

接了个小活:要求公众号中用户回复1,公众号被动回复7位数验证码,同时把用户openId和验证码写入数据库

简单写了各测试demo:工具 thinkphp   订阅号子钦有话说内申请的测试账号 

接口配置信息修改

 

Controller控制器   输入1得到被动回复验证码(里面大多数代码与标题无关,想必大家能用到,所以没有删除)

<?php
namespace Home\Controller;
use Home\Common\CommonController;
/**
 *@parame  微信公众号开发 
 */
class WeChatController extends CommonController {
    //配置接口信息接入api
    public function index() {
        //1.获得参数 signature nonce token timestamp echostr
        $nonce     = $_GET['nonce'];
        $token     = 'zhangmangde';
        $timestamp = $_GET['timestamp'];
        $echostr   = $_GET['echostr'];
        $signature = $_GET['signature'];
        //2.拼成数组,然后按字典序排序
        $array     = array();
        $array     = array($nonce,$timestamp,$token);
        sort($array);
        //3.拼成字符串,sha1加密,然后和$signature进行比较
        $str = sha1(implode($array));
        if($str == $signature && $echostr){
            //第一次接入微信api的时候
            echo $echostr;
            exit;
        }else{
            $this->responseMsg();
        }
        
    }
    
    /*public function show(){
        echo 'zhangmangde';
    }*/
    //接受事件,推送并回复
    public function responseMsg(){
        //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);//将xml字符串载入对象中
        //$postObj->ToUserName = '';
        //$postObj->FromUserName = '';
        //$postObj->CreateTime = '';
        //$postObj->MsgType = '';
        //$postObj->Event = '';
        //判断该数据包是否是订阅的事件推送
        if(strtolower($postObj->MsgType) == 'event'){
            //如果是关注subcribe事件
            if(strtolower($postObj->Event) == 'subscribe'){
                //回复用户消息
                $arr  = array(
                    array(
                        'title'       => '欢迎关注子钦的公众号开发版哟^^~~^^',
                        'description' => '张子钦很酷哦 or ziqin is very cool 哈哈!关注有惊喜哦',
                        'picUrl'      => 'http://waphd.simufengyun.com/Public/Home/images/zmd123.png',
                        'url'         => 'http://wap.simufengyun.com/',
                    ),
                );
                //实例化模型
                $weChatModel = new \Home\Model\WeChatModel;//实例化时,一定要注意Model的路径问题 下面a()方法是测试路径问题
                $weChatModel->responseSubscribe($postObj,$arr);//调用模型中的方法
            }    
            //点击事件
            if(strtolower($postObj->Event) == 'click'){
                //如果是自定义菜单中的event->click
                if(strtolower($postObj->EventKey) == 'item1'){
                    $content = "这是菜单一事件的推送";
                }
                if(strtolower($postObj->EventKey) == 'songs'){
                    $content = "这是歌曲事件的推送";
                }
                //实例化模型
                //实例化模型
                $weChatModel = new \Home\Model\WeChatModel;
                $weChatModel->responseText($postObj,$content);//调用方法
            }
            //跳转事件
            if(strtolower($postObj->Event) == 'view'){
                //如果是自定义菜单中的event->view
                $content = "要跳转的链接是".$postObj->EventKey;
                //实例化模型
                $weChatModel = new \Home\Model\WeChatModel;
                $weChatModel->responseText($postObj,$content);//调用方法
            }
            //
            if(strtolower($postObj->Event) == 'SCAN'){
                //自定义菜单中的event->scan
                $content = "扫描场景".$postObj->EventKey;
                //实例化模型
                $weChatModel = new \Home\Model\WeChatModel;
                $weChatModel->responseText($postObj,$content);//调用方法
            }
            if(strtolower($postObj->Event) == 'LOCATION'){
                //自定义菜单中的event->LOCATION
                $content = "上传位置:纬度".$postObj->Latitude.";经度".$postObj->Longitude;
                //实例化模型
                $weChatModel = new \Home\Model\WeChatModel;
                $weChatModel->responseText($postObj,$content);//调用方法
            }
            if(strtolower($postObj->Event) == 'scancode_waitmsg'){
                //自定义菜单中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值