欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

easywechat--在thinkPHP5中的使用

程序员文章站 2022-07-09 18:38:34
1. 安装 1.1 v-4.0 版本要求 PHP版本在7.0以上 1.2 在项目目录下运行以下命令 若未安装composer,则先安装composer -> http://docs.phpcomposer.com/00-intro.html windows 环境下安装报 openssl extens ......

1. 安装

1.1 v-4.0 版本要求 PHP版本在7.0以上

1.2 在项目目录下运行以下命令

easywechat--在thinkPHP5中的使用

若未安装composer,则先安装composer -> http://docs.phpcomposer.com/00-intro.html

windows 环境下安装报 openssl extension is missing, 则修改php.ini文件,开启extension=php_openssl.dll

 composer安装完成后可以在命令行中执行:composer config -g repo.packagist composer https://packagist.phpcomposer.com 改写Packagist 镜像至国内镜像可以加快下载速度。

2. 调用

use EasyWeChat\Factory;

class yourClass {
    // ......

    // 开始操作
    public function wechatAction() {
        $app = Factory::officialAccount(config('wechat_config'));
        // ...
    }
}
'wechat_config' => [
        /**
         * Debug 模式,bool 值:true/false
         *
         * 当值为 false 时,所有的日志都不会记录
         */
        'debug'  => true,
        /**
         * 账号基本信息,请从微信公众平台/开放平台获取
         */
        'app_id'  => '',         // AppID
        'secret'  => '',     // AppSecret
        'token'   => '',          // Token
        'aes_key' => '',                    // EncodingAESKey,安全模式下请一定要填写!!!
        /**
         * 日志配置
         *
         * level: 日志级别, 可选为:
         *         debug/info/notice/warning/error/critical/alert/emergency
         * permission:日志文件权限(可选),默认为null(若为null值,monolog会取0644)
         * file:日志文件位置(绝对路径!!!),要求可写权限
         */
        'log' => [
            'level'      => 'debug',
            'permission' =>  0777,
            'file'       =>  LOG_PATH.'easywechat.log',
        ],
        /**
         * OAuth 配置
         *
         * scopes:公众平台(snsapi_userinfo / snsapi_base),开放平台:snsapi_login
         * callback:OAuth授权完成后的回调页地址
         */
        'oauth' => [
            'scopes'   => ['snsapi_userinfo'],
            'callback' => 'home/oauthallback',
        ],
        /**
         * 微信支付
         */
        'payment' => [
            'merchant_id'        => '', // 商户号
            'key'                => '',
            'cert_path'          => '', // XXX: 绝对路径!!!!
            'key_path'           => '',      // XXX: 绝对路径!!!!
            // 'device_info'     => '013467007045764',
            // 'sub_app_id'      => '',
            // 'sub_merchant_id' => '',
            // ...
        ],
        /**
         * Guzzle 全局设置
         *
         * 更多请参考: http://docs.guzzlephp.org/en/latest/request-options.html
         */
        'guzzle' => [
            'timeout' => 3.0, // 超时时间(秒)
            'verify' => true, // 关掉 SSL 认证(强烈不建议!!!)
        ]
    ]

使用之前,要先配置好各个参数, 具体移步至 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432

例如 token的获取:

<?php
namespace app\home\controller;

class Access extends Home {
    public $token = 'yourToken';
    public function index()
    {
        $echoStr = input('param.echostr');
        if( $this->checkSignature() ){
            echo $echoStr;
            exit;
        }
    }

    public function responseMsg()
    {
        //get post data, May be due to the different environments
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

        //extract post data
        if (!empty($postStr)){
            /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
               the best way is to check the validity of xml by yourself */
            libxml_disable_entity_loader(true);
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $fromUsername = $postObj->FromUserName;
            $toUsername = $postObj->ToUserName;
            $keyword = trim($postObj->Content);
            $time = time();
            $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>";
            if(!empty( $keyword ))
            {
                $msgType = "text";
                $contentStr = "Welcome to wechat world!";
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                echo $resultStr;
            }else{
                echo "Input something...";
            }

        }else {
            echo "test,,,,";
            exit;
        }
    }

    private function checkSignature()
    {

        $param = input('param.');

        $signature = $param["signature"];
        $timestamp = $param["timestamp"];
        $nonce = $param["nonce"];

        $tmpArr = array( $this->token, $timestamp, $nonce );
        // use SORT_STRING rule
        sort($tmpArr, SORT_STRING);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );

        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }

}

 

========================= 全部配置好后就可以愉快的玩耍了 ========================