微信小程序营销:微信投票、阅读返利、发帖有奖、微信考试、口令红包、语音红包

原创| 系统说明| 一个月前| 阅读 153 次 | 0赞同 0反对

概述:板砖曾经做过一个地方门户网站,现在罗列一些曾经吸粉引流、提升活跃度的模块罗列出来,因为没有经理制作更多的模块,所以运营者可以根据自身情况拓展。

板砖博客微信功能是基于easywechat4.0开发的,在此也感谢easywechat产品团队的无私奉献。

板砖在制作微信模块的时候有3个特别需要注意的地方,其他的都是功能性逻辑问题:

1、公众号独立的服务器配置

2、跨域名借其他公众号获取openid

3、公众开放平台


如果您是运营人员而非技术人员,欢迎关注公众号“暂保密”体验功能;如果您是技术人员想看更多相关思路,请方位我的thinkphp博客:http://www.thinkphp.cn/member/article/p/1.html


首先来看看公众号独立的服务器配置,使用easywechat的部分网友在配置验证时会遇到经常不能够认证通过的情况,这种情况下板砖是这样处理的:

在确保功能稳定无误的情况下,直接返回echostr,不要尝试纠结一些小问题,否则会浪费很多时间。


然后是借用openid,很多时候运营方没有自己的服务号,这个时候通过订阅号回复获取openid的方式体验又很不好,因此板砖在tom插件中获得并改善了借用openid的方法:

<?php

/*
 * tom微信借授权
 */
$url = get_url();

$oauth_back_url = urldecode($_GET['oauth_back_url']);

preg_match("#((http|https)://[^?]*/)tom_oauth.php#", $url, $urlmatches);
if (is_array($urlmatches) && ! empty($urlmatches['0'])) {
    $url = str_replace($urlmatches['0'], $oauth_back_url, $url);
}

header('Location: ' . $url);

function get_url()
{
    $protocol = (! empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    return $url;}//////////////////////////////////////////如果你想在自己的代码中实现这一方法,那么只需要判断是否需要即可,当然在板砖博客中已经集成if ($wxasnum == 1 || $wxasnum == 10000) { $redirecturl = 'xxx.php?oauth_back_url=' . urlencode($redirecturl); }

最后来说一下公众号开放平台的问题,其实公众平台核心问题就出在管理员授权和取消授权两个问题上,其余的操作部分和普通公众号服务器授权一致,因此开发者可以注意easywechat的授权与取消授权功能上。

    /*
     * 第三方app的refreshtoken建名
     */
    private $key_refreshkey = CKEY_WX_REFRESHTOKEN;

    public function callback()
    {
        $openPlatform = Factory::openPlatform(config('openflat'));
        
        if (input('get.auth_code')) {
            $result = $openPlatform->handleAuthorize(input('get.auth_code'));
            // file_put_contents('/www/web/tlsc/web/public_html/inf.txt', json_encode($result));
            $info = $result['authorization_info'];
            $data = [
                'access_token' => $info['authorizer_access_token'],
                'refresh_token' => $info['authorizer_refresh_token'],
                'authorization_info' => json_encode($result)
            ];
            
            cache($this->key_refreshkey . $info['authorizer_appid'], $info['authorizer_refresh_token']);
            
            Db::name('op_app')->where('appid', $info['authorizer_appid'])->update($data);
            
            return redirect(url('admin/openflat/index'));
        }
        
        $server = $openPlatform->server;
        $message = $server->getMessage();
        
        switch ($message['InfoType']) {
            
            case Guard::EVENT_AUTHORIZED:
                // 处理授权成功事件
                $server->push(function ($message) {
                    // $message 为微信推送的通知内容,不同事件不同内容,详看微信官方文档
                    // 获取授权公众号 AppId: $message['AuthorizerAppid']
                    // 获取 AuthCode:$message['AuthorizationCode']
                    // 然后进行业务处理,如存数据库等...
                    
                    $appid = $message['AuthorizerAppid'];
                    $code = $message['AuthorizationCode'];
                    
                    Db::name('op_app')->where('appid', $appid)
                        ->update([
                        'authcode' => $code,
                        'status' => 'active'
                    ]);
                }, Guard::EVENT_AUTHORIZED);
                break;
            
            case Guard::EVENT_UPDATE_AUTHORIZED:
                // 处理授权更新事件
                $server->push(function ($message) {
                    
                    $appid = $message['AuthorizerAppid'];
                    $code = $message['AuthorizationCode'];
                    
                    Db::name('op_app')->where('appid', $appid)
                        ->update([
                        'authcode' => $code
                    ]);
                }, Guard::EVENT_UPDATE_AUTHORIZED);
                break;
            
            case Guard::EVENT_UNAUTHORIZED:
                // 处理授权取消事件
                $server->push(function ($message) {
                    
                    $appid = $message['AuthorizerAppid'];
                    
                    Db::name('op_app')->where('appid', $appid)
                        ->update([
                        'status' => 'cancel'
                    ]);
                }, Guard::EVENT_UNAUTHORIZED);
                break;
        }
        
        $server->serve()->send();
    }



DMAKE

本频道需要登陆后才能评论,请登录


暂无评论...