精华内容
下载资源
问答
  • 公众号生成渠道二维码功能,可以给关注粉丝回复文字、链接、图文、图片、视频、语音、小程序、文章、直播、微商城、团购、外链、培训资料、美妆信息、在线课程等,通过不同类型的信息激发粉丝兴趣,从而让粉丝在...

    因为公众平台没有生成渠道二维码功能,如果想要实现公众号的渠道二维码,可以用第三方平台微号帮提供的渠道二维码生成在线功能实现,渠道二维码主要用于统计各个渠道来源的粉丝,为公众号实现精准化推广,为公众号节省推广费用,也为公众号创造更多机会;同时,公众号的渠道二维码还支持分组、修改备注名、推送消息。

    公众号生成渠道二维码功能,可以给关注粉丝回复文字、链接、图文、图片、视频、语音、小程序、文章、直播、微商城、团购、外链、培训资料、美妆信息、在线课程等,通过不同类型的信息激发粉丝兴趣,从而让粉丝在公众号里产生更多价值。

    1、微号帮平台:微信公众号生成渠道二维码

    2、编辑公众号的渠道二维码

    3、公众号渠道二维码的自定义推送消息

    4、微号帮平台:公众号渠道二维码的关注粉丝数据统计

    微号帮平台,微信公众号第三方工具助手平台,现全部功能注册登录授权添加公众号,免费试用7天!

    展开全文
  • 用js+html一个二维码,而且扫描的时候有一个链接,就像微信上面的二维码一样 需要源码,感谢各位大神了
  • 二维码简介 二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”...

    二维码简介

    二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。
    二维码在互联网上将会应用在任何地方

    二维码怎么做效果溯源

    通常情况下,扫描二维码的过程就是请求一个url地址,扫描后之后会打开一个相关网页,在推广App的场景中,扫描出来的网页也必然是个下载落地页,因此我们需要做到在网页url上携带用户信息参数,比如链接地址后缀的userId=1212,这个1212参数就是我们用来从成千上万个二维码中判断用户从哪里下载App的依据,
    当然也可以用于绑定用户分享关系,从而实现自动获取分享奖励。


    想要将该网页参数传递到下载后的App中,我们就需要借助Xinstall SDK来实现参数的精准获取和传递。基本流程就是通过此SDK拼接自定义参数到网页链接,用户下载后打开App登录,服务端就能根据获取的参数实现用户关系绑定、深度页面跳转、安装数据统计等等功能,同时能获取安装量、注册量、留存、付费等后续数据和用户行为。

    渠道二维码的一些用法

    1、分销裂变

    与常见的活码逻辑相反,活码的二维码是不变的,能根据不同的扫码来源、目标、诉求进行变更,让用户一扫码就被定向到不同的页面场景。

    而在App推广方面,分销的差别在于每个传播二维码的角色不同,但指向同一个目标:App下载页。

    因此前面提到的二维码渠道统计就尤为重要了,这是因为分销裂变在业务上的要点,就是二维码的定制分配,需要给到不同的推广人各自的专属二维码,用户扫描二维码进入落地页,就会被记录下渠道信息,此后下载App并打开就能被识别出是由哪个推广人带来的流量。

    在码上经济下,兴趣和熟人重构了社交连接,数据显示,66%的用户会购买朋友推荐的产品,56%的朋友会购买兴趣图推荐的产品。“一人一码”这一步非常关键,因为一旦用户在App中产生消费,平台就需要给推广人一定的分成。推广人负责引流,平台负责销售转化,再返利给推广人,这种互惠的模式也是双方顺畅完成销售转化闭环的原因所在。

    目前各个直播带货、网课平台、电商平台、网赚App、淘宝客平台都在采用这样的模式引流。并且这样的推广模式一旦构建成功,也可以带来更多精准的垂直领域用户,比如:医疗保健App找到医生护士为推广人,那么他们就能带来更多医护人员、病患用户;旅游出行App找到旅行社工作人员为推广人,就能带来更多导游、游客等用户;教育App找到老师为推广人,就能带来更多学生、家长用户。

    2、场景投放
    根据分销裂变的推广思维,我们可以将发展的推广人替换为场景,只要二维码依然是效果可追溯的,推广逻辑就照样成立。
    只需要给各个有流量的场景投放各自的专属二维码广告,每个二维码分别带来了多少下载量,用户的质量如何,需要怎样调整投放方案都将有迹可循。

    投放场景有很多,我们常见的地铁、公交、海报、电梯、公众号都可以是二维码的张贴处,但具体落实到场景投放上,一般刚开始都是大范围铺盖形成品牌效应,比如地铁站ABCDE出口各自投放广告,在投放成本相同的情况下,我们就需要给每个出口都生成一个可统计的专属二维码,从而获知哪个出口的投放性价比更高,哪个出口的广告效应更差,后续的投放计划里就可以做出相应调整。

    3、业绩考核
    常见的比如地推、员工推广、KOL营销等场景,和分销裂变的差别在于:这些推广的传播点是可控的,由自己雇佣的,而分销则是让更多现有用户参与进来,后续返利。

    在App尚未积累大规模用户的前提下,分销裂变和活动拉新显然比较困难,那么借助地推等方式获取第一批用户起量就相当重要了。其中的关键点在于,地推拉新的效果必须是可以追溯的,这就需要给每个成员各自生成专属二维码,从而考核团队每个人的推广效果和业绩。
    与传统的人工登记,以及下载后填写地推码不同,使用上述的Xinstall统计,二维码能够直接获取到每个人的推广业绩,无需登记和填码。


    当然,同样的逻辑还可以用在员工推广、KOL营销等方面,比如服务业,网上银行开户、保险保单办理等业务场景下,需要工作人员在App上对接办理,甚至需要客户经理后续跟进,这时就要将工作人员(客户经理)与用户绑定起来统计工作业绩,使用能够绑定双方渠道信息的专属二维码,不仅扫码下载能自动绑定双方关系,并且能实时统计服务业绩。

    展开全文
  • weixin://wxpay/bizpayurl?pr=fQrYYGd 像这种支付二维码链接 微信内才能打开 怎么才能单独跳转,请求头改为什么
  • 实现功能: 将微信二维码事件用作微信扫码登陆!!! 背景思路: 1、微信公众号获取用户信息需要微信浏览器打开才能获取 ...4、使用微信公众号的二维码做PC端的扫码登陆,理论上是没问题的 思路一: 1、...

    实现功能:

    将微信二维码事件用作微信扫码登陆!!!

    背景思路:
    1、微信公众号获取用户信息需要微信浏览器打开才能获取
    2、pc端使用微信登陆,需要微信开发者这个,认证需要每年300,实际上只有扫码登陆功能是有用的
    3、微信二维码事件,可以根据二维码的信息,用户扫码之后可以根据二维码记录的信息处理业务需求
    4、使用微信公众号的二维码做PC端的扫码登陆,理论上是没问题的

    思路一:
    1、生成用户登陆二维码
    2、用户扫码之后记录session
    3、前端启用定时器,后台检测有session,返回跳转链接到前台,前台跳转
    开发的时候发现,用户扫码之后,记录了session,登陆控制器并不能获取到这个session,what the fuck!
    手机端保存的session 怎么可能在pc端使用呢?当时是不是傻了!

    居然如此那就创建一张数据表来记录吧!

    创建扫码登陆记录表 login

    CREATE TABLE `login` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `openid` varchar(45) DEFAULT NULL,
      `uid` int(11) DEFAULT NULL COMMENT '用户id',
      `code` varchar(32) DEFAULT NULL COMMENT '唯一code',
      `create_time` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `code` (`code`) USING BTREE
    ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

    前端HTML

    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="icon" href="__HOME__/img/favicon.ico"/>
        <title>微信登录</title>
        <style>
            .impowerBox{
                display:inline-block;vertical-align:middle
            }
            p{margin:0;font-weight:400}
            img{border:0}
            body{font-family:"Microsoft Yahei";color:#fff;background:0 0}
            .impowerBox{line-height:1.6;position:relative;width:100%;z-index:1;text-align:center}
            .impowerBox .title{text-align:center;font-size:20px}
            .impowerBox .qrcode{width:280px;margin-top:15px;border:1px solid #E2E2E2}
            .impowerBox .info{width:280px;margin:0 auto}
            .impowerBox .status{padding:7px 14px;text-align:left}
            .impowerBox .status.normal{margin-top:15px;background-color:#232323;border-radius:100px;-moz-border-radius:100px;-webkit-border-radius:100px;box-shadow:inset 0 5px 10px -5px #191919,0 1px 0 0 #444;-moz-box-shadow:inset 0 5px 10px -5px #191919,0 1px 0 0 #444;-webkit-box-shadow:inset 0 5px 10px -5px #191919,0 1px 0 0 #444}
            .impowerBox .status.status_browser{text-align:center}
            .impowerBox .status p{font-size:13px}
        </style>
    </head>
    <body style="background-color: rgb(51, 51, 51); padding: 50px;">
    <div class="impowerBox">
        <div class="title">微信登录</div>
        <img class="qrcode" src="{$login.img}" id="wxewm">
        <input type="hidden" name="code" value="{$login.code}">
        <div class="info">
            <div class="status status_browser normal">
                <p>1、请使用微信扫描二维码登录</p>
                <p>2、关注“五五科技”公众号</p>
            </div>
        </div>
    </div>
    <script src="//cdn.bootcss.com/jquery/1.12.1/jquery.min.js"></script>
    <script type="text/javascript">
    
        var t1 ='';
        $(function() {
            //定时查询验证登录
            t1 = window.setInterval("login()",2000);
            setTimeout("end()",300000);
        });
        function end(){  //停止定时器
            $('#wxewm').hide();   //隐藏二维码
            clearInterval(t1);    //清除定时器
            $('.status_browser').html('<p>二维码已经过期,请刷新页面</p>');
        }
        // window 失去焦点,停止输出
        window.onblur = function() {
            clearInterval(t1);
        };
        // window 每次获得焦点
        window.onfocus = function() {
            t1 = window.setInterval("login()",2000);
        };
        function login(){   //验证是否扫描二维码
            var code =$('input[name=code]').val();
            var url = "{:U('Home/Login/checkLogin')}";
            $.post(url,{code:code},function(data){
                if(data.status){
                    window.location.href=data.url;
                }
            });
        }
    </script>
    </body>
    </html>

    login控制器

    #微信扫码登录
    public function login(){
        $code = "LOGIN_".substr(strtoupper(md5(date('Y-m-d H:i:s', time()) . mt_rand())), -16);
        $img = $this->getqcode($code);
        $data['code'] = $code;
        $data['img'] = $img;
        $this->assign('login',$data);
        $this->display();
    }
    #获取二维码
    public function getqcode($code){
        $errmsg = $this->WechatAuth->qrcodeCreate('QR_STR_SCENE',$code,300);
        if($errmsg['errcode']==0){
            $img = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket='.$errmsg['ticket'];
            return $img;
        }else{
            return false;
        }
    }
    public function checkLogin(){
        $code = trim(I('post.code'));
        if(empty($code)){
            $this->ajaxReturn(array('status'=>0,'msg'=>'code不存在'));
        }
    
        $uid = M('login')->where(['code'=>$code])->getField('uid');
        $url = $this->backUrl();
        if(!$url){
            $url = C('DOMAIN').U('Home/Company/index');
        }
        if($uid){
         //将code置为null 方便下次扫码
            M('login')->where(['uid'=>$uid])->setField('code',null);
            $user_info = M('user')->find($uid);
            if($user_info){
                session('user_info', $user_info);
                session('user_uid',$user_info['id']);
                $this->ajaxReturn(array('status'=>1,'msg'=>'登录成功,马上为您跳转..^_^','url'=>$url));
            }
        }
        $this->ajaxReturn(array('status'=>0,'msg'=>'无登录信息'));
    }

    微信控制器

    /**
         * 微信入口
         */
        public function index(){
            $this->wechat->valid();//明文或兼容模式可以在接口验证通过后注释此句,但加密模式一定不能注释,否则会验证失败
            $wx_data = $this->wechat->getRev()->getRevData();   //获取微信数据
            $openid = $wx_data['FromUserName'];
            $wx_userinfo = $this->getUserByopenid($openid);
            if(!$wx_userinfo){
                $wx_userinfo = $this->wechat->getUserInfo($openid);
                if(!$wx_userinfo){
                    Log::write('miss userInfo', 'ERR', '', C('LOG_DATA_PATH') . 'weixin/error/' .date('Ym') .'/'. date('md') . '.log');
                    $this->WechatAuth->sendText(C('WX_JINGZHI'),"获取用户信息失败!");
                    M('access_token')->delete();
                }
                if($wx_userinfo){
                    //添加用户
                    $user_id = $this->addUser($wx_userinfo);
                    exit;
                }
            }
            if(!$wx_userinfo){
                exit;
            }
            $type = $wx_data['MsgType'];    //消息类型
            switch ($type) {
                case Wechat::MSGTYPE_EVENT:
                    //事件消息类型
                    $event_type = $wx_data['Event'];
                    switch ($event_type) {
                        case Wechat::EVENT_SUBSCRIBE:     //微信关注事件
                            $event_key = $wx_data['EventKey'];
                            if ($event_key != '') {
                                $event_key = strtoupper($event_key);
                                $event_key = str_replace('QRSCENE_', '', $event_key);
                                //带参二维码关注,跳转二维码事件
                                $this->qrcode($event_key,$wx_userinfo);
                                exit;
                            } else {
                                $this->wechat->text('Hi,'.$wx_userinfo['nickname'].'!欢迎关注五五科技!')->reply();exit;
                            }
                            break;
                        case Wechat::EVENT_SCAN:     //关注后二维码事件
                            if ($wx_data['EventKey'] != '') {
                                $event_key = strtoupper($wx_data['EventKey']);
    
                                $this->qrcode($event_key,$wx_userinfo);
                                exit;
                            }
                            break;
                    }
                    break;
                default:
                    $this->wechat->text('Hi,'.$wx_userinfo['nickname'].'!欢迎关注五五科技!')->reply();exit;
                    exit;
                    break;
            }
        }
        /**
         * 二维码扫描回复
         * @param $qrkey    二维码所带参数
         * @param $userInfo  用户信息
         */
        public function qrcode($event_key,$wx_userinfo){
            if(strstr($event_key, 'LOGIN_')){
                $res = $this->login($event_key,$wx_userinfo);
                $data['openid'] = $wx_userinfo['openid'];
                $data['create_time'] = time();
                if($res){
                    $data['project_name'] = "扫码登录成功";
                    $data['url'] = C('DOMAIN').U('Home/Company/index');
                    //发送微信模板消息
                    $this->wxMsg->organSend(1,$data);exit;
                }else{
                    $data['project_name'] = "扫码失败,请稍后再试";
                    $this->wxMsg->organSend(1,$data);exit;
                }
            }
            exit;
        }
        //登录
        public function login($code,$userInfo){
            $user_id = $this->getUserId($userInfo);
            if(empty($user_id)){
                return false;
            }
            if(empty($userInfo['openid'])){
                return false;
            }
            $login_id=M('login')->field('id')->where(['openid'=>$userInfo['openid']])->getField('id');
    
            if(!$login_id){
                $data['openid'] = $userInfo['openid'];
                $data['uid'] = $user_id;
                $data['code'] = $code;
                $data['create_time'] = time();
                $res = M('login')->add($data);
            }else{
                $res = M('login')->where(['openid'=>$userInfo['openid']])->setField('code',$code);
            }
            if($res !== false){
                return true;
            }else{
                return false;
            }
        }

    关联资源:
    (一)、生成 微信Accesstoken 服务:

    <?php
    
    namespace Common\Service;
    use Extend\WechatAuth;//下载地址
    #1、使用前需要配置微信 APPID、APPSECRET、过期时间(默认6500秒,官方过期时间为7200秒)
    #2、创建存储数据库 该类基于thinkphp3.2 框架开发 其他框架请适当修改操作数据库方法
    class AccesstokenService {
        public function getAccessToken()
        {
            $appid = C('WX_APPID');//微信公众号APPID
            $appsecret = C('WX_APPSECRET');//微信公众号APPSECRET
            $accessTokenInfo = M('access_token')->order('expire desc')->find();
            if($accessTokenInfo && $accessTokenInfo['accesstoken']){
                if(time()<$accessTokenInfo['expire']){
                    $accessToken['access_token'] = $accessTokenInfo['accesstoken'];
                    $accessToken['jsapi_ticket'] = $accessTokenInfo['jsapi_ticket'];
                }else{
                    //token 过期
                    $accessToken = $this->getWechatAccess($appid,$appsecret);
                }
            }else{
                $accessToken = $this->getWechatAccess($appid,$appsecret);
            }
            return $accessToken;
        }
        //获取微信 access_token
        public function getWechatAccess($appid,$appsecret){
            $wechatAuth = new WechatAuth($appid, $appsecret);
            $s_accessToken = $wechatAuth->getAccessToken();
            $add['accesstoken'] = $s_accessToken['access_token'];
            $add['jsapi_ticket']= $this->getTicket($appid,$appsecret,$s_accessToken['access_token']);
            $add['expire'] = time()+6500;//过期时间戳 token有限期为7200 要及时更新token
            $this->delAccessToken();
            $addInfo = M('access_token')->add($add);
            if($addInfo){
                $return['access_token'] = $add['accesstoken'];
                $return['jsapi_ticket'] = $add['jsapi_ticket'];
            }
            return $return;
        }
        //获取 微信js Ticket
        public function getTicket($appid,$appsecret,$accessToken){
            $wechatAuth = new WechatAuth($appid, $appsecret,$accessToken);
            $returnTicket = $wechatAuth->getJsapiTicket();
            $ticket = $returnTicket['ticket'] ? $returnTicket['ticket']:0;
            return $ticket;
        }
        //删除token
        public function delAccessToken(){
            $deleWhere['expire'] = array('gt',0);
            M('access_token')->where($deleWhere)->delete();
        }
    
    }

    使用案例:

    <?php
    namespace Weixin\Controller;
    use Common\Service\AccesstokenService;
    public function getToken(){
        $accesstokenService = new AccesstokenService();
        $access= $accesstokenService->getAccessToken();
        $access_token = $access['access_token'];
    }

    (二)、Wechat.class.php 微信公众平台PHP-SDK
    封装了微信公众号开发的基本功能 只给公众号互动的用户提供服务,指定用户提供服务请参考下方的WechatAuth类

        #代码片段
        const MSGTYPE_TEXT = 'text';
        const MSGTYPE_IMAGE = 'image';
        const MSGTYPE_LOCATION = 'location';
        const MSGTYPE_LINK = 'link';
        const MSGTYPE_EVENT = 'event';
        const MSGTYPE_MUSIC = 'music';
        const MSGTYPE_NEWS = 'news';
        const MSGTYPE_VOICE = 'voice';
        const MSGTYPE_VIDEO = 'video';
        const EVENT_SUBSCRIBE = 'subscribe';       //订阅
        const EVENT_UNSUBSCRIBE = 'unsubscribe';   //取消订阅
        const EVENT_SCAN = 'SCAN';                 //扫描带参数二维码
        const EVENT_LOCATION = 'LOCATION';         //上报地理位置
        const EVENT_MENU_VIEW = 'VIEW';                     //菜单 - 点击菜单跳转链接
        const EVENT_MENU_CLICK = 'CLICK';                   //菜单 - 点击菜单拉取消息
        const EVENT_MENU_SCAN_PUSH = 'scancode_push';       //菜单 - 扫码推事件(客户端跳URL)
        const EVENT_MENU_SCAN_WAITMSG = 'scancode_waitmsg'; //菜单 - 扫码推事件(客户端不跳URL)
        const EVENT_MENU_PIC_SYS = 'pic_sysphoto';          //菜单 - 弹出系统拍照发图
        const EVENT_MENU_PIC_PHOTO = 'pic_photo_or_album';  //菜单 - 弹出拍照或者相册发图
        const EVENT_MENU_PIC_WEIXIN = 'pic_weixin';         //菜单 - 弹出微信相册发图器
        const EVENT_MENU_LOCATION = 'location_select';      //菜单 - 弹出地理位置选择器
        const EVENT_SEND_MASS = 'MASSSENDJOBFINISH';        //发送结果 - 高级群发完成
        const EVENT_SEND_TEMPLATE = 'TEMPLATESENDJOBFINISH';//发送结果 - 模板消息发送结果
        const EVENT_KF_SEESION_CREATE = 'kfcreatesession';  //多客服 - 接入会话
        const EVENT_KF_SEESION_CLOSE = 'kfclosesession';    //多客服 - 关闭会话
        const EVENT_KF_SEESION_SWITCH = 'kfswitchsession';  //多客服 - 转接会话
        const EVENT_CARD_PASS = 'card_pass_check';          //卡券 - 审核通过
        const EVENT_CARD_NOTPASS = 'card_not_pass_check';   //卡券 - 审核未通过
        const EVENT_CARD_USER_GET = 'user_get_card';        //卡券 - 用户领取卡券
        const EVENT_CARD_USER_DEL = 'user_del_card';        //卡券 - 用户删除卡券
        ...此处省略好多字
        const CARD_MEMBERCARD_ACTIVATE        = '/card/membercard/activate?';      //激活会员卡
        const CARD_MEMBERCARD_UPDATEUSER      = '/card/membercard/updateuser?';    //更新会员卡
        const CARD_MOVIETICKET_UPDATEUSER     = '/card/movieticket/updateuser?';   //更新电影票(未加方法)
        const CARD_BOARDINGPASS_CHECKIN       = '/card/boardingpass/checkin?';     //飞机票-在线选座(未加方法)
        const CARD_LUCKYMONEY_UPDATE          = '/card/luckymoney/updateuserbalance?';     //更新红包金额
        const SEMANTIC_API_URL = '/semantic/semproxy/search?'; //语义理解
        ...此处也省略好多字
        ///微信摇一摇周边
        const SHAKEAROUND_DEVICE_APPLYID = '/shakearound/device/applyid?';//申请设备ID
        const SHAKEAROUND_DEVICE_SEARCH = '/shakearound/device/search?';//查询设备列表
        const SHAKEAROUND_DEVICE_BINDLOCATION = '/shakearound/device/bindlocation?';//配置设备与门店ID的关系
        const SHAKEAROUND_DEVICE_BINDPAGE = '/shakearound/device/bindpage?';//配置设备与页面的绑定关系
        const SHAKEAROUND_PAGE_ADD = '/shakearound/page/add?';//增加页面
        const SHAKEAROUND_PAGE_UPDATE = '/shakearound/page/update?';//编辑页面
        const SHAKEAROUND_PAGE_SEARCH = '/shakearound/page/search?';//查询页面列表
        const SHAKEAROUND_PAGE_DELETE = '/shakearound/page/delete?';//删除页面
        const SHAKEAROUND_USER_GETSHAKEINFO = '/shakearound/user/getshakeinfo?';//获取摇周边的设备及用户信息
        const SHAKEAROUND_STATISTICS_DEVICE = '/shakearound/statistics/device?';//以设备为维度的数据统计接口
        微信公众号基本功能都封装好了轻松调用

    使用案例:

    <?php
    
    namespace Weixin\Controller;
    use Think\Controller;
    use Extend\Wechat;
    
    /**
     * 微信主入口
     */
    class IndexController extends Controller
    {
        protected $wechat;
        public function _initialize()
        {
            //配置
            $options = array(
                'token' => C("WX_TOKEN"), //填写你设定的key
                'encodingaeskey' => C("WX_ENCODINGAESKEY"),//填写加密用的EncodingAESKey,如接口为明文模式可忽略
                'appid' => C("WX_APPID"), //填写高级调用功能的app id
                'appsecret' => C("WX_APPSECRET") //填写高级调用功能的密钥
            );
            $this->wechat = new Wechat($options);
        }
    }

    下载地址:
    https://download.csdn.net/download/qq_16024861/10619807

    (三)、WechatAuth类 封装了 微信消息及二维码类 可指定openid 发送消息

        #代码片段
        /* 消息类型常量 */
        const MSG_TYPE_TEXT     = 'text';
        const MSG_TYPE_IMAGE    = 'image';
        const MSG_TYPE_VOICE    = 'voice';
        const MSG_TYPE_VIDEO    = 'video';
        const MSG_TYPE_MUSIC    = 'music';
        const MSG_TYPE_NEWS     = 'news';
        const MSG_TYPE_LOCATION = 'location';
        const MSG_TYPE_LINK     = 'link';
        const MSG_TYPE_EVENT    = 'event';
    
        /* 二维码类型常量 */
        const QR_SCENE       = 'QR_SCENE';
        const QR_STR_SCENE   = 'QR_STR_SCENE';
        const QR_LIMIT_SCENE = 'QR_LIMIT_SCENE';
        const QR_LIMIT_STR_SCENE = 'QR_LIMIT_STR_SCENE';

    使用案例:

    <?php
    
    namespace Weixin\Controller;
    
    use Think\Controller;
    use Extend\WechatAuth;
    use Common\Service\AccesstokenService;
    
    /**
     * 微信主入口
     */
    class IndexController extends Controller
    {
    
        protected $WechatAuth;
        protected $accessToken;
    
        public function _initialize()
        {
            $accesstokenService = new AccesstokenService();
            $access = $accesstokenService->getAccessToken();
            $this->accessToken = $access['access_token'];
            $appid = C("WX_APPID"); //填写高级调用功能的app id
            $appsecret = C("WX_APPSECRET"); //填写高级调用功能的密钥
            $this->WechatAuth = new WechatAuth($appid, $appsecret, $this->accessToken);
        }
        public function index(){
            $openid = 'oDz8p0nnhZyajdc7RhLWT3QeQX7c';
            //发送文本消息
            $this->WechatAuth->sendText($openid,"hello world!");
        }
    }

    下载地址:
    https://download.csdn.net/download/qq_16024861/10619821

    (四)打包下载
    **三类合一(AccesstokenService、Wechat、WechatAuth)
    几行代码实现微信公众号想要的功能,你值得拥有**
    下载地址:
    https://download.csdn.net/download/qq_16024861/10619358

    (五)微信模板消息类
    template.php 模板配置项
    TemplenoticeService.class.php 模板类
    第一步:在微信公众号模板管理添加要使用的模板
    第二步:在模板配置项配置好模板如下:
    这里写图片描述
    第三步:在模板消息类配置好每个类型对应发送哪个模板消息
    这里写图片描述
    第四步:配置好根据类型选择模板id
    这里写图片描述
    第五步:创建数据表 记录消息发送状态,发送失败支持重新发送

    CREATE TABLE `send_log` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `openid` varchar(100) NOT NULL DEFAULT '' COMMENT '微信收件人openid',
      `template_id` varchar(100) NOT NULL DEFAULT '' COMMENT '微信template_id',
      `title` varchar(255) DEFAULT NULL COMMENT '标题',
      `content` text NOT NULL COMMENT '消息内容',
      `wechat_result` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '微信是否发送成功,0否,1是',
      `wechat_fail_reason` varchar(255) NOT NULL DEFAULT '' COMMENT '微信失败原因',
      `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
      `url` varchar(150) DEFAULT NULL COMMENT '跳转url',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

    使用案例:

    <?php
    
    namespace Weixin\Controller;
    
    use Think\Controller;
    use Extend\Wechat;
    use Extend\WechatAuth;
    use Common\Service\AccesstokenService;
    use Common\Service\TemplenoticeService;
    use Think\Log;
    
    /**
     * 微信主入口
     */
    class IndexController extends Controller
    {
        protected $wxMsg;
    
        public function _initialize()
        {
            $this->wxMsg = new TemplenoticeService();
        }
        //发送类型为1的模板消息 
        //先在TemplenoticeService.class.php 模板类 找到1的类型
        //const WX_LOGIN = 1;   //微信登录 1为登陆类型 登陆类型模板id为1
        //安全登录提醒
           // '1' => array(
           //     'template_id' => 'vKsF0lYqpNcDQ4zzkgj_Nletqbjx6a1oPDNVGJi88so',
           //     'msg' => array(
           //         'first' => array('value'=>'%title%\n\r','color'=>"#55BBAA"),
           //         'keyword1' => array('value'=>'%project_name%','color'=>"#000000"),//登录方式
           //         'keyword2' => array('value'=>'%create_time%','color'=>"#000000"),//登录时间
           //     ),
           // ),
           //登陆类型有title、project_name、create_time变量 我们组装数组的时候需要设置数组参数
        public function index(){
            $data['openid'] = 'oDz8p0nnhZyajdc7RhLWT3QeQX7c';//必须 接收模板消息的用户openid
            $data['create_time'] = time();
            $data['project_name'] = "扫码登录成功";
            $data['url'] = C('DOMAIN').U('Home/Company/index');//可无
            $this->wxMsg->organSend(1,$data);exit;//消息发送后不管失败还是成功会记录到send_log表
        }
        //重发id为1的模板消息
        public function emailSend(){
              $id = 1;
              if(empty($id)){
                  $this->ajaxError('参数不能为空');
              }
              $info = M('send_log')->find($id);
              if(empty($info)){
                  $this->ajaxError('邮件不存在');
              }
              $res = $this->wxMsg->sendAgain($info);
              if(isset($res) && $res['status'] == 1){
                  $save['wechat_result'] = 1;
                  $save['wechat_fail_reason'] = '';
                  M('send_log')->where(['id'=>$id])->save($save);
                  $this->ajaxSuccess('发送成功');
              }else{
                  $save['wechat_result'] = 0;
                  $save['wechat_fail_reason'] = $res['info'];
                  M('send_log')->where(['id'=>$id])->save($save);
                  $this->ajaxError('失败原因:'.$res['info']);
              }
        }
    }

    资源包含:1、生成 微信Accesstoken 服务;2、WechatAuth类 封装了 微信消息及二维码类 可指定openid 发送消息;3、微信模板消息类
    下载地址:
    https://download.csdn.net/download/qq_16024861/10620060

    展开全文
  • 个页面(csdn的比较花哨,大家也可以仿着): 页面不是重点,我贴一个里面的js代码, 以下为全部代码 //遮罩层 const pupupBox = document.querySelector(".popup") //下载按钮 document.querySelector('#...

    android下载弄到应用市场比较费事,所以就想弄个二维码下载,奥利给,干就完了。

    参考csdn app下载页(wx扫描下方二维码)
    在这里插入图片描述
    先做个页面(csdn的比较花哨,大家也可以仿着做):
    在这里插入图片描述
    页面不是重点,我贴一个里面的js代码,
    以下为全部代码

    //遮罩层
    const pupupBox = document.querySelector(".popup")
    //下载按钮
    document.querySelector('#download').addEventListener('click', toDownload);
    pupupBox.addEventListener('click', () => {
        pupupBox.style.display = 'none';
    })
    
    function toDownload() {
        const ua = window.navigator.userAgent;
        if (/iphone|ipad|ipod|ios/gi.test(ua)) {  // iOS 系统 ->  跳AppStore下载地址
            window.location.href = 'https://apps.apple.com/us/app/xxxx';
        }
        else if (/android/gi.test(ua)) { // 安卓系统 -> 跳安卓端下载地址
            if (/Alipay|MicroMessenger/gi.test(ua)) { //如果微信内置浏览器
            	//打开遮罩层提示
                pupupBox.style.display = 'block';
            } else {
                window.location.href = 'xxxx/app-release-1.0.apk';
            }
        } else {
            alert('仅支持移动端浏览器!!!')
            return;
        }
    }
    

    页面和内置事件(以上)有了之后,放到服务器上,比如是域名为 download.demo.com,大家百度二维码在线生成,做一个该链接的二维码。我用的 草料,其中logo,颜色,文字都可以提供美化定制化,还是不错的。然后将该二维码贴到我司官网或者公众号即可。

    展开全文
  • 制作短连接:http://dwz.cn/ 有logo的二维码:https://cli.im/ 提供思路,记录以供备用
  • vue 动态二维码做

    2020-11-04 10:52:11
    如: popUp(url,password){ this.dialog = true this.dataModel.url = '链接:' + url this.dataModel.password = '密码:' + password this.indexLists = this.dataModel this.$nextTick(function () { this....
  • 适合人群为准备表白的男士
  • 二维码

    2015-03-02 15:46:21
    当手机遇上二维码诞生已久的二维码被大众熟知是最近的事情。可以说,当手机遇上二维码二维码找到了普及捷径。据专家介绍,随处可见的一维码(商品标签上常见)被二维码取代只是迟早的问题。二维码能在纵横两个方位...
  • 通过支付宝二维码链接直接调起支付宝支付

    万次阅读 热门讨论 2017-08-16 22:23:32
    项目里面遇到要通过支付宝二维码调起支付宝应用支付的功能,完之后在此记录一下: Intent intent = new Intent(Intent.ACTION_VIEW); Uri uri = null; try {  uri = Uri.parse("alipays://platformapi/...
  • 转载自:用一个二维码做下载地址,自动区分是 ios 还是 android 用一个二维码做下载地址,自动区分是 ios 还是 android, 甚至区分 iphone 和 ipad。 二维码下载 /* * 智能机浏览器版本信息: *
  • https://blog.csdn.net/my_batis/article/details/111193350 效果图查看地址 测试 连接: http://localhost:8086/musice/qrcode
  • 通常,我们开发一个app,有Android版本,有ios版本,但是,我们有时候只有一个二维码可以放置,比如,通过社会化分享,分享到微信一张图片,通过微信识别二维码来下载我们的app,此时,只有一个二维码, 那么怎样,让...
  • 无聊 一个支付宝打赏二维码

    千次阅读 2018-11-08 20:26:48
    无聊 一个支付宝打赏二维码
  • python-微信二维码制作前言:      更多关于Python的知识请加关注哟~~。若需联系博主请私信或者加博主联系方式:      QQ:1542334210     &...
  • 二维码登录

    千次阅读 2017-12-21 10:55:36
    序本文主要来研究一下二维码登录的相关场景和原理。场景主要的场景有如下几个:app扫二维码登录pc版系统比如微信web版,在手机端微信登录的前提下,扫二维码确认,自动登录网页版。这里的app可以分为两大类,一个是...
  • 生成二维码

    2020-07-07 09:38:26
    今天了个推广二维码的功能,主要依赖谷歌开源的core架包实现,推广可以使用链接或者二维码(实质上二维码就是携带了链接信息而已)。二维码相比链接好处在于方便不需要记住或者去复制粘贴链接,毕竟扫码已经很普遍...
  • 扫描二维码

    2017-12-06 14:53:59
    一、二维码的介绍 ... 2、输出设备:将收集到的信息,解析,获取内容 3、会话session:连接输入和输出设备 4、特殊的layer:展示输入设备,所采集的信息二、基本实现#import <AVFoundation/AVFoundation
  • 用 Python 动态二维码哄女友开心

    千次阅读 2020-04-08 17:11:00
    如何用python制作动态二维码,来哄女朋友开心?这句话前半部分相信大家已经很熟悉了,很多同学也给自己的网站地址过图片为底的二维码。后半部分呢?那肯定要增加一些趣味啊,不然岂不是对不...
  • NULL 博文链接:https://iaiai.iteye.com/blog/1779100
  • 只要使用扫码功能就能获取二维码链接的参数。下面先看一下小程序内置提供的调用扫一扫的功能函数。函数非常简单,返回一个sucess函数回调。至于内部了什么操作。我想是他内部提供的的底层解析的工作...
  • 过微信集成的人应该知道,页面在微信浏览器中,出 JS 相关的错误之后,没法调试; 这就需要在电脑端装一个类似微信的浏览器,来调试,但是目前没有这种特定的浏览器; 不过不用担心 !!!我们可以用谷歌浏览器...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,531
精华内容 23,012
关键字:

二维码链接怎么做