在一家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++ 循环

    有的时分,可能需求屡次履行同一块代码.通常情况下,句子是顺序履行的:函数中的第一个句子先履行,接着是第二个句子,依此类推. 编程言语供给了答应更为杂乱的履行途径的多种操控结构. 循环句子答应咱们屡次履 ...

  2. 学Java,是自学还是去培训班学习?

    现在正在读在校的最后一个学年,想毕业后从事编程,但是感觉自己技术太差,应该是培训呢?还是去找实习?亦或是有更好的途径? 对于 Android 目前的行业趋势,不知道自己该不该坚持?还是转其他行业? 已 ...

  3. Java NIO之通道

    一.前言 前面学习了缓冲区的相关知识点,接下来学习通道. 二.通道 2.1 层次结构图 对于通道的类层次结构如下图所示. 其中,Channel是所有类的父类,其定义了通道的基本操作.从 Channel ...

  4. java多线程基本概述(二)——Thread的一些方法

    在Thread类中有很多方法值得我们关注一下.下面选取几个进行范例: 1.1.isAlive()方法 java api 描述如下: public final boolean isAlive() Tes ...

  5. 【PAT_Basic日记】1004 成绩排名

    至今仍然存在问题,第一个测试点不过 #include <stdio.h> #include <stdlib.h> #include <string.h> typed ...

  6. Xcode上传代码到github

    1.下载GitHub的Mac客户端 2.在Finder->下载,找到双击安装 3.打开Github Desktop软件, 需要进行登录, 登录的用户名密码就是github的用户信息,(如果没有去 ...

  7. 使用vue-cli构建多页面应用+vux(二)

    当我们安装好vue-cli完整的项目以后,我们开始对它进行改造,此处参考了简书某个作者的,附上原文链接 http://www.jianshu.com/p/43697bdee974以及此文例子地址htt ...

  8. C语言学习第九章

    学习C语言的最后一节课了,原因嘛上一章的末尾说过了,其实写这篇博客的时候以后开始学习Java一个多月了,一直因为各种各样的原因没有坚持做到每天一篇学习记录,可能主要因为懒吧....也有点笨,Java的 ...

  9. 【原创】bootstrap框架的学习 第五课

    一.Bootstrap 中定义了所有的 HTML 标题(h1 到 h6)的样式. <!DOCTYPE html> <html> <head> <title&g ...

  10. JS判断当前手机类型

    window.onload = function () { var u = navigator.userAgent; if (u.indexOf('Android') > -1 || u.ind ...