1. 程式人生 > >微信登入第三方平臺

微信登入第三方平臺

   1.前臺請求後臺獲得相應的引數及回撥地址,使用者掃面後登入到回撥的地址中,回撥的地址中獲得使用者資訊及返回資訊,前臺監控返回資訊做相應的處理及登入註冊

public class WeChatLoginAction extends AbstractRestBaseAction {

    @Autowired
    private MembersService memberService;

    @Autowired
    private MemLoginLogService memLoginLogService;
    
    @Autowired
    private MemSignInRecordService memSignInRecordService;

    // 應用唯一標識
    private String appid = "wx2ed73e3d972bf2ce"; 
    
    // 應用金鑰AppSecret,在微信開放平臺提交應用稽核通過後獲得
    private String secret = "3dceda9ff389dbcce576e4ea4ed9da20"; 
    
    // 應用授權作用域,擁有多個作用域用逗號(,)分隔,網頁應用目前僅填寫snsapi_login即
    private String scope = "snsapi_login";
    
    /**
     * 
     * @category 登入請求微信操作 (步驟1)
     * @author hjj
     * @date 2018年10月13日
     * @return void
     */
    public void _$indexBatchRequestWeChat(){
        String redirect_uri = queryCallbackUri();// 請使用urlEncode對連結進行處理 
        Resp result = initResult();
        result.dataMap("appid", appid);
        result.dataMap("scope", scope);
        try {
            result.dataMap("redirect_uri",URLEncoder.encode(redirect_uri, "UTF-8"));
        } catch (Exception e) { 
            e.printStackTrace();
            initResult(RespCode.ErrFailure, "操作失敗");
        } 
    }
    
    /**
     * 
     * @category 登入獲得請求微信回撥地址(步驟1)
     * @author hjj
     * @date 2018年10月13日
     * @return
     * @return String
     */
    public String queryCallbackUri(){
        String path = request.getContextPath();
        String ServerName = request.getServerName();
        //String ServerName = "1608e55a.all123.net";//測試ip 不加ip
        String basePath = request.getScheme() + "://" + ServerName + path ; 
        basePath += "/we-chat-login";
        return basePath;
    }
    
}

頁面

引入

<script type="text/javascript" src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>

步驟1 前臺請求後臺獲得微信所需引數並監聽使用者掃碼情況  及處理

index-login.tpl

App._$get('${ctxPath}/api/we-chat-login.json?_type=requestWeChat&_batch=true',null,null,null,null,
                    function(data){ 
                         _this.ewmDiv = true; 
                         setTimeout(function(){
                             var obj = new WxLogin({
                                 self_redirect:true,
                                id: "ewmDiv", 
                                appid: data.appid, 
                                scope: data.scope, 
                                redirect_uri: data.redirect_uri,
                                style : 'black'
                             }); 
                         },0); 
                        //監聽返回引數 
                        _this.id_of_setinterval = setInterval(function(){ 
                            if(_this.ewmDiv == false){//關閉二維碼視窗
                                clearInterval(id_of_setinterval) 
                            }
                            var weChatStatus = $("#weChatStatus",$('#ewmDiv iframe')[0].contentDocument).val();//$('#ewmDiv iframe')[0].contentDocument 在哪裡獲得
                            if(weChatStatus != null){ //只要監控到了就要停掉定時器
                                clearInterval(_this.id_of_setinterval) 
                                if(weChatStatus == 200){//成功登入
                                    var login_jwt = $("#login_jwt",$('#ewmDiv iframe')[0].contentDocument).val();
                                    var login_t = $("#login_t",$('#ewmDiv iframe')[0].contentDocument).val();
                                    window.localStorage['_authorization'] = login_jwt;
                                    window.localStorage['_t'] = login_t;
                                    setTimeout(function(){
                                        //登入成功,跳轉到指定頁面 
                                        window.location.href = '${ctxPath}/member/';
                                    },100)
                                }else if(weChatStatus == 201){//未註冊 
                                    _this.ewmDiv = false;
                                    _this.registerDiv = true;//註冊
                                }
                            }
                        },1000);  
                    },function(err){
                    
                });

we-chat-login.tpl

<div>
<input type="hidden" id="weChatStatus" value="${status}"/> 
<input type="hidden" id="login_jwt" value="${jwt!}"/> 
<input type="hidden" id="login_t" value="${_t!}"/> 
<div style="text-align: center;margin-top: 100px;">
    <div class="thirdParty_1">
        <span class="thirdParty_1_1" style="font-size: 18px;">${statusTitle}</span>
    </div> 
</div> 
</div> 

package com.seryo.kpy.web.action;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;

import com.google.gson.JsonObject;
import com.seryo.common.Constants;
import com.seryo.kpy.web.AbstractTplAction;
import com.seryo.model.mem.MemOperateLog;
import com.seryo.model.mem.Members;
import com.seryo.service.mem.MemIntegralService;
import com.seryo.service.mem.MemOperateLogService;
import com.seryo.service.mem.MembersService;
import com.seryo.service.mem.SessionService;
import com.seryo.util.StringUtils;
import com.seryo.util.base.IpUtil;
import com.seryo.util.base.UrlUitl;
import com.seryo.util.json.JsonUtil;
import com.seryo.util.oauth.App;
import com.seryo.util.oauth.WebHelper;
import com.seryo.web.resp.Resp;

/**
 * 功能:微信登入操作
 * @Package com.seryo.kpy.web.restapi.member
 * @ClassName: WeChatLoginAction
 * @author hjj
 * @date 2018年10月13日 下午2:46:13
 */
public class WeChatLoginAction extends AbstractTplAction {

    @Autowired
    private MembersService memberService; 
    
    @Autowired
    private SessionService sessionService; 
    
    @Autowired
    private MembersService membersService;
    
    @Autowired
    private MemIntegralService memIntegralService;

    @Autowired
    private MemOperateLogService memOperateLogService;

    // 應用唯一標識
    private String appid = "wx2ed73e3d972bf2ce"; 
    
    // 應用金鑰AppSecret,在微信開放平臺提交應用稽核通過後獲得
    private String secret = "3dceda9ff389dbcce576e4ea4ed9da20";  
    
  
    
    /**
     * 
     * @category (步驟1)回撥地址
     * @author hjj
     * @date 2018年10月13日
     * @return void
     */
    @Override
    public String execute(){
        String code = param("code"); 
        Resp result = initResult();
        Integer status = null;
        String statusTitle = "";
        String weChatOpenId = "";
        String access_token = "";
        if(!StringUtils.isBlank(code)){//不為空則是  使用者允許授權 否則不做處理
            String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+appid+"&secret="+secret+"&code="+code+"&grant_type=authorization_code";
            try {
                String fhz = UrlUitl.sendGet(url); 
                 JsonObject json = JsonUtil.fromJson(fhz);
                 if(json.get("errcode") != null){
                     status = -1;
                     statusTitle = "操作異常";
                 }else{
                     access_token = json.get("access_token").getAsString(); 
                     weChatOpenId = json.get("openid").getAsString(); 
                     Members members = memberService.queryWeChat(weChatOpenId);
                     if(members != null){//0 正常 1不正常 2為註冊  
                         App app = WebHelper.getApp(request);
                         if(Constants.USER_STATUS_NORMAL.equals(members.getStatus())){//使用者轉態正常
                             JsonObject userJson = sessionService.thirdPartyLogin(members, null, response, request, app);
                             attr("jwt",userJson.get("jwt").getAsString());
                             attr("_t",userJson.get("_t").getAsString());
                             status = 200;
                             statusTitle = "登入成功";
                         }else{//狀態異常
                             status = -2;
                             statusTitle = "使用者狀態異常";
                         }
                     }else{//未繫結賬號
                         JsonObject json2 = queryUserData(access_token, weChatOpenId);
                         if(json2.get("errcode") != null){//獲得使用者資訊
                             status = -3;
                             statusTitle = "使用者授權失敗";
                         }else{
                             HttpSession session = request.getSession();
                             session.setAttribute("sessionUserData", json2);//設定到Session中
                             status = 201;
                             statusTitle = "未繫結賬號";
                         }
                     }
                 }
            } catch (Exception e) {
                e.printStackTrace();
                status = -4;
                statusTitle = "系統異常";
            }
        } 
        attr("status",status);
        attr("statusTitle",statusTitle);
        return SUCCESS;
    } 
    
    /**
     * 
     * @category 獲得微信使用者資訊
     * @author hjj
     * @date 2018年10月17日
     * @param ACCESS_TOKEN 呼叫憑證
     * @param openid 普通使用者的標識,對當前開發者帳號唯一
     * @return void
     */
    public JsonObject queryUserData(String ACCESS_TOKEN, String openid){
        String url = "https://api.weixin.qq.com/sns/userinfo?access_token="+ACCESS_TOKEN+"&openid="+openid;
        String fhz = UrlUitl.sendGet(url);  
        return JsonUtil.fromJson(fhz);
    }
    
    @Override
    public String detail(){
        String code = param("code"); 
        Resp result = initResult();
        Integer status = null;
        String statusTitle = ""; 
        if(!StringUtils.isBlank(code)){//不為空則是  使用者允許授權 否則不做處理
            String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+appid+"&secret="+secret+"&code="+code+"&grant_type=authorization_code";
            try {
                String fhz = UrlUitl.sendGet(url); 
                 JsonObject json = JsonUtil.fromJson(fhz);
                 if(json.get("errcode") != null){
                     status = -1;
                     statusTitle = "操作異常";
                 }else{
                     String openid = json.get("openid").getAsString();
                     Members members = getMembers();// 獲取當前登入使用者
                     if(members != null){
                         Members members2 = membersService.getById(members.getId());
                         members2.setWeChatId(openid);
                         MemOperateLog memOperateLog = new MemOperateLog();
                         String content = "使用者繫結微信";
                         if(!Constants.IS_TRUE.equals(members2.getIsWeChat())){//未繫結過微信
                             members2.setIsWeChat(Constants.IS_TRUE);
                             Integer integral =    members2.getIntegral() == null ? 0 : members2.getIntegral();
                             Integer integral2 = memIntegralService.saveMemIntegral(members2, "繫結微信", Constants.IS_TRUE, Constants.SYS_INTEGRAL_CODE_BINDING_WE_CHAT);
                             integral += integral2;
                             members2.setIntegral(integral);
                             content += ",並獲得繫結微信積分"+integral2;
                         }
                         membersService.saveOrUpdate(members2);
                         WebHelper.updateUserInfoUflag(request, response, members2);// 重新注入物件
                         
                         memOperateLog.setContent(content);
                         memOperateLog.setModule("個人中心");
                         memOperateLog.setResult(Constants.IS_TRUE);
                         App app = WebHelper.getApp(request);
                         memOperateLog.setIp(IpUtil.getIpAddr(request));// ip
                         memOperateLogService.addMemOperateLog(members2, app, memOperateLog);
                         status = 200;
                         statusTitle = "繫結成功";
                     }else{
                         status = 0;
                         statusTitle = "未登入,請重新登入!";
                     }
                 }
            } catch (Exception e) {
                e.printStackTrace();
                status = -2;
                statusTitle = "系統異常";
            }
        } 
        attr("status",status);
        attr("statusTitle",statusTitle);
        return SUCCESS;
    }

}
 

相關推薦

登入第三方平臺

   1.前臺請求後臺獲得相應的引數及回撥地址,使用者掃面後登入到回撥的地址中,回撥的地址中獲得使用者資訊及返回資訊,前臺監控返回資訊做相應的處理及登入註冊 public class WeChatLoginAction extends AbstractRestBaseAct

關於使用登入第三方APP的實現(Android版)

轉自:http://my.oschina.net/crazymus/blog/521164 使用微信登入APP,免去註冊過程,現在已經有很多的類似應用了。整合該功能過程不復雜,但還是有一些地方需要注意的。 開始之前,需要做下面的準備工作。 1、到微信開放平臺註冊你的APP,並申請開通

教你怎麼用php將第三方平臺打通(建議使用測試號 【功能多】)

新建一個php檔案 寫上如下程式碼<?php echo $_GET["echostr"]; ?> 然後上傳到阿里雲主機 或其他都可以  最後就可以配置成功了下面這段程式碼 是安全驗證  相當於漏洞補丁驗證訊息的確來自微信伺服器private

iOS第三方登入 登入 第三方登入微詳解AF3.0

專案地址 :    https://github.com/zhonggaorong/weixinLoginDemo 最新版本的微信登入實現步驟實現: 1.在進行微信OAuth2.0授權登入接入之前,在微信開放平臺註冊開發者帳號,並擁有一個已稽核通過的移動應用,並獲得相應的AppID和AppSecret

掃描二維碼登入第三方平臺

嗯。。。。。。 最近做了一個微信掃碼登陸第三方平臺功能,說下步驟就行,反正原理你們網上直接百度,我這裡寫了,估計也沒幾個人有耐心看 第一步 生成一個連結   https://open.weixin.qq.com/connect/qrconnect?appid=xxxxxxx

開放平臺開發(3) 移動應用登入

在這篇微信公眾平臺開發教程中,我們將介紹如何使用微信開放平臺介面實現移動應用微信登入的功能。   移動應用微信登入是基於OAuth2.0協議標準構建的微信OAuth2.0授權登入系統。 在進行微信OAuth2.0授權登入接入之前,在微信開放平臺註冊開發者帳號,並擁有一個已稽核通過

Android開發第三方登入--登入

QQ登入、微信登入,新浪微博登入資料獲取demo下載 http://download.csdn.net/detail/pkandroid/9903796 github地址 進入 https://github.com/HYVincent/Login 專案

ecshop第三方登陸之登入

    $appid = 'XXXXX';     $appsecret = 'XXXXXXX';     if (empty($code))     show_message('授權失敗', '返回首頁', '', 'wrong');          $token_url = 'https://api

QQ 和第三方登入

在專案的build.gradle 裡面的 dependencies { classpath 'com.android.tools.build:gradle:3.1.2' classpath 'com.mob.sdk:MobSDK:+' // NOTE:

Android第三方繫結登入詳解

微信登入官方文件地址:點選進入 一、準備工作 在進行微信登入之前,首先要在微信開放平臺註冊開發者賬號,並擁有一個已稽核通過的移動應用,並獲得相應的AppID和AppSecret,申請微信登入且通過稽核後,可開始接入流程。 微信開放平臺接入地址:點選進入 建立移動應用後獲得

解釋作為第三方授權登入

微信開放平臺的官網https://open.weixin.qq.com/, 這裡是文件, 這個圖看著來, 1. 使用者點選微信登入,這時請求我們自己的應用(一個藉口,該介面給頁面返回一個微信端的登入地址)。 例如:https://open.weixin.qq.c

使用第三方登入

        這兩天瞭解了下使用微信第三方登入相關問題,這樣方便使用者登入,不用擔心密碼遺忘的問題,所以記錄下微信登入的簡單流程        首先在在微信開放平臺註冊,記住要選擇開發者,每個微信都可以成為開發者,點選開啟微信開放平臺連結        或者在微信公眾平臺申

網站登入第三方登入

一、 網站應用微信登入是基於OAuth2.0協議標準構建的微信OAuth2.0授權登入系統。 在進行微信OAuth2.在進行微信OAuth2.0授權登入接入之前,在微信開放平臺註冊開發者帳號,並擁有一

網頁第三方登入原理

標籤: 微信開放平臺和公眾平臺的區別 1.公眾平臺面向的時普通的使用者,比如自媒體和媒體,企業官方微信公眾賬號運營人員使用,當然你所在的團隊或者公司有實力去開發一些內容,也可以呼叫公眾平臺裡面的介面,比如自定義選單,自動回覆,查詢功能。目前大多數微信通過認證之後,都在做這個事情。 mp.weixin.qq

第三方網站登入java程式碼實現

一、開發前知識 1、微信開放平臺與微信公眾平臺的區別  1.1 微信公眾平臺:    ② 微信公眾平臺面向的是普通的使用者,比如自媒體和媒體,企業官方微信公眾賬號運營人員使用,當然你所在的團隊或者公司有實力去開發一些內容,也可以呼叫公眾平臺裡面的

常用整合(第三方sdk整合套路)-- 登入

序言 程式開發過程中,總歸是會用到第三方sdk的,這裡就常用的登入、分享、支付做一個整合方法上的綜述,以備引申至通用的sdk使用方法。 一般的,sdk在登入、分享、支付上,都會按照如下的流程進行: 包裝請求(req)--> 傳送請求 -->

開放平臺登入授權的說明

微信登入,是指移動應用和網站應用通過接入該功能,讓使用者可以通過微信帳號來登入,降低註冊門檻和使用者流失率。此外還會在經過使用者同意後,將使用者基本資訊(頭像、暱稱、性別、地區、語言)提供給開發者。 注:本次開放屬於邀請內測,暫只對已開通移動應用微信登入的微信開放平臺帳

iOS第三方登入時不走回調方法

ios 開發中第三方微信登入時,使用真機測試,授權登入按鈕點選後不走微信demo的 -(void)onResp:(BaseResp*)resp 回撥方法不走,無法判斷是否成功 檢視網上一些解決方法,自己嘗試了一下可行。 就是在APPDelegate中,把之前根據d

分別嵌入 新浪博、QQ、第三方授權登入 獲取到頭像 暱稱等資訊

下面提到的這三種 授權登入 是分別嵌入,不是 share sdk 或者友盟 其它的。 一、下載sdk 地址 3.微信 微信SDK 二、程式碼編寫 怎麼嵌入 匯入庫,配置key  那些就不說。 在Applegate 裡面 - (BOOL)application:

iOS 第三方登入整合-錯誤-40029

錯誤紀錄: #pragma mark - WXApiDelegate - (void)onResp:(BaseResp *)resp{ if ([resp isKindOfClass:[S