在一家ecstore二开公司有一段时间了,公司希望往自己研发产品上面走,一直在培养新人。

  最近要自己去微信登录,自己就在ectore的框架基础上,写的原生微信第三方登录以此来熟悉微信第三方登录,在ecstore上面去写。

  一个简单的demo,不是很好,分享给大家,希望能给想做微信第三方登录的朋友带来思路...

  首先:

    资料准备:

      水印图片 28*28         png格式        公司logo
      高清图片 108*108     png格式       公司logo

      1.在微信开放平台 https://open.weixin.qq.com/中填写基本信息,
      2.完成邮箱验证,
      3.并完善开发者资料,注册成为开发者。
      4.在“账号中心”完成开发者资质认证。
      5.进入微信开放平台管理中心网站应用,点击“创建应用”按钮。
      6.填写基本信息,完成点击下一步
      7.填写平台信息
        应用签名:可在微信开发平台的资源中心》》资源下载》》中下载“签名生成工具”,用户获取已经安装到手机的第三方应用的签名。输入应用包名,即可获得该应用的签名值。
      8.提交审核后,在7个工作日内腾讯将给出审核结果。(通常较快,几个小时就可反馈结果)

 

  获取AppID,AppSecret,之后的处理:

  需要在你想加的网站登录页给一个链接:<a href="https://open.weixin.qq.com/connect/qrconnect?appid=your appid &redirect_uri=http://www.sunmil.cn/passport-linshi.html&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect">微信登录</a>

  //处理微信登录开始

   private $appid = "your appid";
    private $appsecert = "your appsecert";
    private $redirect_uri = "http://www.sunmil.cn/wxGetCode";


    //绑定账号页面
    public function weixin(){
        //链接数据库
        $link = mysqli_connect(DB_HOST, DB_USER,DB_PASSWORD,DB_NAME ) or die('数据库连接失败4');
        $link = mysqli_connect('127.0.0.1', 'root','root', 'ec') or die('数据库连接失败');
        mysqli_set_charset($link,'utf8');

        //接收openid
        $openid = $_COOKIE['openid'];

        $sql = "select * from sdb_trustlogin_trustinfo where openid = '$openid' ";
        $res = mysqli_query($link, $sql);
        $row = mysqli_fetch_assoc($res);

        $this->pagedata['realname'] = $row['realname'];
        $this->pagedata['avatar'] =  $row['avatar'];

        $this->page("site/passport/weixin.html");

    }

      //当第一次微信登录,处理绑定账号页面
    public function handle($url=null){
        // $url = "http://www.sunmil.cn";
         //链接数据库
        $link = mysqli_connect(DB_HOST, DB_USER,DB_PASSWORD,DB_NAME ) or die('数据库连接失败3');
            mysqli_set_charset($link,'utf8');

            $post = utils::_filter_input($_POST);

        $userData = array(
            'login_account' => $post['uname'],
            'login_password' => $post['password']
        );

        $member_id = kernel::single('pam_passport_site_basic')->login($userData,$post['verifycode'],$msg);

        $b2c_members_model = $this->app->model('members');
        $member_point_model = $this->app->model('member_point');

        $member_data = $b2c_members_model->getList( 'member_lv_id,experience,point', array('member_id'=>$member_id) );
        
        $member_data = $member_data[0];
        $member_data['order_num'] = $this->app->model('orders')->count( array('member_id'=>$member_id) );  

        $b2c_members_model->update($member_data,array('member_id'=>$member_id));
        $this->userObject->set_member_session($member_id);
        $this->bind_member($member_id);
        $this->set_cookie('loginName',$post['uname'],time()+31536000);//用于记住密码
        // setCartNum()需要传入一个参数
        $aCart = array();
        $this->app->model('cart_objects')->setCartNum($aCart);
        $url = $this->userPassport->get_next_page('pc');
        if( !$url ){
            $url = kernel::single('b2c_frontpage')->gen_url(array('app'=>'b2c','ctl'=>'site_member','act'=>'index'));
        }

        //查询数据库
        $uname = $_POST['uname'];
        $sql = "select * from sdb_pam_members where password_account = '$uname' ";
        $res = mysqli_query($link, $sql);
        $row = mysqli_fetch_assoc($res);
        $member_id = $row['member_id'];
        //链接数据库,插入数据
        $openid =  $_COOKIE['openid'];
        $sql = "update sdb_trustlogin_trustinfo set member_id = ('{$member_id}')  where openid = '{$openid}'";
        $res = mysqli_query($link, $sql);

        if($res && mysqli_affected_rows($link) > 0){
            //删除cookie
            setcookie("openid", $openid, time()-3600);
            kernel::single('pam_lock')->flush_lock($member_id);
            $this->splash('success',$url,app::get('b2c')->_('登录成功'),true);
        }else{
            echo '失败了';
        }
    }

     //处理绑定注册页面
    public function weixin1(){
          //链接数据库
        $link = mysqli_connect(DB_HOST, DB_USER,DB_PASSWORD,DB_NAME ) or die('数据库连接失败2');
        mysqli_set_charset($link,'utf8');

        //接收openid
        $openid = $_COOKIE['openid'];

        $sql = "select * from sdb_trustlogin_trustinfo where openid = '$openid' ";
        $res = mysqli_query($link, $sql);
        $row = mysqli_fetch_assoc($res);

        $this->pagedata['realname'] = $row['realname'];
        $this->pagedata['avatar'] =  $row['avatar'];
        $this->page("site/passport/weixin1.html");

    }

    //绑定注册页面
    public function handle1($url=null){
        //链接数据库
        $link = mysqli_connect(DB_HOST, DB_USER,DB_PASSWORD,DB_NAME ) or die('数据库连接失败1');
        mysqli_set_charset($link,'utf8');

        $_POST = utils::_filter_input($_POST);
        
        $saveData = $this->userPassport->pre_signup_process($_POST);

        if( $member_id = $this->userPassport->save_members($saveData,$msg) ){
            $this->userObject->set_member_session($member_id);
            $this->bind_member($member_id);
            foreach(kernel::servicelist('b2c_save_post_om') as $object) {
                $object->set_arr($member_id, 'member');
                $refer_url = $object->get_arr($member_id, 'member');
            }

            /*注册完成后做某些操作! begin*/
            foreach(kernel::servicelist('b2c_register_after') as $object) {
                $object->registerActive($member_id);
            }
            /*end*/
            $data['member_id'] = $member_id;
            $data['uname'] = $saveData['pam_account']['login_account'];
            $data['passwd'] = $_POST['pam_account']['psw_confirm'];
            $data['email'] = $_POST['contact']['email'];
            $data['refer_url'] = $refer_url ? $refer_url : '';
            $data['is_frontend'] = true;
            $obj_account=$this->app->model('member_account');
            $obj_account->fireEvent('register',$data,$member_id);
            if(!strpos($_SESSION['pc_next_page'],'cart')){
                $url = $this->gen_url(array('app'=>'b2c','ctl'=>'site_passport','act'=>'sign_tips'));
            }else{
                $url = $_SESSION['pc_next_page'];
            }

            //会员注册成功,处理member_id 开始
            $login_name = $_POST["pam_account"]["login_name"];
            $sql = "select member_id from sdb_pam_members where password_account = '{$login_name}'";
            // echo $sql;
            $res = mysqli_query($link, $sql);
            $row = mysqli_fetch_assoc($res);
            $member_id = $row['member_id'];

            //链接数据库,插入数据
            $openid =  $_COOKIE['openid'];
            $sql = "update sdb_trustlogin_trustinfo set member_id = ('{$member_id}')  where openid = '{$openid}'";
            $res = mysqli_query($link, $sql);

            if($res && mysqli_affected_rows($link) > 0){

                 //删除cookie
                setcookie("openid", $openid, time()-3600);
                $this->splash('success',$url,app::get('b2c')->_('注册成功'),$ajax_request);
                }     
        //会员注册成功,处理member_id 结束
            $this->splash('failed',$back_url,app::get('b2c')->_('注册失败'),$ajax_request);
        }
    }

    //临时页面
    public function linshi(){

        $code =  $_GET['code'];
        $state =  $_GET['state'];

        if($state === 'STATE'){
            $this->loginWeixin($code);
        }elseif($state === 'wxBind'){
            $this->bindWeixin($code);
        }else{
            return redirect("http://www.sunmil.cn");
        }
    }

        //loginWeixin
    private function loginWeixin($code){

        //链接数据库
        $link = mysqli_connect('127.0.0.1', 'root','root', 'ec') or die('数据库连接失败');
        mysqli_set_charset($link,'utf8');

        $appid = $this->appid;
        $appsecert = $this->appsecert;
        $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$appsecert."&code=".$code."&grant_type=authorization_code";

        //curl模拟get请求,获取结果
        $res = $this->http_curl($url);
        //转化为数组
        $result = json_decode($res,true);
        $openid = $result['openid'];

        //openid存在,直接登录,openid不存在,先注册再登录
        $sql = "select openid from sdb_trustlogin_trustinfo";
        $res = mysqli_query($link, $sql);
        $row = mysqli_fetch_all($res);
            
        //foreach 判断
        foreach ($row As  $v) {
            if(in_array($openid,$v,true)){
                //缺少登录信息

                $sql = "select member_id from sdb_trustlogin_trustinfo where openid = '{$openid}'";
                //查出member_id
                $res = mysqli_query($link, $sql);
                $row = mysqli_fetch_assoc($res);

                $member_id = $row['member_id'];
                //查出会员信息
                $sql = "select * from sdb_pam_members where member_id = '{$member_id}'";
                $res = mysqli_query($link, $sql);
                $row = mysqli_fetch_assoc($res);

                $login_name = $row['login_account'];

                //存入cookie  
                setcookie('UNAME',$login_name, time()+360000);
                echo "<script>window.location.href='http://www.sunmil.cn'</script>";
                exit;
            }
        }

        $access_token = $result['access_token'];
        //获取用户基本信息
        $getInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
        $userInfo = $this->http_curl($getInfoUrl);
        $trustinfo = json_decode($userInfo);

        //判断trustinfo表里面是否存在该条数据
        $openid     =   $trustinfo->openid;
        $nickname   =   $trustinfo->nickname;
        $sex        =   $trustinfo->sex;
        $city       =   $trustinfo->city;
        $province   =   $trustinfo->province;
        $country    =   $trustinfo->country;
        $avatar     =   $trustinfo->headimgurl;
        $trust_source = 'trustlogin_plugin_weixin';
        //连接数据库,插入数据
        $sql = "insert into sdb_trustlogin_trustinfo  (openid,realname,avatar,gender,province,city,trust_source) values ('{$openid}','{$nickname}','{$avatar}','{$sex}','{$province}','{$city}','{$trust_source}')";
        $res = mysqli_query($link, $sql);

        if($res && mysqli_affected_rows($link) > 0){
             //存入cookie
            setcookie('openid',$openid, time()+3600);
            header("Location:http://www.sunmil.cn/passport-weixin.html");
        }else{
            echo '失败了';
        }   
    }
    //curl模拟get请求
    private function http_curl($url){
        $curlobj = curl_init();
        curl_setopt($curlobj, CURLOPT_URL, $url);
        curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curlobj, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curlobj, CURLOPT_SSL_VERIFYHOST, FALSE);

        $output = curl_exec($curlobj);
        curl_close($curlobj);

        return $output;
    }
    //处理微信登录结束

就可以实现微信登录了,当然了,一个简单熟悉微信第三登录的demo,有机会去做一个tp微信登录。

欢迎留言,大家一起讨论。

微信第三方登录(原生)demo的更多相关文章

  1. iOS微信第三方登录实现

    iOS微信第三方登录实现   一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统.在进行微信OAuth2.0授权登录接入之前,在微信开 ...

  2. laravel5实现微信第三方登录功能

    背景 最近手头一个项目需要实现用户在网站的第三方登录(微信和微博),后端框架laravel5.4. 实现过程以微信网页版第三方登录,其他于此类似,在此不做重复. 准备工作 网站应用微信登录是基于OAu ...

  3. 3. ABP .NETCore 添加企业微信第三方登录

    1.企业微信登录步骤 1.获取企业微信Token 官方文档:https://work.weixin.qq.com/api/doc#90000/90135/91039 2.通过Token 与前端传的Co ...

  4. Android Learning:微信第三方登录

    这两天,解决了微信第三方授权登录的问题,作为一个新手,想想也是一把辛酸泪.我想着,就把我的遇到的坑给大家分享一下,避免新手遇到我这样的问题能够顺利避开. 步骤一 微信开发者平台 我开始的解决思路是,去 ...

  5. Android 微信第三方登录

    步骤一 微信开发者平台 我开始的解决思路是,去微信开发者平台看API文档. 这个API文档的主要意思呢,有三点: 1.你得下载这几样东西(下载链接),一个是他的范例代码,一个是他的签名生成工具. 2. ...

  6. C# winform C/S WebBrowser 微信第三方登录

    网上很多的资料都是B/S结构的,这里是基于C# C/S 结构的微信第三方授权登录 一.准备知识 1 http Get和Post方法.做第三方授权登录,获取信息基本上都是用get和post方法,做之前需 ...

  7. 微信公众号与APP微信第三方登录账号打通

    一个项目同时开发了APP和微信服务号,需要做到APP和微信服务号的账号互通同步,也就是说一个账号在2个地方都可以用,当然这个前提是保证你公司自己的服务器的数据库用的是同一套. 为保证用户数据的唯一性, ...

  8. PHP实现微信第三方登录的方法

    本文实例讲述了PHP版微信第三方实现一键登录及获取用户信息的方法.分享给大家供大家参考,具体如下: 注意,要使用微信在第三方网页登录是需要“服务号”才可以哦,所以必须到官方申请 一开始你需要进入微信公 ...

  9. Android 微信第三方登录(个人笔记)

    今天在写微信登录,花了半天时间搞定.然后写下自己的笔记,希望帮助更多的人...欢迎各位指教. 微信授权登录,官方说的不是很清楚.所以导致有一部分的坑. 微信注册应用平台的应用签名,下载 微信签名生成工 ...

随机推荐

  1. [个人小工具]清除SVN控制

    SVN控制说白了就是在.svn文件夹内把项目文件的信息保存,清除SVN控制其实就是把.svn文件夹删除就可以了.但是如果文件夹太多,总不可能一个个文件夹去删除吧,所以写了个遍历文件夹删除的小工具. R ...

  2. Hibernate基础学习(一)—初识Hibernate

    一.对象的持久化 狭义的理解: 持久化仅仅指把对象永久的保存到数据库中. 广义的理解: 持久化包括和数据库相关的各种操作.         保存: 把对象永久保存到数据库中.         更新: ...

  3. 使用spring利用HandlerExceptionResolver实现全局异常捕获

    最近一直没有时间更新是因为一直在更新自己使用的框架. 之后会慢慢带来对之前使用的spring+mvc+mybatis的优化. 会使用一些新的特性,实现一些新的功能. 我会尽量分离业务,封装好再拿出来. ...

  4. 从零开始用 Flask 搭建一个网站(二)

    从零开始用 Flask 搭建一个网站(一) 介绍了如何搭建 Python 环境,以及 Flask 应用基本项目结构.我们要搭建的网站是管理第三方集成的控制台,类似于 Slack. 本篇主要讲解数据如何 ...

  5. 图文详解如何快捷搭建LNMP服务环境

    上一篇与大家一起学习了下如何搭建LAMP环境的知识,今天小编再和大家分享下如何快捷地搭建LNMP环境,并搭建起一个网站.Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/S ...

  6. NOIP2009T3最优贸易

    洛谷传送门 看到这个题,原本想先从后往前dfs,求出能到终点的点,再在这些点里从前往后spfa,用一条边上的两个城市的商品价格的差来作边权,实施过后,发现图中既有负边权,又有回路,以及各种奇奇怪怪的东 ...

  7. html5脚本编程

    (1)跨文档消息传递,XDM.指的是来自不同域的页面间传递消息. XDM的核心是postMessage();向另一个地方传递数据,指是包含在当前页面中的iframe元素,由当前页面弹出的窗口. var ...

  8. 论.net平台的切身感触(惑)

    这篇博客只是作者客观看法,不喜勿喷,条条大路通罗马,路不同风景也不一样,接下来的路该怎么走? 简介:作者.net程序员一枚,工作已有四年,接触过.net平台winform,webform,mvc的开发 ...

  9. Extjs6(一)——用sencha cmd建立一个ExtJs小项目

    本文基于ext-6.0.0 一.用sencha cmd建立一个ExtJs小项目 首先,需要一个命令行工具.进入extjs所在目录. 然后,输入:sencha -sdk [ExtJs6.0文件夹地址] ...

  10. inform表单验证,正则表达式,用户名,身份证,密码,验证码

    最近利用空闲时间写了部分表单验证,包括用户名,身份证,密码,验证码,仅为自己巩固最近所学的知识 表单的样式使用的是table布局,因为觉得DIV布局定位比较麻烦,table有三列,分别为基本信息,输入 ...