中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

哈爾濱建設網(wǎng)站官網(wǎng)網(wǎng)站在線客服系統(tǒng) 免費

哈爾濱建設網(wǎng)站官網(wǎng),網(wǎng)站在線客服系統(tǒng) 免費,目標網(wǎng)站上做關鍵字布局,wordpress多語言插件要使用Java實現(xiàn)抖音授權登錄,您需要使用抖音開放平臺提供的API。以下是一個簡單的Java代碼示例,演示如何使用OAuth 2.0授權登錄流程: 要使用Java實現(xiàn)抖音授權登錄,您需要按照以下步驟進行操作: 創(chuàng)建抖音開放平臺賬號…

要使用Java實現(xiàn)抖音授權登錄,您需要使用抖音開放平臺提供的API。以下是一個簡單的Java代碼示例,演示如何使用OAuth 2.0授權登錄流程:

要使用Java實現(xiàn)抖音授權登錄,您需要按照以下步驟進行操作:

創(chuàng)建抖音開放平臺賬號
首先,您需要在抖音開放平臺上注冊并創(chuàng)建一個賬號。創(chuàng)建賬號后,您需要創(chuàng)建一個應用并獲取該應用的客戶端ID和回調(diào)URL。

導入相關依賴
為了實現(xiàn)抖音授權登錄,您需要使用Java OAuth API和Java HttpURLConnection。您可以通過Maven或Gradle等構建工具導入相關依賴。

構造請求參數(shù)
在進行授權登錄時,您需要構造以下請求參數(shù):

client_id:抖音開放平臺分配的客戶端ID
redirect_uri:授權成功后的跳轉(zhuǎn)地址
response_type:授權類型,一般為code
scope:授權范圍,一般為openid和userinfo
state:用于保持請求和回調(diào)的狀態(tài),您可以在授權成功后的回調(diào)中將其返回給前端
發(fā)送授權請求
使用Java HttpURLConnection構造POST請求,將構造好的請求參數(shù)發(fā)送到抖音開放平臺的授權請求URL。請求完成后,您將獲得一個包含code的響應。

獲取用戶信息
使用獲取到的code和您的客戶端ID,通過Java OAuth API構造訪問令牌(Access Token)請求。成功獲取Access Token后,您可以請求獲取用戶信息。您可以通過Java OAuth API構造請求參數(shù),發(fā)送請求并解析響應數(shù)據(jù)。

跳轉(zhuǎn)至抖音客戶端
最后,您需要將用戶重定向到抖音客戶端。在跳轉(zhuǎn)之前,您可以設置一些用戶參數(shù),以便在抖音客戶端中展示個性化頁面。

在實際開發(fā)過程中,以上步驟只是整個授權登錄流程的一部分。您還需要考慮如何處理授權回調(diào)、如何存儲和管理用戶的訪問令牌、如何處理錯誤等等。因此,建議您仔細閱讀抖音開放平臺的開發(fā)文檔,并根據(jù)實際情況進行開發(fā)。


package com.zbkj.front.service.impl;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zbkj.common.model.user.User;
import com.zbkj.common.response.CommonResult;
import com.zbkj.front.util.DyUtil;
import com.zbkj.front.util.HttpKit;
import com.zbkj.front.util.HttpsUtil;
import com.zbkj.front.vo.DyLoginVo;
import com.zbkj.service.dao.UserDao;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.stream.Collectors;import javax.annotation.Resource;
import java.util.*;/**
* IndexServiceImpl 接口實現(xiàn)*/
@Service
public class TiktokServiceImpl {private static final Logger logger = LoggerFactory.getLogger(TiktokServiceImpl.class);public final static Map<String, String> btyeDanceTypeApi = new HashMap<String, String>();/*** 驗證掃碼是否成功*/public static final String CHECK_QRCONNECT_URL = "https://e.douyin.com/passport/web/check_qrconnect/?next=https:%2F%2Fe.douyin.com%2Fsite%2F&aid=1575";static {// 抖音授權btyeDanceTypeApi.put("dy", "https://open.douyin.com/");// 頭條授權btyeDanceTypeApi.put("tt", "https://open.snssdk.com/");// 西瓜視頻btyeDanceTypeApi.put("xg", "https://open-api.ixigua.com/");}// 此處我將需要的參數(shù)配置在了配置文件中,大家也可以直接寫死@Value("${dibao.tiktok.redirectUri}")private String redirectUri;@Value("${dibao.tiktok.client_key}")private String client_key;@Value("${dibao.tiktok.client_secret}")private String client_secret;@Resourceprivate UserDao userDao;private static final String AUTHORIZE_URL = "https://open.douyin.com/platform/oauth/connect";public String geTiktokLink() {// 構造授權請求參數(shù)Map<String, String> params = new HashMap<>();params.put("redirect_uri", redirectUri);params.put("client_key", client_key);params.put("response_type", "code");params.put("scope", "user_info,trial.whitelist");params.put("state", UUID.randomUUID().toString().replace("-", ""));StringBuilder urlBuilder = new StringBuilder(AUTHORIZE_URL);urlBuilder.append("?");for (Map.Entry<String, String> param : params.entrySet()) {urlBuilder.append(param.getKey()).append("=").append(param.getValue()).append("&");}urlBuilder.deleteCharAt(urlBuilder.length() - 1); //return  urlBuilder.toString();}public CommonResult oauthTiktok(String code) {
//        String code = request.getHeaders("code"); // 獲取之前存儲的 code 參數(shù)DyLoginVo dyLoginVo=new DyLoginVo();dyLoginVo.setCode(code);dyLoginVo.setBtyeDanceType("dy");return   loginForDy(dyLoginVo);}/*** 抖音授權登錄* @param vo* @return*/public CommonResult loginForDy(DyLoginVo vo) {if (StringUtils.isEmpty(vo.getCode())) {return CommonResult.failed("code 不能為空");}/*** 獲取用戶基本信息*/Map<String, String> param = new HashMap<>();param.put("client_key", client_key);param.put("client_secret", client_secret);param.put("code", vo.getCode());param.put("grant_type", "authorization_code");String baseDataStr = HttpKit.sendGet(btyeDanceTypeApi.get(vo.getBtyeDanceType()) + "oauth/access_token", param);JSONObject baseDataObject = JSON.parseObject(baseDataStr);if (baseDataObject.get("data") == null) {logger.info("獲取字節(jié)用戶基本信息異常 req => {} , res => {}", JSON.toJSONString(param), baseDataStr);return CommonResult.failed("獲取用戶信息失敗");}JSONObject baseData = baseDataObject.getJSONObject("data");if (baseData.get("open_id") == null) {logger.info("獲取字節(jié)用戶基本信息異常 req => {} , res => {}", JSON.toJSONString(param), baseDataStr);return CommonResult.failed("獲取用戶信息失敗");}String openId = baseData.get("open_id").toString();String accessToken = baseData.get("access_token").toString();//        // 此刻可以判斷用戶是否存在, 可注冊
//        User user = userDao.getUserByOpenId(openId);
//        if (Objects.nonNull(user)) {
            return  check(vo.getCode());
//            // 存在, 組裝返回信息
//            return CommonResult.success(accessToken);
//        } else {// 不存在, 獲取用戶公開信息param.clear();param.put("open_id", openId);param.put("access_token", accessToken);String publicDataStr = HttpKit.sendGet(btyeDanceTypeApi.get(vo.getBtyeDanceType()) + "oauth/userinfo", param);JSONObject publicDataObject = JSON.parseObject(publicDataStr);JSONObject data = publicDataObject.getJSONObject("data");/**data => {"avatar": "https://example.com/x.jpeg","city": "上海","country": "中國","description": "","e_account_role": "<nil>","error_code": "0","gender": "<nil>","nickname": "張偉","open_id": "0da22181-d833-447f-995f-1beefea5bef3","province": "上海","union_id": "1ad4e099-4a0c-47d1-a410-bffb4f2f64a4"}*/
//            User member = new User();
//            member.setCreateTime(new Date());
//            member.setUpdateTime(new Date());
//            member.setSex(Integer.parseInt(data.getString("gender")));
//            member.setNickname(data.getString("nickname"));
//
//            if (!StringUtils.isEmpty(vo.getEncryptedMobile())) {
//                try {
//                    member.setPhone(DyUtil.getMobile(client_secret, vo.getEncryptedMobile()));
//                } catch (Exception e) {
//                    return CommonResult.failed("手機號解密失敗!");
//                }
//            }
//            member.setOpenId(openId);
//            // 頭像
//            member.setAvatar(data.getString("avatar"));
//            member.setUserType("dy");
//            userDao.insert(member);return CommonResult.success(data);
//        }}public static void main(String[] args) {check("act.3.LXyHk5yavsm-nJgbnxgYwRub3n3KsXBTLwFoqxLcE_2pg469iOOk4JgGiheqbDxGWHzCoss-i2y3JriwlGq3RRvh1cUEXYpA_bxHzRagX-oyonc3bfDm1U9Dvn8nWAeGfjbGNVhm1ac3Lxfe8tfSZr8F3Diw3JXmoTEwO34ZyAXedddaujUjr_O0CoE=");}/*** 掃碼是否成功* @param token* @return*/public static CommonResult check(String token){Map<String, String> param = new HashMap<>();JSONObject jsonObject = HttpsUtil.urlGet(CHECK_QRCONNECT_URL + String.format("&token=%s", token), null, null, true);JSONObject data = jsonObject.getJSONObject("data");if (data == null) {return CommonResult.failed("");}//獲取headerJSONObject headerJson = jsonObject.getJSONObject("header");//獲取Set-CookieList<String> lists = JSONObject.parseArray(headerJson.getJSONArray("Set-Cookie").toJSONString(), String.class);lists = lists.stream().map(v -> v.split(";")[0]).collect(Collectors.toList());String cookie = StringUtils.join(lists, ";");return CommonResult.success(cookie);// TODO: 拿到Cookie處理自己的登錄流程...}}
http://m.risenshineclean.com/news/63387.html

相關文章:

  • 陜西西安最新疫情廣州seo效果
  • 外貿(mào)汽車網(wǎng)站有哪些互聯(lián)網(wǎng)營銷模式有哪些
  • 渝中網(wǎng)站建設成都網(wǎng)絡營銷推廣公司
  • 中國流量最大的網(wǎng)站排行百度推廣開戶流程
  • 電子商務網(wǎng)站建設的核心是免費收錄網(wǎng)站提交
  • 可以做問卷掙錢的網(wǎng)站怎么在百度發(fā)布免費廣告
  • 為什么搜索不到剛做的網(wǎng)站如何做網(wǎng)絡推廣人員
  • javaweb在線音樂網(wǎng)站開發(fā)seo是什么職業(yè)
  • 武漢云時代網(wǎng)站建設公司怎么樣廣州seo網(wǎng)站推廣平臺
  • 域名服務器都有了怎么做網(wǎng)站自己如何制作網(wǎng)頁
  • 百度商橋 網(wǎng)站慢女兒考試沒圈關鍵詞
  • webmaster網(wǎng)站制作地推接單正規(guī)平臺
  • 出格做網(wǎng)站怎么樣優(yōu)化營商環(huán)境心得體會個人
  • 內(nèi)蒙古創(chuàng)意網(wǎng)站開發(fā)關鍵詞怎么選擇技巧
  • 網(wǎng)站建設 建站知識人民政府網(wǎng)站
  • 網(wǎng)銷每天需要怎么做廣州網(wǎng)站優(yōu)化公司
  • 刷排名凡搜網(wǎng)站寶可以免費發(fā)帖的網(wǎng)站
  • 互聯(lián)網(wǎng)應用開發(fā)是什么seo 百度網(wǎng)盤
  • 石家莊疫情到底有多嚴重新的seo網(wǎng)站優(yōu)化排名 網(wǎng)站
  • wordpress分頁不起作用seo關鍵詞排名優(yōu)化評價
  • 鶴壁人民醫(yī)院網(wǎng)站誰做的百度小說搜索熱度排行榜
  • 10月哪個網(wǎng)站做電影票活動獨立站seo怎么做
  • 2023年石家莊疫情怎么樣了杭州seo排名
  • 五合一免費建站品牌推廣策略分析
  • wordpress js 插件開發(fā)百度視頻排名優(yōu)化
  • wordpress文章圖片函數(shù)企業(yè)seo排名哪家好
  • 上海網(wǎng)站推廣方法seo快速排名軟件價格
  • 邯鄲做網(wǎng)站推廣的地方培訓課程安排
  • 住房和城鄉(xiāng)建設部科技網(wǎng)站長沙優(yōu)化科技
  • 有了 ftp服務器密碼 怎么改網(wǎng)站seo搜索引擎優(yōu)化課程