微信自动回复-安全模式-消息加解密方式

    public function WxToken(Request $request)
    {
        if (!empty($request->echostr)) {
            $nonce = $request->input('nonce');
            $echostr = $request->input('echostr');
            $token = config('type.wechat.Token');
            $timestamp = $request->input('timestamp');
            $signature = $request->input('signature');
            $array = array($token, $timestamp, $nonce);
            sort($array, SORT_STRING);
            $str = sha1(implode($array));
            echo $echostr;
        } else {
            $msg_signature = $request->input('msg_signature');
            $nonce = $request->input('nonce');
            $timestamp = $request->input['timestamp'];
            $postStr = file_get_contents("php://input");
            $postArr = json_decode(json_encode(simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
            $encryptData = $postArr['Encrypt'];
            //自动回复
            $this->AutoResponseMsg($msg_signature, $timestamp, $encryptData, $nonce);
        }
    }
    /**
     * 自动回复
     */
    public function AutoResponseMsg($msg_signature, $timestamp, $encryptData, $nonce)
    {
        $token = config('type.wechat.Token');
        $encodingAesKey = config('type.wechat.EncodingAESKey');
        $appId = config('type.wechat.AppID');
        $pc = new WXBizMsgCryptTool($token, $encodingAesKey, $appId);
        $decryptData = '';
        $errCode = $pc->decryptMsg($msg_signature, $timestamp, $nonce, $encryptData, $decryptData);

        Logger::info('code', ['code' => $errCode], 'code');
        if ($errCode == 0) {
            // 解密成功,处理消息
            $res = json_decode(json_encode(simplexml_load_string($decryptData, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
            $FromUserName = $res['FromUserName']; //获取发送方帐号(OpenID)
            $ToUserName = $res['ToUserName']; //获取接收方账号
            $html = "自定义回复文本";
            echo $this->txt($html, $FromUserName, $ToUserName);
            exit();
            // TODO: 处理消息
        } else {
            exit('Decrypt error');
        }
    }


    public function txt($content, $FromUserName, $ToUserName)
    {
        $time = time();
        $xml = "<xml>
              <ToUserName><![CDATA[{$FromUserName}]]></ToUserName>
              <FromUserName><![CDATA[{$ToUserName}]]></FromUserName>
              <CreateTime>{$time}</CreateTime>
              <MsgType><![CDATA[text]]></MsgType>
              <Content><![CDATA[{$content}]]></Content>
            </xml>";
        return $xml;
    }

WXBizMsgCryptTool文件

链接:https://pan.baidu.com/s/1iSCpbXI7mf7kZ7G3Er_fAg 
提取码:prv0 
本作品采用《CC 协议》,转载必须注明作者和本文链接
有梦想的人睡不着,没有梦想的人睡不醒。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
文章
88
粉丝
21
喜欢
134
收藏
267
排名:228
访问:4.2 万
私信
所有博文
博客标签
redis
1
php
1
laravel
7
docker
3
orm
2
sync
1
pivot
1
detach
2
attach
2
算法
1
递归
1
多对多
1
lnmp环境搭建
1
GO变量
1
GO数据类型
1
IOC注入反转
1
IOC容器的绑定解析过程(绑定单例)
1
原生微信网页授权登录(natapp穿墙)
1
VMwareNAT网卡配置
1
MySQL基础架构
1
redis 主从搭建
1
Sentinel哨兵模式解决故障转移
1
elasticsearch安装
1
elasticsearch集群安装3台
1
安装kibana
1
必须了解的mysql三大日志-binlog、redo log和undo log
1
何处理数据恢复 数据丢失 面试tx的架构师的岗位问的
1
分库分表插入数据
1
创建分库分表(在主从复制的基本上)
1
分库分表总结
1
mysql总结
1
haproxy状态检测脚本(完成高可用)
1
mysql高可用衡搭建(Keepalived)
1
mysql负载均衡搭建(haproxy)
1
mysql主从恢复数据一致性(pt工具-t-table-checksum和pt-table-sync)
1
终于解决了《====》记一次mysql热备份xtrabackup(没有解决问题)
1
mysql事务
1
MYSQL8.0安装
1
Redis-cluster分布式集群搭建部署
1
比Redis-cluster还好的redis分布式集群(twemproxy)
1
Redis缓存穿透/缓存雪崩/缓存击穿(案例:产生的原因 解决方案利/弊)
1
数据结构之MySQL独爱B+树(二叉树、AVL树、红黑树、B树对比)
1
B-tree
1
B+tree
1
Mycat实现mysql的负载均衡读写分离
2
mysql双主双从 搭建配置
1
mycat 双主双从-负载均衡-高可用
1
Mycat垂直分库
1
记一次mysql高可用技术分享
1
【rabbitmq】安装ampq的扩展的踩坑总结
1
PHP操作MongoDB(增删改查)
1
golang总结
5
社区赞助商