微擎 订阅
微擎是一家开源的公众平台SAAS领域技术服务提供商,成立于2013年7月,总部位于安徽宿州。微擎是免费开源的公众平台管理系统,拥有近百万的注册用户数,开发者认证超20,000名,3,000+款应用插件,10,000+应用场景,服务规模超200,000家,直接间接服务用户过亿。 [1] 展开全文
微擎是一家开源的公众平台SAAS领域技术服务提供商,成立于2013年7月,总部位于安徽宿州。微擎是免费开源的公众平台管理系统,拥有近百万的注册用户数,开发者认证超20,000名,3,000+款应用插件,10,000+应用场景,服务规模超200,000家,直接间接服务用户过亿。 [1]
信息
口    号
再小的品牌也有自己的微擎
创始人
袁文涛 [3]
总部地点
安徽宿州 [2]
中文名
微擎
经营范围
网络信息服务
成立时间
2013年7月
微擎简介
微擎 [2]  是一款基于WEB2.0(PHP+Mysql)技术架构,免费开源的公众平台管理系统,一款致力于将小程序和公众号商业化、智慧化、场景化的自助引擎。微擎提供公众号、微信小程序、支付宝小程序、百度熊掌号、移动端APP、PC网站等 [4]  多种功能,一站式满足用户招商加盟、分销代理、营销推广、餐饮酒旅、讯息获取等各个环节的需求,真正实现智慧化商业服务。 [3]  微擎在遵守现行法律和政策的前提下,对接优质产品、开发者和企业机构,为用户提供合规安全的产品和服务。 [3] 
收起全文
精华内容
下载资源
问答
  • 微擎

    千次阅读 2016-12-29 18:56:00
    首先我们要有一个微擎的安装包install.php 放在你的访问路径 确保能访问到就行   进入后会出现如下内容 点击继续   在此步骤中如果有如下错误我们需要修改权限 如果没有此错误则可跳过修改权限操作点击...

    首先我们要有一个微擎的安装包install.php

    放在你的访问路径 确保能访问到就行

     

    进入后会出现如下内容  点击继续

     

    在此步骤中如果有如下错误我们需要修改权限

    如果没有此错误则可跳过修改权限操作点击继续

     

    找到你的install.php所在路径如下操作修改权限回到页面看到说明及帮助不存在错误点击继续即可

     

    点击在线安装保持有网的状态下和完成数据库选项,管理选项的步骤点击继续

     

     

    在上步骤中继续会出现如下状态 则我们需要先去微擎论坛注册一个账号后面更新会用到

     

    在上几步骤都完成后我们则可登录到如下页面我比面发生错误需点击系统进行操作

     

     

    进入后进行更新操作

     

     

    点击后它会出现如下内容,

     

     

    稍等片刻它就会自动跳转完成以下操作

     

    完成后点击下一步更新  点击更新后到最后面多选框全选再进行下一步操作

    更新需等待


    完成后配置微信公共平台号和微擎链接就行了

     

     

     

     

     

     

     

     

    展开全文
  • 微擎设计模块详解什么是设计模块 当需要扩展微擎系统功能时,微擎提供一套扩展机制称之为“微擎模块”,每一个模块就是一个独立的功能,通过微擎系统创建、安装、更新及卸载。 以下讲解怎么在微擎系统中设计创建一个...

    a5408b726b88ccad80115ce015b2761c.png

    微擎设计模块详解

    什么是设计模块

    当需要扩展微擎系统功能时,微擎提供一套扩展机制称之为“微擎模块”,每一个模块就是一个独立的功能,通过微擎系统创建、安装、更新及卸载。

    以下讲解怎么在微擎系统中设计创建一个模块。

    2f506ac1ccb5b6e772dfedb2ed225ca0.png

    微擎模块设计助手

    可以通过 系统 - 模块 - 设计新模块 或是通过 http:%%//%%你的微擎链接/web/index.php?c=extension&a=module&do=designer& 直接进入

    设计新模块配置说明

    1. 模块基本信息

    · “模块名称”用于在系统中给用户显示出模块的名字

    · “模块标识”只能为英文,数字,下划线,为了减少模块标识的重复和冲突,系统规定模块必须有前缀,例如:we7_demo

    · “版本号”用于标识模块版本,主要是用作于模块升级更新使用

    4670c0e8310590f3d238b25714a9778a.png

    2. 模块全局配置项

    当勾选此项时,模块安装后系统会生成一个“模块配置”的菜单,用于保存一些模块内部使用的配置项。 开发者必须要完善module.php 类文件中的 public function settingsDisplay($settings){} 成员方法

    3 订阅的消息类型

    当勾选此项下的事件类型后,系统会在接收到相关类型的事件后,转发消息到模块中。模块接到消息后可以处理数据,但无法返回结果(系统不接收)。
    开发者必须要完善 receiver.php 类文件中的 public function receive(){} 成员方法

    80d2df87165903854b5abaa8cd85a407.png

    4 处理的消息类型

    当勾选此项下的事件类型后,模块有权限可以直接接管选中的事件。比如,用户向公众号发送了一图片,触发了图片事件,系统接到此事件后,会直接转到至模块中处理,并返回结果。
    开发者必须要完善 processor.php 类文件中的 public function respond(){} 方法

    5 是否要嵌入规

    当勾选此项后,模块安装后系统会自动添加“回复规则列表”菜单,用户可以设置关键字触发到模块中。 开发者必须要完善processor.php 类文件中的 public function respond(){} 方法

    83e697e0270d3b7ac4f121b840538b7e.png

    6 是否支持使用优惠券

    当勾选此项后,用户在创建(代金券和折扣券)时,模块将出现在适用模块列表中。 当添加后,模块需要完成导粉丝领取该优惠券。领取后,粉丝在该模块需要支付金钱时,可选择使用该优惠券来减免金额

    7 微站功能封面

    设置此项后,安装模块后系统会按照设置的项的标题生成出若干个设置入口菜单,管理员进入设置关键字后,粉丝可以直接通过关键字触发到该链接中。
    例如:操作名称为首页,标识为index,设置关键字为“进入首页”,触发后系统回复图文信息,粉丝点击进入 site.php 类文件中的public function doMobileIndex(){} 方法中

    db359a7b5acbd52b02ddfe5966026e77.png

    8 规则列表

    当模块开启嵌入规则后,开发者可以扩展“回复规则列表”中的功能菜单。
    开发者需要完善 site.php 类文件中的 public function doWeb{入口标识}(){} 相关方法,其显示位置如下:

    9 管理中心导航菜单

    模块安装后系统会在管理中心生成一个导航入口。
    开发者需要完善 site.php 类文件中的 public function doWeb{入口标识}(){} 相关方法

    展开全文
  • 微擎function

    2018-07-06 15:57:11
    微擎方法
    <?php
    /**
     * 易福源码网 www.efwww.com
    
     */
    defined('IN_IA') or exit('Access Denied');
    
    function _tpl_form_field_date($name, $values = '', $withtime = false) {
        $html = '';
        $html .= '<input class="mui-calendar-picker" type="text" placeholder="请选择日期" readonly value="' . $values . '" name="' . $name . '" />';
        $html .= '<input type="hidden" value="' . $values . '" name="' . $name . '"/>';
        if (!defined('TPL_INIT_CALENDAR')) {
            $html .= '
                <script type="text/javascript">
                    $(document).on("tap", ".mui-calendar-picker", function(){
                        var $this = $(this);
                        util.datepicker({type: "date", beginYear: 1970, endYear: 2026}, function(rs){
                            $this.val(rs.value)
                            .next().val(rs.value)
                        });
                    });
                </script>';
            define('TPL_INIT_CALENDAR', true);
        }
        return $html;
    }
    
    function tpl_app_fans_form($field, $value = '', $placeholder = '') {
        $placeholders[$field] = '请填写' . $placeholder;
        if(in_array($field, array('birth', 'reside', 'gender', 'education', 'constellation', 'zodiac', 'bloodtype'))) {
            $placeholders[$field] = '请选择' . $placeholder;
        }
        if($field == 'height') {
            $placeholders[$field] = '请填写' . $placeholder . '(单位:cm)';
        } elseif ($field == 'weight') {
            $placeholders[$field] = '请填写' . $placeholder . '(单位:kg)';
        }
        switch ($field) {
            case 'avatar':
                $html = tpl_app_form_field_avatar('avatar', $value);
                break;
            case 'birth':
            case 'birthyear':
            case 'birthmonth':
            case 'birthday':
                $html = tpl_app_form_field_calendar('birth', $value);
                break;
            case 'reside':
            case 'resideprovince':
            case 'residecity':
            case 'residedist':
                $html = tpl_app_form_field_district('reside', $value);
                break;
            case 'bio':
            case 'interest':
                $html = '<textarea name="' . $field . '" rows="3" placeholder="' . $placeholders[$field] . '">' . $value . '</textarea>';
                break;
            case 'gender':
            case 'education':
            case 'constellation':
            case 'zodiac':
            case 'bloodtype':
                if($field == 'gender') {
                    $options = array(
                        '0' => '保密',
                        '1' => '男',
                        '2' => '女',
                    );
                    $text_value = $options[$value];
                } else {
                    if ($field == 'bloodtype') {
                        $options = array('A', 'B', 'AB', 'O', '其它');
                    } elseif ($field == 'zodiac') {
                        $options = array('鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊', '猴', '鸡', '狗', '猪');
                    } elseif ($field == 'constellation') {
                        $options = array('水瓶座', '双鱼座', '白羊座', '金牛座', '双子座', '巨蟹座', '狮子座', '处女座', '天秤座', '天蝎座', '射手座', '摩羯座');
                    } elseif ($field == 'education') {
                        $options = array('博士', '硕士', '本科', '专科', '中学', '小学', '其它');
                    }
                    $text_value = $value;
                }
                $data = array();
                foreach($options as $key => $option) {
                    if(!$option) {
                        continue;
                    }
                    if($field == 'gender') {
                        $data[] = array(
                            'text' => $option,
                            'value' => $key
                        );
                    } else {
                        $data[] = array(
                            'text' => $option,
                            'value' => $option
                        );
                    }
                }
                if($field != 'gender') {
                    $text_value = $value;
                    unset($options);
                }
                $html = '
                    <input class="mui-'. $field .'-picker" type="text" value="'. $text_value .'" readonly placeholder="' . $placeholders[$field] . '"/>
                    <input type="hidden" name="'. $field .'" value="'. $value .'"/>
                    <script type="text/javascript">
                        $(".mui-'. $field .'-picker").on("tap", function(){
                            var $this = $(this);
                            util.poppicker({data: '. json_encode($data) .'}, function(items){
                                $this.val(items[0].text).next().val(items[0].value);
                            });
                        });
                    </script>';
                break;
            case 'nickname':
            case 'realname':
            case 'address':
            case 'mobile':
            case 'qq':
            case 'msn':
            case 'email':
            case 'telephone':
            case 'taobao':
            case 'alipay':
            case 'studentid':
            case 'grade':
            case 'graduateschool':
            case 'idcard':
            case 'zipcode':
            case 'site':
            case 'affectivestatus':
            case 'lookingfor':
            case 'nationality':
            case 'height':
            case 'weight':
            case 'company':
            case 'occupation':
            case 'position':
            case 'revenue':
            default:
                $html = '<input type="text" name="' . $field . '" value="' . $value . '"  placeholder="' . $placeholders[$field] . '"/>';
                break;
        }
        return $html;
    }
    
    function tpl_app_form_field_calendar($name, $values = array()) {
        $value = (empty($values['year']) || empty($values['month']) || empty($values['day'])) ? '' : implode('-', $values);
        $html = '';
        $html .= '<input class="mui-calendar-picker" type="text" placeholder="请选择日期" readonly value="' . $value . '" name="' . $name . '" />';
        $html .= '<input type="hidden" value="' . $values['year'] . '" name="' . $name . '[year]"/>';
        $html .= '<input type="hidden" value="' . $values['month'] . '" name="' . $name . '[month]"/>';
        $html .= '<input type="hidden" value="' . $values['day'] . '" name="' . $name . '[day]"/>';
        if (!defined('TPL_INIT_CALENDAR')) {
            $html .= '
                <script type="text/javascript">
                    $(document).on("tap", ".mui-calendar-picker", function(){
                        var $this = $(this);
                        util.datepicker({type: "date", beginYear: 1960, endYear: 2016}, function(rs){
                            $this.val(rs.value)
                            .next().val(rs.y.text)
                            .next().val(rs.m.text)
                            .next().val(rs.d.text)
                        });
                    });
                </script>';
            define('TPL_INIT_CALENDAR', true);
        }
        return $html;
    }
    
    function tpl_app_form_field_district($name, $values = array()) {
        $value = (empty($values['province']) || empty($values['city']) || empty($values['district'])) ? '' : implode(' ', $values);
        $html = '';
        $html .= '<input class="mui-district-picker-' . $name .'" placeholder="请选择地区" type="text" readonly value="' . $value . '"/>';
        $html .= '<input type="hidden" value="' . $values['province'] . '" name="' . $name . '[province]"/>';
        $html .= '<input type="hidden" value="' . $values['city'] . '" name="' . $name . '[city]"/>';
        $html .= '<input type="hidden" value="' . $values['district'] . '" name="' . $name . '[district]"/>';
        $html .= '
            <script type="text/javascript">
                $(document).on("tap", ".mui-district-picker-' . $name . '", function(){
                    var $this = $(this);
                    util.districtpicker(function(item){
                        $this.val(item[0].text+" "+item[1].text+" "+item[2].text)
                        .next().val(item[0].text)
                        .next().val(item[1].text)
                        .next().val(item[2].text);
                    });
                });
            </script>';
        return $html;
    }
    
    function tpl_app_form_field_avatar($name, $value = '') {
        $val = './resource/images/nopic.jpg';
        if (!empty($value)) {
            $val = tomedia($value);
        }
        $html = '<ul class="mui-table-view mui-table-view-chevron">
            <li class="mui-table-view-cell avatar js-avatar-'.$name.'">
                <a href="javascript:;" class="mui-navigate-right">头像
                    <div class="mui-pull-right mui-navigate-right">
                        <img class="mui-avatar-select mui-pull-left" src="' . $val. '" width="40" height="40">
                    </div>
                </a>
            </li>
        </ul>
        ';
        $href = url('mc/profile/avatar');
        $html .= "<script>
            util.image($('.js-avatar-{$name}'), function(url){
                $('.js-avatar-{$name} img').attr('src', url.url);
                $.post('" . $href . "', {'avatar' : url.attachment}, function(data) {
                    data = $.parseJSON(data);
                    if (data.type == 'success') {
                        util.toast(data.message);
                    } else {
                        util.toast('更新失败');
                    }
                })
            }, {
                crop : true
            });
        </script>";
        return $html;
    }
    
    
    function tpl_app_form_field_image($name, $value = '') {
    
        $thumb = empty($value) ? 'images/global/nopic.jpg' : $value;
        $thumb = tomedia($thumb);
    
        $html = <<<EOF
        <div class="mui-table-view-chevron">
            <div class="mui-image-uploader">
                <a href="javascript:;" class="mui-upload-btn mui-pull-right js-image-{$name}"></a>
                <div class="mui-image-preview js-image-preview mui-pull-right"></div>
            </div>
        </div>
        <script>
            util.image($('.js-image-{$name}'), function(url){
                $('.js-image-{$name}').parent().find('.js-image-preview').append('<input type="hidden" value="'+url.attachment+'" name="{$name}[]" /><img src="'+url.url+'" data-id="'+url.id+'" data-preview-src="" data-preview-group="__IMG_UPLOAD_{$name}" />');
            }, {
                crop : false,
                multiple : true,
                preview : '__IMG_UPLOAD_{$name}'
            });
        </script>
    EOF;
        return $html;
    }
    
    function tpl_app_coupon_item($item) {
        load()->model('activity');
        $type_names = activity_coupon_type_label();
        if ($item['type'] == COUPON_TYPE_DISCOUNT) {
            $icon = '<div class="price">'.$item['extra']['discount'] * 0.1.'<span>折</span></div>';
        } elseif ($item['type'] == COUPON_TYPE_CASH) {
            $icon = '<div class="price">' . $item['extra']['reduce_cost'] * 0.01 . '<span>元</span></div><div class="condition">满' . $item['extra']['least_cost'] * 0.01 . '元可用</div>';
        } elseif ($item['type'] == COUPON_TYPE_GROUPON) {
            $icon = '<img src="resource/images/groupon.png" alt="" />';
        } elseif ($item['type'] == COUPON_TYPE_GIFT) {
            $icon = '<img src="resource/images/wx_gift.png" alt="" />';
        } elseif ($item['type'] == COUPON_TYPE_GENERAL) {
            $icon = '<img src="resource/images/general_coupon.png" alt="" />';
        }
        $extra_func = '<div class="mui-col-xs-5 mui-text-info integral-info"><img src="' . $item['extra_func']['pic'] .'" alt=""/><span>' . $item['extra_func']['credit'] . '</span></div>';
        $html .= '
            <div class="coupon-panel-info mui-mb10">
                <div class="mui-row">
                    <div class="mui-col-xs-4 mui-text-center">
                        <div class="coupon-panel-left">'
                . $icon .
                '</div>
                    </div>
                    <div class="mui-col-xs-8">
                        <div class="mui-row">
                            <div class="mui-col-xs-7 store-title mui-ellipsis">' . $item['title']. '</div>
                            ' . $extra_func . '
                        </div>
                        <div class="date">' . $item['extra_date_info'] . '</div>
                        <div class="coupon-rules mui-text-muted js-scan-rules">' . $type_names[$item['type']][0] . '使用规则<span class="fa fa-angle-down"></span></div>
                        <a class="use-token js-coupon-exchange" data-id="' . $item['id'] . '" data-source="' . $item['source'] . '" data-href="' . $item['extra_href'] . '">
                            <span class="mui-block icon-use-token">⇌</span>
                            <span class="mui-block">兑换</span>
                        </a>
                    </div>
                </div>
                <div class="coupon-rules-con js-rules-show" style="display:none;">
                    <div>' . $item['description'] . '</div>
                </div>
            </div>
        ';
        return $html;
    }
    
    function tpl_form_field_image($name, $value) {
        $thumb = empty($value) ? 'images/global/nopic.jpg' : $value;
        $thumb = tomedia($thumb);
        $html = <<<EOF
    <style>
    .webuploader-pick {color:#333;}
    </style>
    <div class="input-group">
        <input type="hidden" name="$name" value="$value" class="form-control" autocomplete="off" readonly="readonly">
        <a class="btn btn-default js-image-{$name}">上传图片</a>
    </div>
    <span class="help-block">
        <img src="$thumb" >
    </span>
    
    <script>
        util.image($('.js-image-{$name}'), function(url){
            $('.js-image-{$name}').prev().val(url.attachment);
            $('.js-image-{$name}').parent().next().find('img').attr('src',url.url);
        }, {
            crop : false,
            multiple : false
        });
    </script>
    EOF;
        return $html;
    }
    

    微擎function

    展开全文
  • 首先对微擎的工作原理做简单描述, 微擎使用规则和模块的机制来处理公众平台的请求数据并返回响应的结果.执行流程描述为: 粉丝用户与公众号码进行对话或交互, 而后公众平台将粉丝用户的请求消息(当前包括: 文本, 图片...

    首先对微擎的工作原理做简单描述, 微擎使用规则和模块的机制来处理公众平台的请求数据并返回响应的结果.

    执行流程描述为: 粉丝用户与公众号码进行对话或交互, 而后公众平台将粉丝用户的请求消息(当前包括: 文本, 图片, 位置, 链接, 事件. 请参阅消息类型)传递给微擎系统, 微擎系统按照消息类型和对应的公众号所设定的规则列表匹配到合适的规则(请参阅消息路由), 规则定义中包括处理此消息所使用的模块和此模块处理消息时所需要的其他附加数据(请参阅模块定义), 而后模块将会按照请求的消息数据和模块附加数据进行相关业务处理并返回处理结果(请参阅响应类型), 微擎系统将处理结果返回给公众平台, 而后经公众平台返回给粉丝用户.

    微擎的主处理流程实现定义于: engine.php 中, 如有需要请参阅源码.

    消息类型

    消息类型指粉丝用户通过公众平台与微擎进行交互时所提供的消息数据的类型. 消息类型基于微信公众平台提供的数据接口, 微擎在其基础上进行包装处理, 方便PHP开发者进行业务处理. 保存消息的基本对象结构定义为:$message => array(

    'from' => '', //string: 发送消息方, 代表一个粉丝用户(使用OpenID表示)

    'to' => '',//string: 消息接收方, 对应当前的公众号(使用OpenID表示)

    'time' => '', //int: 消息发送时间, 使用Unix时间戳表示

    'type' => '', //string: 消息类型, 用于区分不同类型的消息, 请参阅下文

    'msgid' => '' //int: 消息ID, 公众平台系统用于唯一标识一条请求消息

    );

    消息类型同公众平台官方不同之处在于将event类型拆分开为独立的消息类型, 避免了重复判断. 根据消息类型不同, 消息对象结构还存在不同的附加数据, 按照类型定义如下:文本消息

    粉丝用户向公众号发送了一条普通文本消息(包括包含表情的消息, 或者纯表情消息), 处理文本消息可以实现简单的文本对话, 结合使用文本上下文(请参阅上下文处理)可以实现调查, 测试等复杂的交互.$message => array(

    //....全局数据

    'type' => 'text', //string: 代表当前消息为文本消息

    'content' => '' //string: 文本消息内容

    );图片消息

    粉丝用户向公众号发送了一张图片, 处理图片消息可以实现分享用户图片的相关功能$message => array(

    //....全局数据

    'type' => 'image', //string: 代表当前消息为图片消息

    'url' => 'http://same.im/image.jpg' //string: 用户所发送的图片地址

    );地理位置消息

    粉丝用户向公众号发送了一条地理位置, 处理地理位置消息可以实现lbs相关功能(参阅LBS方案)$message => array(

    //....全局数据

    'type' => 'location', //string: 代表当前消息为位置消息

    'location_x' => '', //float: 代表位置经度

    'location_y' => '', //float: 代表位置纬度

    'scale' => '', //int: 表示地图缩放倍数

    'label' => '' //float: 表示地点描述

    );链接消息

    粉丝用户向公众号发送了一条链接消息, 处理链接消息可以实现好友分享等社交功能$message => array(

    //....全局数据

    'type' => 'link', //string: 代表当前消息为链接消息

    'title' => '', //float: 代表链接标题

    'description' => '',//float: 代表链接描述信息

    'scale' => 'url'//int: 表示链接的URL

    );关注消息

    粉丝用户关注当前公众号后将会获得此消息, 处理此消息可以实现欢迎信息和粉丝增长统计$message => array(

    //....全局数据

    'type' => 'subscribe' //string: 代表当前消息为关注消息

    );取消关注消息

    粉丝用户取消关注当前公众号后将会获得此消息, 处理此消息可以实现粉丝数量增长分析$message => array(

    //....全局数据

    'type' => 'unsubscribe' //string: 代表当前消息为取消关注消息

    );菜单点击消息

    粉丝用户点击自定菜单后, 如果菜单设置为消息回复, 那么将会获得此消息, 处理此消息能实现自定义菜单的特定回复$message => array(

    //....全局数据

    'type' => 'CLICK', //string: 代表当前消息为菜单点击消息

    'eventkey' => ''//string: 菜单点击附加的菜单数据信息

    );

    消息路由

    消息路由是指粉丝用户经公众平台发送消息内容至微擎时, 微擎系统查找对应的规则记录, 并将消息分配至合适的模块处理的过程. 微擎系统按照不同的消息类型, 进行不同的处理. 处理方式如下:上下文消息路由

    微擎支持上下文操作, 通过上下文支持微擎可将用户对话锁定至特定的模块, 如果当前消息是上下文对话的消息, 那么将会自动路由至上下文锁定的模块. (请参阅 上下文处理)

    '文本消息规则匹配(重要)

    针对文本消息, 微擎使用文本匹配来选择合适的规则和模块, 规则是指针对特定消息的处理方式. 微擎选择规则的方式包括:* 关键字包含 指粉丝用户发送的消息内容含有指定的关键字就指派到特定规则.

    * 内容等价 指粉丝用户发送的消息内容完全等于指定的内容才指派到特定规则.

    * 正则表达式 指粉丝用户发送的消息类型符合指定正则表达式定义的模式时指派到特定规则.(高级模式, 需要有编程经验)其他类型消息路由规则

    图片消息, 位置消息, 链接消息等其他类型请求消息的路由支持正在紧张开发中

    模块定义

    上下文处理

    微擎现已支持上下文锁定对话, 可以将粉丝用户的对话锁定至特定模块. 用以实现在线调查, 在线测试等类似的功能. 微擎的上下文操作使用 $_SESSION + DB 来实现.上下文数据保存在$_SESSION['context']变量中,并与sessions表中数据做一对一的映射,用户可通过操作sessions表中的数据进行上下文会话的基本管理. 要实现上下文操作主要使用 Processor 里的内定方法:public inContext;

    本次对话是否为上下文响应对话, 如果当前对话是由上下文锁定而路由到的. 此值为 true, 否则为 false

    protected function beginContext($expire = 3600);

    请在模块处理程序中调用此函数已开始一个新的上下文对话.

    附加的参数 $expire 说明本次会话的失效时间. 例如 $this->beginContext(1800) 就说明启动一次上下文会话锁定, 并且本次会话将会于30分钟后释放, 如果不固定超时的话, 请在每次请求时调用 beginContext

    protected function endContext();

    在模块处理程序中调用 endContext 来结束一次会话, 并销毁会话中保存的所有数据(当前为 $_SESSION)

    protected function refreshContext($expire = 0); 在模块处理程序中调用 refreshContext 来刷新用户处于上下文的时限.超过时限用户将会自动退出上文环境.

    protected function addParamContext($var, $val = ''); 在模块处理程序中调用 addParamContext 用于增加上下文中的附加数据,此数据将会一直存在于上下文消息中,用户可通过 $this->context 变量来调用保存的数据.

    下面的示例将演示根据血型查性格的简单例子:class BloodTestModuleProcessor extends WeModuleProcessor {

    //void: 所有处理程序必须实现虚函数 respond. 用以响应消息

    public function respond() {

    if(!$this->inContext) {

    $reply = '请输入你的血型(A, B, O, AB), 来分析你今年的运程. ';

    $this->beginContext();

    // 如果是按照规则触发到本模块, 那么先输出提示问题语句, 并启动上下文来锁定会话, 以保证下次回复依然执行到本模块

    } else {

    $btypes = array('a', 'b', 'o', 'ab');

    $b = strtolower($this->message['content']);

    // 如果当前会话在上下文中, 那么表示当前回复是用户回答提示问题的答案.

    if(in_array($b, $btypes)) {

    switch($b) {

    case 'a':

    $reply = 'A型血今年.....';

    break;

    case 'b':

    $reply = 'B型血今年.....';

    break;

    case 'o':

    $reply = 'O型血今年.....';

    break;

    case 'ab':

    $reply = 'AB型血今年.....';

    break;

    }

    $this->endContext();

    // 如果当前回答符合答案格式, 那么进行保存并进行下一个问题. (可以保存至 SESSION 中)

    // 直到最后一个问题回答完成, 输出测试结果给用户, 并结束对话锁定. 以保证用户其他对话能正常路由.

    // 本示例只有一个问题, 因此不保存答案, 直接输出测试结果.

    // 如果对话默认的超时不够, 那么可以在每次提出下一个问题的时候重新调用 beginContext 来顺延超时.

    } else {

    $reply = '请输入正确的血型(A, B, O, AB). ';

    // 回答不符合答案格式, 那么重新显示当前问题.

    }

    }

    return $this->respText($reply);

    // 返回至系统

    }

    private function respText($content) {

    $response = array();

    $response['FromUserName'] = $this->message['to'];

    $response['ToUserName'] = $this->message['from'];

    $response['MsgType'] = 'text';

    $response['Content'] = htmlspecialchars_decode($content);

    return $response;

    }

    }

    LBS解决方案

    基于位置的数据解决方案正在紧张开发中

    展开全文
  • 首先对微擎的工作原理做简单描述, 微擎使用规则和模块的机制来处理公众平台的请求数据并返回响应的结果.执行流程描述为: 粉丝用户与公众号码进行对话或交互, 而后公众平台将粉丝用户的请求消息(当前包括: 文本, 图片...
  • 微擎数据库字典文档

    2020-10-17 15:27:28
    微擎数据库的数据库字典,可以直接在微擎文档中找到,只不过个人感觉word文档离线更好用一些。欢迎各位下载使用。
  • (如果你在小程序里阅读,请点下方“原文”,否则看不到代码)下面介绍如何开启微擎memcache,php的组件memcache必须安装,未安装开启也无用,如何安装组件见 ; 打开目录的data/config.php文件,然后对比下面代码。$...
  • 微擎缓存

    千次阅读 2017-09-28 16:30:31
    微擎系统提供一系列的操作缓存的函数,不需要开发者手动加载引入。前段时间用了下微擎封装的缓存函数,十分简单好用。在此和大家简单的分享下其用法 微擎默认的缓存类型为mysql存储。 微擎系统支持三种缓存(mysql...
  • 微擎添加小程序,并与公众号进行对接。
  • 微擎安装

    2020-04-02 14:20:37
    官方地址 https://www.we7.cc 下载安装包放进服务器,建议选择稳定版离线下载,因为在线下载模式来安装经常会出现莫名其妙的错误解决起来非常麻烦 安装成功需要去微擎申请账号,绑定站点 安装成功 ...
  • 微擎浅析

    2017-11-27 15:46:19
    微擎:微信公众平台自主引擎   前端、后台的微信开发文档( 微擎系统):http://www.we7.cc/manual/dev:terms 微擎官方网站: http://www.we7.cc/   微擎系统分为三个部分,系统核心framework、app手机端、...
  • 浅谈微擎的借用权限最近公司有一个项目,使用了微擎这套程序,并且在他的基础上进行了二次开发,在二次开发中,发现了借用权限留下来的小坑。权限这里的权限是指微信网页授权,要想在微信客户端中访问第三方网页,...
  • 微擎系统

    千次阅读 2017-04-26 13:48:28
    微擎:微信公众平台自主引擎 前端、后台的微信开发文档( 微擎系统):http://www.we7.cc/manual/dev:terms 微擎官方网站: http://www.we7.cc/ 微擎系统分为三个部分,系统核心framework、app手机端、web端...
  • 关于微擎

    千次阅读 2017-09-26 15:59:07
    使用微擎的过程中遇到一些特别头疼的事情 微擎更新对服务器的系统要求特别苛刻,它涉及到很多敏感操作,安全软件会将其判断为入侵行为,所以,安全狗之类的防护软件要关闭,即使将微擎更新地址加入白名单也没有,...
  • 微擎】ThinkPHP框架开发微擎应用?

    千次阅读 2020-06-30 15:27:03
    ThinkPHP框架开发微擎应用?
  • 什么是微擎微擎的作用是什么?

    万次阅读 2019-03-29 16:31:26
    微擎是什么? 微擎是一个PHP开发的 公众号,小程序 服务端 丰富功能的基础框架. 现在不仅可以做小程序和公众号的服务端,还可以支持APP。微擎是基于目前最流行的WEB2.0的架构(php+mysql),运行环境推荐使用linux...
  • 微擎迁移

    2019-06-04 17:08:00
    3、新建网站,安装微擎,导入数据库,修改config中的authkey和缓存类型为redis,修改redis端口 4、导入备份的attachement文件【比较大】 5、配置公众号的 js安全域名,网页授权域名、IP白名单、商户端添加支付路径 ...
  • 1 微擎介绍和安装  2 微擎添加公众号  3 微擎模块安装体验  4 在微擎开发者中心创建公众号应用模块  5 微擎模块工作流程解析  6 微擎常量变量路由创建  7 微擎模板引擎 8 微擎数据库函数  9 微擎获取用户信息...
  • 如何安装微擎微擎安装教程

    千次阅读 2019-07-28 15:44:06
    一个是在线安装,一个是离下载安装,官方推荐使用在线安装,在线安装下载的只有一个文件install.php,而离线安装下载的则是几M的软件包,下面我们将以在线安装为实例进行演示安装微擎。 2)上传安装文件: 下载...
  • 结合微擎2.6框架使用
  • 申请微擎开发者账号,获取微擎开发权限
  • 微擎是一款免费开源的微信公众平台管理系统,本次课程主要教会大家如何使用微擎搭系统建自己的微信小程序,课程从服务器购买和centOS搭建,到小程序前端展示页面布局,再到微擎后端功能逻辑的增删改查,最后实现小...
  • 微擎分页

    千次阅读 2015-08-31 13:05:00
    微擎模块开发中的分页方法实现。
  • 首先贴出微擎根目录各...本人做微擎开发较多的是——模块开发和微擎框架的改造,因此与addons目录,attachment目录,web目录,framework目录打交道较多。先将微擎的核心说一下吧~新老版本有所变动,但核心文件还是...
  • 微擎的安装与使用

    万次阅读 2018-09-04 11:01:10
    微擎是一个基于公众号开发的第三方平台,功能十分强大,下面为大家讲解微擎的使用 微擎是基于目前最流行的WEB2.0的架构(php+mysql),运行环境推荐使用linux(centOS)+ nginx + php5.3,mysql5.6。 首先我们在微擎...
  • 在网上看到很多关于微擎数据库操作函数的文档,基本都是照搬微擎官方文档,或者还不如官方文档写的详细。官方文档上写的也不全面,有些函数没写到文档中,数据库操作函数应该算是最常用的函数了,因此参考大牛文档及...
  • 微擎配置流程

    2019-12-01 17:27:10
    1、先安装微擎系统,微擎下载链接:https://www.xianyuboke.com/down/xiaochengxu-c45/(下载需要的版本),然后去闲鱼资源网(www.xianyuboke.com)下载微擎小程序,这里以步数兑换小程序为列,教大家如何配置微擎小...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,714
精华内容 685
关键字:

微擎