2017-12-21 20:40:18 3846次浏览 6条回答 1 悬赏 20 金钱

实在搞不定,按easyWeChat文档的示例代码里写的,有哪位分享下网页授权代码?万分感谢~

最佳答案

  • 小叮当的肚兜 发布于 2017-12-22 21:08 举报

    `<?php
    namespace backend\controllers;

    use Yii;
    use \yii\web\Controller;
    use yii\web\HttpException;
    use backend\models\WechatUser;
    use EasyWeChat\Server\BadRequestException;

    class WebchatController extends Controller
    {

    public $enableCsrfValidation = false; //取消_csrf 数据验证
    
    /**
     * actionIndex 微信验证
     * @return mixed
     */
    public function actionIndex()
    {
    
        try{
            $app    = Yii::$app->wechat->getApp();
    
            $server = $app->server;
    
            $server->setMessageHandler(function ($message) {
                // $message->FromUserName // 用户的 openid
                // $message->MsgType // 消息类型:event, text....
                switch ($message->MsgType) {
                    case 'event':
                        //订阅公众号
                        if($message->Event == 'subscribe'){
                            return $this->subscribe($message);
                        }
    
                        //取消订阅事件
                        if($message->Event == 'unsubscribe'){
                            return $this->unsubscribe($message);
                        }
    
                        //已经订阅事件
                        if($message->Event == 'SCAN'){
                            //return $this->unsubscribe($message);
                        }
    
                        return '收到事件消息';
                        break;
                    case 'text':
                        return '收到文字消息';
                        break;
                    case 'image':
                        return '收到图片消息';
                        break;
                    case 'voice':
                        return '收到语音消息';
                        break;
                    case 'video':
                        return '收到视频消息';
                        break;
                    case 'location':
                        return '收到坐标消息';
                        break;
                    case 'link':
                        return '收到链接消息';
                        break;
                    // ... 其它消息
                    default:
                        return '收到其它消息';
                        break;
                }
            });
    
            $response = $server->serve();
    
            return $response->send();
        }catch (BadRequestException $e){
    
            if($e->getMessage() === 'Invalid request.'){
                throw  new HttpException(404);
            }
    
        }
    
    }
    
    /**
     * subscribe 微信订阅事件
     * @param $message
     */
    private function subscribe($message)
    {
        $userInfo = WechatUser::findUserByOpenId($message->FromUserName);
    
        if(!$userInfo){ //添加关注的用户到数据库中
            $app    = Yii::$app->wechat->getApp();
    
            $userService = $app->user;
    
            $userInfo = $userService->get($message->FromUserName);
    
            if($userInfo->subscribe){
                Yii::$app->db->createCommand()->insert(WechatUser::tableName(),[
                    'openid'        => $userInfo->openid,
                    'unionid'       => $userInfo->unionid,
                    'nickname'      => $userInfo->nickname,
                    'sex'           => $userInfo->sex,
                    'headimgurl'    => $userInfo->headimgurl,
                    'country'       => $userInfo->country,
                    'province'      => $userInfo->province,
                    'city'          => $userInfo->city,
                    'language'      => $userInfo->language,
                ])->execute();
            }
    
        }else{
            $userInfo->sataus = 10;
            $userInfo->save();
        }
    
        return Yii::$app->params['WeChatMessage']['subscribe'];
    }
    
    /**
     * unsubscribe 微信取消订阅事件
     * @param $message
     */
    private function unsubscribe($message)
    {
        $userInfo = WechatUser::findUserByOpenId($message->FromUserName);
        if($userInfo){
            $userInfo->status = 0;
    
            $userInfo->save();
        }
    
        return '';
    }
    

    }`

    觉得很赞
  • 回答于 2017-12-22 09:46 举报

    同问

  • 回答于 2018-01-03 13:23 举报

    Add the SDK as a yii2 application component in the config/main.php:
    'components' => [

    // ...
    'wechat' => [
    	'class' => 'maxwen\easywechat\Wechat',
    	// 'userOptions' => []  # user identity class params
    	// 'sessionParam' => '' # wechat user info will be stored in session under this key
    	// 'returnUrlParam' => '' # returnUrl param stored in session
    ],
    // ...
    

    ]

    // 微信网页授权:
    if(Yii::$app->wechat->isWechat && !Yii::$app->wechat->isAuthorized()) {

    return Yii::$app->wechat->authorizeRequired()->send();
    

    }

  • 回答于 2018-01-03 20:27 举报

    同问,学习学习

  • 回答于 2018-01-12 13:59 举报

    www.rageframe.com 最新版本基于EasyWechat 4.x

  • 回答于 2019-04-29 17:09 举报

    为什么我的验证成功,但是发消息,无法提供服务?

您需要登录后才可以回答。登录 | 立即注册
搞搞的传奇
见习主管

搞搞的传奇

注册时间:2015-02-24
最后登录:2020-06-04
在线时长:24小时46分
  • 粉丝8
  • 金钱5
  • 威望10
  • 积分345

热门问题