在一家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. 用C#写经理评分系统

    先写需求: 01.显示员工信息      02.实现项目经理给员工评分的功能 第一步:      建立两个类,员工类和项目经理类      定义属性和方法     员工类:工号.年龄.姓名.人气值.项 ...

  2. Python学习_argsparse

    # -*- coding: utf-8 -*- import argparse args = "-f hello.txt -n 1 2 3 -x 100 -y b -z a -q hello ...

  3. png、jpg、gif三种图片格式的区别

    png.jpg.gif三种图片格式的区别   2014-06-17 为什么想整理这方面的类容,我觉得就像油画家要了解他的颜料和画布.雕塑家要了解他的石材一样,作为网页设计师也应该对图片格式的特性有一定 ...

  4. Kindle PaperWhite3 越狱和PDF插件的安装

    下载所需工具 这里分享的文件是这个教程中所需要的所有文件 所有工具下载链接:http://pan.baidu.com/s/1c249P2S 密码:ozc7 一.准备工作 本越狱方法仅适用于 KO.KV ...

  5. JAVA----类的继承1(extends)

    要学习类的继承,首先应当理解继承的含义: 来自新华词典的释义: ①依法承受(死者的遗产等):-权ㄧ-人. ②泛指把前人的作风.文化.知识等接受过来:-优良传统ㄧ-文化遗产. ③后人继续做前人遗留下来的 ...

  6. 需求收集过程实例之 - GF Phase 1

    正统的需求过程是怎样呢?各位看客有兴趣可以问问google 百度.本人的体会是理论很清晰,现实很混沌.这篇随笔讲述的是我参与的几个项目的需求收集过程.有的很顺利,有的却是乱中求生.但是不管怎样,最终这 ...

  7. 使用charles抓取htpps的方法

    自己整理的步骤做个记录 1.下载证书,官方地址:http://www.charlesproxy.com/ssl.zip 可直接点击链接下载:http://charlesproxy.com/getssl ...

  8. nginx下的几种包管理器

    一般来说著名的linux系统基本上分两大类:   1.RedHat系列:Redhat.Centos.Fedora等   2.Debian系列:Debian.Ubuntu等   RedHat系列: 1 ...

  9. CSS3 基础知识[转载minsong的博客]

    CSS3 基础知识1.边框    1.1 圆角  border-radius:5px 0 0 5px;    1.2 阴影  box-shadow:2px 3px 4px 5px rgba(0,0,0 ...

  10. webapp万能选择器:iosselect

    iosselect是个什么东西? 移动端浏览器对于select的展示样式是不一致的,ios下是类似原生的picker,安卓下各浏览器展示各异,我们需要一个选择器组件来统一各端下各种浏览器的展示.下面是 ...