精华内容
下载资源
问答
  • 主要为大家详细介绍了NodeJS实现微信公众号关注后自动回复功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 对于微信公众号关注图文跳转网页的场景实现,微号帮平台提供了粉丝关注定时推送功能实现,公众平台提供了开发接口编程实现功能效果,都能实现微信公众号关注图文跳转网页,只要网页能正常在个人微信上打开浏览都能...

    对于微信公众号关注图文跳转网页的场景实现,微号帮平台提供了粉丝关注定时推送功能实现,公众平台提供了开发接口编程实现功能效果,都能实现微信公众号关注图文跳转网页,只要网页能正常在个人微信上打开浏览都能设置跳转,方便公众号给网页引流粉丝。

    功能粉丝关注定时推送,在线为微信公众号实现关注推送文本信息,单图文,卡券,小程序,视频,图片,语音类型,文本信息能插入粉丝昵称,头像,openid,页面模板专辑链接,文章h5链接,小程序链接,会话代码,表情符号,单图文能插入粉丝昵称,粉丝头像,粉丝openid,页面模板专辑链接,文章h5链接,表情符号,小程序能插入粉丝昵称, openid,表情符号;按粉丝标签分组指定推送,修改消息的昵称和头像,定时0秒到48小时之间的时间点推送,定时0秒即关注立即推送,免打扰时段设置,已设置时段不会推送消息,关注定时推送消息一次上限20条。

    使用条件

    ⒈已微信认证的公众号

    ⒉已授权公众号给微号帮

    操作教程

    1、在微号帮平台上完成新用户注册操作。

    fbd5fb65b4cbf5a7601ac3b6b43fc5dd.png

    2、注册成功后,通过用户名和密码登录微号帮平台。

    a4bbeb42dd0eb35a7afa82814b2e7ca3.png

    3、登录成功后,进入管理中心,选择添加公众号,使用公众号管理员个人微信扫码授权给微号帮。

    f7c137243ff87b8bca9e194d79099436.png

    4、公众号管理员个人微信扫码后,点击授权,将公众号的全部接口授权给微号帮,确保功能的效果完全实现。

    98170aeab1e2035b7eaacd6a07fd464e.png

    5、进入功能管理

    公众号授权成功后,进入管理中心,选择我的公众号,然后点击授权公众号的功能管理。

    c1d8f21f0556c8a242259e8b8ef678d5.png

    6、进入功能管理后,找到高级功能,选择功能粉丝关注定时推送,点击推送信息设置,支持微信公众号关注图文消息跳转网页。

    cd818e711d2445ef55e291c059a2670d.png

    7、进入推送信息设置,点击自定义弹出信息,根据页面提示完成操作设置,支持推送文本信息,单图文,图片,语音,视频,卡券,小程序类型消息,支持按粉丝标签分组推送,支持修改推送消息昵称和头像。

    ba2898aef839372f3c5d54c9b60d3062.png

    8、保存成功后,进入粉丝关注定时推送页面,选择对应行,点击对应粉丝关注后多长时间推送一列上的修改,支持设置定时0秒到48小时的时间点,0秒即关注就立即推送消息。

    bdb637da5c2060048784901e4b208fc7.png

    9、定时时间设置成功后,点击对应行中的开启,然后重新关注授权的公众号等待定时推送,不开启不会自动关注定时推送消息。

    ab0ac750a144644aff50ff825734f670.png

    10、微信公众号关注推送图文消息跳转网页功能,在个人微信上的演示效果。

    b0b2251bbd6c77b35e3810c6ed453bfc.png
    展开全文
  • 微信公众号授权,微信验证,微信关注接口,微信获取code获取用户信息,微信官方文档https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html
  • 获取关注微信公众号的用户信息,及没有关注的,提示获取用户信息权限等
  • 本篇介绍的二维码登录不是微信开发平台的二维码登录,而是利用微信公众号临时二维码扫码事件关注公众号进行登录注册, 浏览器判断扫码状态有两种方式, 第一种是ajax每隔一秒进行轮询,如果用户扫码了则后台给个...

    基于公众号实现微信扫码登录,扫码登录同时关注公众号

    引言

    本篇介绍的二维码登录不是微信开发平台的二维码登录,而是利用微信公众号临时二维码扫码事件关注公众号进行登录注册,登录的同时关注了公众号,一举两得

    浏览器判断扫码状态有两种方式,

    第一种是ajax每隔一秒进行轮询,如果用户扫码了则后台给个成功状态

    第二种是进入页面后链接websocket等待服务器主动通知,

    优缺点分析:

    轮询:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接。 
    优点:后端程序编写比较容易。 
    缺点:请求中有大半是无用,浪费带宽和服务器资源。 

    websocket

    优点:在无消息的情况下不会频繁的请求,耗费资源小。 
    缺点:服务器报纸连接会消耗资源

    视频教程

    https://study.163.com/provider/480000002210444/index.htm?share=2&shareId=480000002210444

    简单流程

    1. 后台监听websocket
    2. 浏览器请求登录页--
    3. 后台生成微信零时二维码(带参数uid)--
    4. 浏览器显示二维码并连接websocket---
    5. 用户扫码
    6. 微信服务器通知业务服务器
    7. 服务器获取到用户信息进行注册并生成token通过websocket通知浏览器登陆成功
    8. 浏览器携带token跳转到登陆成功页面

    实现

    1.后台开启websocket

    这里以tp5集成的workman为例进行设置,跟自己下载的基本相同,其他框架或自己安装的请参考workman官方文档

    1.安装workerman     

    1. tp5文档:https://www.kancloud.cn/manual/thinkphp5_1/354134
    composer require topthink/think-worker=2.0.*

     2.配置 config/worker_server.php

    因为tp5配置方式不支持自定义函数(或许是我没找到),这里使用自定义类作为Worker服务入口文件类,在配置文件里填写服务类名即可开启,

    // 扩展自身需要的配置
        'protocol'       => 'websocket', // 协议 支持 tcp udp unix http websocket text
        'host'           => '0.0.0.0', // 监听地址
        'port'           => 2345, // 监听端口
        'socket'         => '', // 完整监听地址
        'context'        => [], // socket 上下文选项
        'worker_class'   => 'app\http\Worker', // 自定义Workerman服务类名 支持数组定义多个服务
    
        // 支持workerman的所有配置参数
        'name'           => 'thinkphp',
        'count'          => 4,
        'daemonize'      => false,
        'pidFile'        => Env::get('runtime_path') . 'worker.pid',
    

    Worker.php

     

     

    ps:这里把浏览器第一次发来的信息作为uid保存,为了后面主动给浏览器发送消息,

    必须设置心跳,客户端每隔一定时间向服务器发送消息,不然超过超时时间服务器将断开连接,避免客户端异常时浪费资源

    $inner_text_worker内部服务是为了后面扫码成功后接收通知,然后向特定客户端发送消息用

    详细请参考:https://wenda.workerman.net/question/508

    <?php
    namespace app\http;
    
    use think\worker\Server;
    use Workerman\Lib\Timer;
    use Workerman\Worker as W;
    
    class Worker extends Server
    {
        protected $socket = 'websocket://0.0.0.0:2345';
    
        /**
         * 每个进程启动
         * @param $worker
         */
    
    
        public function onWorkerStart($worker)
        {
            // 开启一个内部端口,方便内部系统推送数据,Text协议格式 文本+换行符
            $inner_text_worker = new W('Text://0.0.0.0:5678');
            $inner_text_worker->onMessage = function($connection, $buffer)
            {
                // $data数组格式,里面有uid,表示向那个uid的页面推送数据
                $data = json_decode($buffer, true);
                $uid = $data['uid'];
                // 通过workerman,向uid的页面推送数据
                $ret = $this->sendMessageByUid($uid, $buffer);
                if ($ret)
                {
                    $msg['error'] = 0;
                    $msg['msg'] = 'ok';
                }else{
                    $msg['error'] = 1;
                    $msg['msg'] = '异常';
                }
                $msg = json_encode($msg);
    
                // 返回推送结果
                $connection->send($msg);
            };
            $inner_text_worker->listen();
    
            // 心跳间隔55秒
            define('HEARTBEAT_TIME', 55);
            Timer::add(1, function()use($worker){
                $time_now = time();
                foreach($worker->connections as $connection) {
                    // 有可能该connection还没收到过消息,则lastMessageTime设置为当前时间
                    if (empty($connection->lastMessageTime)) {
                        $connection->lastMessageTime = $time_now;
                        continue;
                    }
                    // 上次通讯时间间隔大于心跳间隔,则认为客户端已经下线,关闭连接
                    if ($time_now - $connection->lastMessageTime > HEARTBEAT_TIME) {
                        $connection->close();
                    }
                }
            });
        }
    
        public function onMessage($connection,$data)
        {
            global $worker;
            // 判断当前客户端是否已经验证,即是否设置了uid
            if(!isset($connection->uid))
            {
                // 没验证的话把第一个包当做uid(这里为了方便演示,没做真正的验证)
                $connection->uid = $data;
                /* 保存uid到connection的映射,这样可以方便的通过uid查找connection,
                 * 实现针对特定uid推送数据
                 */
                $worker->uidConnections[$connection->uid] = $connection;
                //return $connection->send('login success, your uid is ' . $connection->uid);
            }
            // 给connection临时设置一个lastMessageTime属性,用来记录上次收到消息的时间
            $connection->lastMessageTime = time();
            //$connection->send('receive success');
            echo $data;
            echo "\n";
        }
    
        public function onConnect($connection)
        {
    
        }
    
        /**
         * 当连接断开时触发的回调函数
         * @param $connection
         */
        public function onClose($connection)
        {
            global $worker;
            if(isset($connection->uid))
            {
                // 连接断开时删除映射
                unset($worker->uidConnections[$connection->uid]);
            }
        }
        /**
         * 当客户端的连接上发生错误时触发
         * @param $connection
         * @param $code
         * @param $msg
         */
        public function onError($connection, $code, $msg)
        {
            echo "error $code $msg\n";
        }
    
    
        // 针对uid推送数据
        public function sendMessageByUid($uid, $message)
        {
            global $worker;
            if(isset($worker->uidConnections[$uid]))
            {
                $connection = $worker->uidConnections[$uid];
                $connection->send($message);
                return true;
            }
            return false;
        }
    
    
    }

     启动服务器  如下图

    php think worker:server

     

    2.生成微信临时二维码  (这里使用easywechat,详细请看我其他相关博文)

    生成唯一uid,并把uid当做二维码的场景值生成二维码

    public function index()
        {
            $uid = make_uid();
            //$ticket = Cache::store('redis')->get('login_ticket');
            $ticket = $this->loginCode($uid);
            Cache::store('redis')->set('login'.$uid,1,600);
            $data = array(
                'uid' => $uid,
                'ticket' => $ticket
            );
            return view('index',$data);
        }
    
    
    
        public function loginCode($uid)
        {
            $config = [
                'app_id' => Option::get('app_id')->option_value,
                'secret' => Option::get('app_secret')->option_value,
                'token' => Option::get('app_token')->option_value,
                'response_type' => 'array',
                'log' => [
                    'level' => 'debug',
                    'file' => Env::get('runtime_path').'/wechat.log',
                ],
                'oauth' => [
                    'scopes'   => ['snsapi_userinfo'],
                    'callback' => '/index/login/oauth_callback',
                ],
            ];
            $app = Factory::officialAccount($config);
            $result = $app->qrcode->temporary($uid, 600);
    
            $url = $app->qrcode->url($result['ticket']);
            return $url;
    
        }
    
    /**
     * Notes:生成UID
     * @auther: xxf
     * Date: 2019/7/17
     * Time: 17:28
     * @return string
     */
    function make_uid()
    {
        @date_default_timezone_set("PRC");
        //号码主体(YYYYMMDDHHIISSNNNNNNNN)
        $order_id_main = date('YmdHis') . rand(10000000,99999999);
        $order_id_len = strlen($order_id_main);
        $order_id_sum = 0;
        for($i=0; $i<$order_id_len; $i++){
            $order_id_sum += (int)(substr($order_id_main,$i,1));
        }
        //唯一号码(YYYYMMDDHHIISSNNNNNNNNCC)
        $uid = $order_id_main . str_pad((100 - $order_id_sum % 100) % 100,2,'0',STR_PAD_LEFT);
        return $uid;
    }

     

    3.浏览器显示二维码并向后台发送uid

    前端页面index.html

     

    ps:每隔30秒向服务器发送一条数据,避免超时,

    onmessage里,后台返回token说明登录成功,进行跳转
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <link rel="stylesheet" type="text/css" href="__CSS__/common.css">
        <link rel="stylesheet" type="text/css" href="__CSS__/weLogin.css" />
        <title>微信登录</title>
    </head>
    
    <body>
    <div class="login block">
        <div class="we-login">
            <p class="login-title">微信登录</p>
            <div class="login-img">
                <img src="{$ticket}" />
            </div>
            <div class="login-desc">
                <p><span>扫码</span>
                    <span>></span>
                    <span>关注</span>
                    <span>></span>
                    <span>登录</span></p>
            </div>
        </div>
    </div>
    
    <script>
        var wsServer = 'ws://127.0.0.1:2345';
        var websocket = new WebSocket(wsServer);
        websocket.onopen = function (evt) {
            console.log("Connected to WebSocket server.");
            //ws.send("Hello WebSockets!");
            websocket.send("{$uid}");
            //设置心跳,避免服务器断开
            setInterval(function () {
                websocket.send("{$uid}");
            }, 30000)
        };
    
        websocket.onclose = function (evt) {
            console.log("Disconnected");
        };
    
        websocket.onmessage = function (evt) {
            console.log('Retrieved data from server: ' + evt.data);
            var res = JSON.parse(evt.data);
            if(res.token !== '' && res.token !== undefined){
                window.location='/index/login/login?token='+res.token;
            }
        };
    
        websocket.onerror = function (evt, e) {
            console.log('Error occured: ' + evt.data);
        };
    </script>
    </body>
    
    </html>

    4.用户扫码,后台进行注册与通知

    微信消息处理请看:https://blog.csdn.net/flysnownet/article/details/90239582

     

    <?php
    
    namespace app\api\controller;
    
    use app\common\model\Option;
    use EasyWeChat\Kernel\Messages\News;
    use EasyWeChat\Kernel\Messages\NewsItem;
    use think\Controller;
    use think\facade\Env;
    use think\Request;
    use EasyWeChat\Factory;
    use think\facade\Session;
    use message\MessageHandler;
    
    /**微信消息处理
     * Class Message
     * @package app\api\controller
     */
    class Message extends Controller
    {
    
        public function __construct(Request $request)
        {
            global $_W;
            $_W['config'] = [
                'app_id' => Option::get('app_id')->option_value,
                'secret' => Option::get('app_secret')->option_value,
                'token' => Option::get('app_token')->option_value,
                'response_type' => 'array',
                'log' => [
                    'level' => 'debug',
                    'file' => Env::get('runtime_path').'/wechat.log',
                ],
                'oauth' => [
                    'scopes'   => ['snsapi_userinfo'],
                    'callback' => '/index/login/oauth_callback',
                ],
            ];
    
            //微信首次接入验证
            if (!empty($_GET['echostr']) && $this->checkSignature($_W['config']['token'])) {
                header('content-type:text');
                echo $_GET['echostr'];
                exit;
            }
        }
    
    
        public function index(Request $request)
        {
            global $_W;
            $app = Factory::officialAccount($_W['config']);
    
            $app->server->push(function ($message) {
                // $message['FromUserName'] // 用户的 openid
                // $message['MsgType'] // 消息类型:event, text....
    
                $handler = new MessageHandler($message);
                switch ($message['MsgType']) {
                    case 'event':
                        //return '收到事件消息';
                        return $handler->eventHandler($message['FromUserName']);
                        break;
                    case 'text':
                        //return '收到文字消息';
                        return $handler->textHandler($message['FromUserName']);
                        break;
                    case 'image':
                        return '收到图片消息';
                        break;
                    case 'voice':
                        return '收到语音消息';
                        break;
                    case 'video':
                        return '收到视频消息';
                        break;
                    case 'location':
                        //return '收到坐标消息';
                        return $handler->test();
                        break;
                    case 'link':
                        return '收到链接消息';
                        break;
                    case 'file':
                        return '收到文件消息';
                    // ... 其它消息
                    default:
                        return '收到其它消息';
                        break;
                }
            });
    
            $response = $app->server->serve();
            $response->send();
            //return $response;
    
        }
    
        /*
         * 接入验签
         */
        private function checkSignature($token)
        {
            $signature = $_GET["signature"];
            $timestamp = $_GET["timestamp"];
            $nonce = $_GET["nonce"];
            $tmpArr = array($token, $timestamp, $nonce);
            sort($tmpArr);
            $tmpStr = implode($tmpArr);
            $tmpStr = sha1($tmpStr);
            if ($tmpStr == $signature) {
                return true;
            } else {
                return false;
            }
        }
    
    
    
    }
    
    
    

     

    <?php
    
    namespace message;
    
    use app\common\model\Users;
    use EasyWeChat\Kernel\Messages\Link;
    use EasyWeChat\Kernel\Messages\Message;
    use EasyWeChat\Kernel\Messages\Text;
    use EasyWeChat\Kernel\Messages\News;
    use EasyWeChat\Kernel\Messages\NewsItem;
    use think\Exception;
    use think\facade\Cache;
    use think\facade\Log;
    use EasyWeChat\Factory;
    use Token\Token;
    /**微信消息
     * Class MessageHandler
     * @package message
     */
    class MessageHandler
    {
        /*
        * 消息对象
        */
    
        private $message;
        private $user_model;
    
        public function __construct($message)
        {
            $this->message = $message;
            $this->user_model = new Users();
        }
    
        /*
         * 事件响应函数
         */
        public function eventHandler()
        {
            // $message['FromUserName'] // 用户的 openid
            // $message['MsgType'] // 消息类型:event, text....
            global $_W;
            switch ($this->message['Event']) {
                //关注事件
                case 'subscribe':
                    if (!empty($this->message['EventKey'])) {
                        $uid = substr($this->message['EventKey'],8);
                        $res = $this->loginEvent($uid);
                        return $res;
                    }
                    return '欢迎关注';
                    break;
                //取消关注事件
                case 'unsubscribe':
                    return $this->unSubscribe();
                    break;
                //点击事件
                case 'CLICK':
                    return '点击';
                    break;
                //扫描事件
                case 'SCAN':
                    $res = $this->loginEvent($this->message['EventKey']);
                    return $res;
                    //return '取关';
                    break;
                default:
                    return '收到其它消息';
                    break;
            }
        }
    
    
    
        public function LoginEvent($uid)
        {
            global $_W;
            //注册
            $openid = $this->message['FromUserName'];
            $user_id = $this->addMember($openid);
    
            $jwtToken = new Token();
            $tokenData = array(
                'user_id' => $user_id,
            );
            $token = $jwtToken->createToken($tokenData, 86400)['token'];
            $time_out = Cache::store('redis')->get('login'.$uid);
            if (empty($time_out))
                return "二维码过期,请重新登陆";
            $data = array(
                'uid' => $uid,
                'token' => $token
            );
            $res = $this->sendSocket($data);
            if($res)
                return "登录成功";
            else
                return '登录异常';
    
    
    
        }
    
    
    
        private function addMember($openid)
        {
            global $_W;
            $user_info = $this->user_model->getInfoByOpenId($openid);
            if (empty($user_info))
            {
                $app = Factory::officialAccount($_W['config']);
                $user_detail = $app->user->get($openid);
                $data = array(
                    'nickname' => $user_detail['nickname'] ?? '',
                    'openid' => $openid,
                    'gender' => $user_detail['sex'] ?? 0,
                    'avatar' => $user_detail['headimgurl'] ?? '',
                );
                $user_id = $this->user_model->addUser($data);
            }else{
                $user_id = $user_info->id;
            }
            return $user_id;
    
        }
    
    
    
        /**
         * Notes:取消关注事件
         * Date: 2019/6/19
         * Time: 14:11
         * @return bool
         */
        private function unSubscribe()
        {
            global $_W;
            $member_model = new Members();
            if ($_W['user']['id'] > 0)
            $member_model->unSubscribe($_W['user']['id']);
            return true;
    
        }
    
        public function sendSocket($data)
        {
            try{
                // 建立socket连接到内部推送端口
                $client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1);
                // 推送的数据,包含uid字段,表示是给这个uid推送
                //$data = array('uid'=>'201907181703404867264713', 'percent'=>'88%');
                // 发送数据,注意5678端口是Text协议的端口,Text协议需要在数据末尾加上换行符
                fwrite($client, json_encode($data)."\n");
    
                // 读取推送结果
                $res = fread($client, 8192);
                fclose($client);
                $res = json_decode($res,true);
                if($res['error'] == 0){
                    return true;
                }else{
                    return false;
                }
    
            }catch (\Exception $e)
            {
                return $e->getMessage();
            }
    
        }
    
    
    
    
    
    }
    

    ps:

    sendSocket() :注册成功后给内部服务推送消息,告知给$uid的客户端发送token,workerman收到推送后发送消息给浏览器

    5.浏览器收到token,进行跳转

    6.登陆成功

    public function login(Request $request)
        {
    
            $token = $request->param('token', 0);
            if (!empty($token)) {
                $jwtToken = new Token();
                $checkToken = $jwtToken->checkToken($token);
                $data = (array)$checkToken['data']['data'];
                $uid = $data['uid'] ?? 0;
                $user_id = $data['user_id'] ?? 0;
                Session::set('user_id', $user_id);
                $this->error('登陆成功', 'index/index/index');
            }
        }

     

    展开全文
  • 其实就是微信公众号的历史文章页面,会有个关注功能 打开任意微信公众号的任意一篇文章,在PC浏览器打开,微信浏览器不可以 打开代码调试,搜索biz关键字 它后面跟着的那串码复制到以下链接: ...

    其实就是微信公众号的历史文章页面,会有个关注功能

    打开任意微信公众号的任意一篇文章,在PC浏览器打开,微信浏览器不可以

    打开代码调试,搜索biz关键字

    它后面跟着的那串码复制到以下链接:

    https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=找到的部分替换==#wechat_redirect

    复制到biz= 后面即可使用 

    展开全文
  • 对于微信公众号关注图文跳转网页的场景实现,微号帮平台提供了粉丝关注定时推送功能实现,公众平台提供了开发接口编程实现功能效果,都能实现微信公众号关注图文跳转网页,只要网页能正常在个人微信上打开浏览都能...

    对于微信公众号关注图文跳转网页的场景实现,微号帮平台提供了粉丝关注定时推送功能实现,公众平台提供了开发接口编程实现功能效果,都能实现微信公众号关注图文跳转网页,只要网页能正常在个人微信上打开浏览都能设置跳转,方便公众号给网页引流粉丝。

    微信公众号关注图文跳转网页如何操作实现?现能通过微号帮平台的功能实现,新用户注册、扫码授权添加公众号,立即免费试用7天!试用满意再在线支付开通,不满意随时在公众号平台取消授权给微号帮平台。

    功能粉丝关注定时推送,在线为微信公众号实现关注推送文本信息,单图文,卡券,小程序,视频,图片,语音类型,文本信息能插入粉丝昵称,头像,openid,页面模板专辑链接,文章h5链接,小程序链接,会话代码,表情符号,单图文能插入粉丝昵称,粉丝头像,粉丝openid,页面模板专辑链接,文章h5链接,表情符号,小程序能插入粉丝昵称, openid,表情符号;按粉丝标签分组指定推送,修改消息的昵称和头像,定时0秒到48小时之间的时间点推送,定时0秒即关注立即推送,免打扰时段设置,已设置时段不会推送消息,关注定时推送消息一次上限20条。

    微信公众号设置关注图文跳转网页操作方法:

    1、在微号帮平台上完成新用户注册操作,>>免费注册试用7天

    fb8309160446de266c2618f73b530556.png

    2、注册成功后,通过用户名和密码登录微号帮平台,>>立即登录

    fa359f774d75fd85a87bd2f4d990801d.png

    3、登录成功后,进入管理中心,选择添加公众号,使用公众号管理员个人微信扫码授权给微号帮。

    c3956f4be4fd7e35eb77c17ccf30a15a.png

    4、公众号管理员个人微信扫码后,点击授权,将公众号的全部接口授权给微号帮,确保功能的效果完全实现。

    8ac5c5e1a147bbd7e658326b65fe76ad.png

    5、进入功能管理

    公众号授权成功后,进入管理中心,选择我的公众号,然后点击授权公众号的功能管理。

    7ea2cf7d33aa8b9ca2baf4959b3d0788.png

    6、进入功能管理后,找到高级功能,选择功能粉丝关注定时推送,点击推送信息设置,支持微信公众号关注图文消息跳转网页。

    e4559543ce85ba7146e52ac61a9ea61b.png

    7、进入推送信息设置,点击自定义弹出信息,根据页面提示完成操作设置,支持推送文本信息,单图文,图片,语音,视频,卡券,小程序类型消息,支持按粉丝标签分组推送,支持修改推送消息昵称和头像。

    65ab3d89b1107bb0baa158a6470e33f4.png

    8、保存成功后,进入粉丝关注定时推送页面,选择对应行,点击对应粉丝关注后多长时间推送一列上的修改,支持设置定时0秒到48小时的时间点,0秒即关注就立即推送消息。

    cea3d8b2ed02c652ba8dd3e438d4e210.png

    9、定时时间设置成功后,点击对应行中的开启,然后重新关注授权的公众号等待定时推送,不开启不会自动关注定时推送消息。

    3118aef4b3fd9e0672779d8105ee5f3b.png

    10、微信公众号关注推送图文消息跳转网页功能,在个人微信上的演示效果。现微号帮平台全部功能注册授权添加公众号,立即免费试用7天!

    0d977825dfd48a7ee01a291ba82d0694.png
    展开全文
  • 微信开发碰到一个问题,...如果通过好友窗口链接进入就可以弹出授权页面,但是如果是通过公众号菜单按钮进入就不会弹出这...是微信公众号关注相当于默认授权了嘛?有没有遇到过相同的问题的?</p>
  • 对于微信公众号关注图文跳转网页的场景实现,微号帮平台提供了粉丝关注定时推送功能实现,公众平台提供了开发接口编程实现功能效果,都能实现微信公众号关注图文跳转网页,只要网页能正常在个人微信上打开浏览都能...
  • 实现基于springboot的web管理端与微信公众号关注用户的消息会话 原始需求: 小程序用户在进入小程序进行下单消费,然后关注公众号,在公众号里会发消息到微信公众号服务器,此时web端需要展示该用户发过来的消息...
  • 点击链接跳转到微信公众号关注页、微信关注链接

    万次阅读 热门讨论 2018-10-25 14:46:09
    感觉现在微信又更新了,原来 好好的方法...现在的公众号引流一般都只能是 二维码扫码后关注,那么通过点击一段网页链接(图片、或文字)怎么引导用户到公众号关注页呢? 一、首先打开需要设置关注页 的公众号 此时...
  • 1.获取微信公众号关注页面链接 我是这样获取biz值的:分享一篇该公众号的文章到QQ,然后在QQ里点开这篇文章,打开右上角3个点,复制链接,这个链接里就有biz的值了! 最终拼凑成这样子:【复制到微信中打开】 ...
  • 1.获取微信公众号关注页面链接 我是这样获取biz值的:分享一篇该公众号的文章到QQ,然后在QQ里点开这篇文章,打开右上角3个点,复制链接,这个链接里就有biz的值了! 最终拼凑成这样子:【复制到微信中打开】 ...
  • 然后开始整理思路,想要获取微信公众号管理后台数据,肯定是要调用微信公众号后台接口,参考官方的接口文档 可以看见我们在URL参数中我们需要填写access_token这个参数,另一个可以不填写,如果你不知道这个参数...
  • 微信公众号关注后,可以通过客服消息向用户发送些欢迎、使用指南之类的。发送客服消息发送客服消息,只需要在用户关注之后执行即可,并不需要在公众号后台添加客服插件,也并不需要添加客服人员。public void ...
  • Hello2BizUser的方法失效了之后,如何设置微信公众号关注后自动回复图文消息和自定义链接? 导言 Hello2BizUser的方法失效了之后,如何设置微信公众号关注后自动回复图文消息和自定义链接?通过网站:open.vip666....
  • 最近,对微信公众号有点兴趣,就自己研究了研究里面的一些内容,发现还挺... 我想,做微信公众号开发的,对于想获取关注了公众号的用户信息,或者说是当前与后台服务器进行交互的当前用户信息,这个功能是很重要...
  • 对于微信公众号关注图文跳转网页的场景实现,微号帮平台提供了粉丝关注定时推送功能实现,公众平台提供了开发接口编程实现功能效果,都能实现微信公众号关注图文跳转网页,只要网页能正常在个人微信上打开浏览都能...
  • 目前用的多的方法是用公众号发表一篇文章,文章里面一般是一个GIF的箭头图片指向公众号关注。 这种方法有点取巧。 今天要介绍的是另一种方法,感觉应该不会被微信封号。 起因 有个朋友在segmentfault上发了一个链接...
  • 微信公众号开发,在开启服务器配制后,自动回复与自定义菜单将会失效,这时候就需要接口设置自动回复与公众号菜单,这里讲解用户关注公会总号后,自动回复欢迎语 首先服务器配置 在填写的服务器地址中(一般使用...
  • 微信公众号目前分为服务号、订阅号1、服务号给企业和组织提供更强大的业务服务与用户管理能力,帮助企业快速实现全新的公众号服务平台。支持公众号关注来源统计查询,应用到渠道二维码功能,还有可以发送关键词绑定...
  • 最近一直在研究php写的微信公众号回复功能,论坛博客一大堆的现成代码,最开始以为是烂大街了,却一个又一个的拿来修改测试,发现都没有用,什么鬼? 后来我就直接在微信公众号提供的php文档修改,添加自己的功能,...
  • nodejs 监控微信公众号关注事件推送

    千次阅读 2018-07-16 14:11:56
    1.首先要在微信公众号后台填写服务器信息。 具体可看微信的文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=mp1421135319 2.在服务器上配置具体代码反馈微信的验证,如第三步的 this.ctx....
  • __biz=*********==&scene=110==#wechat_redirect 接口使用说明:我们只需将biz后面的参数换成你们的公众号参数即可 ..."__biz" 后面的参数,每一个公众号都有一个唯一的,打开你微信公众号...
  • 如何获得微信公众号关注页面地址?

    万次阅读 2016-03-31 14:20:53
    目前微信公众号关注方法基本有三种: 1.扫码(公众账号生成的二维码,包括一些指纹识别的东东,http://cli.im/deqr或http://tools.xmt.cn/fastAttention) 2.通过搜索公众账号名字 3.通过阅读公众号发布出来的公众...
  • 需求场景:关注很多的微信公众号,有时候看到很好的文章,过段时间再想查看下,发现找不到历史的文章记录了,也没有一个根据文章名称检索的地方。现在利用python爬虫爬取微信公众号的文章,数据存入到数据库中。可以...
  • 最近微信更新了7.0的版本,上面的这种方式 引导 关注公众号失效了,关注按钮会一闪而过然后消失 这个通过研究了js 可以实现 https://jsonll.blog.csdn.net/article/details/102580515隐藏微信链接投诉按钮 可查看...
  • 微信公众号关注渠道来源

    千次阅读 2018-12-24 16:32:06
    获取公众号用户的基本信息,看到接口文档给的用户渠道来源类型,明显不正确,而从网上找的类型,都是截图,导致在json转对象时会出错... //返回用户关注的渠道来源, ADD_SCENE_SEARCH, //公众号搜索 ADD_SCENE_A...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,567
精华内容 10,626
关键字:

微信公众号关注