欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java接入支付寶授權(quán)第三方登錄的完整步驟

 更新時間:2021年07月02日 12:07:34   作者:不知所終,不知所起  
不管是支付寶支付,還是微信支付,還是銀聯(lián)支付等,大部分的支付流程都是相似的,這篇文章主要給大家介紹了關(guān)于Java接入支付寶授權(quán)第三方登錄的相關(guān)資料,使用支付寶的沙盒環(huán)境示例,需要的朋友可以參考下

開發(fā)前準備

支付寶開發(fā)平臺.

支付寶沙箱環(huán)境申請使用

!!!重點 授權(quán)回調(diào)地址必須要寫全路徑也就是controller最終路徑(下面有具體細節(jié))

RSA2的密鑰生成: 支付寶提供生成密鑰地址.

獲取用戶授權(quán)

生成喚起支付寶授權(quán)連接

用到appid+回調(diào)路徑 回調(diào)路徑=在上面配置的全路徑 具體路徑:

https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?
app_id=2016####&scope=auth_user&edirect_uri=http://ip | 域名 + 接口地址

也可以使用自定義參數(shù)的連接:

https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=2016####
&state=自定義參數(shù)(多個用逗號拼接)&scope=auth_user&edirect_uri=http://ip | 域名 + 接口地址

具體怎么用??? 在線生成二維碼用支付寶沙箱app掃碼

回調(diào)地址接收支付寶參數(shù)

構(gòu)建請求支付寶客戶端

yml:

# 支付寶配置
ali:
  appId: 2016####

  # 自己的私鑰
  merchantPrivateKey: 連接生成的私鑰
  # 支付寶公鑰
  alipayPublicKey: 鏈接生成的公鑰配置后支付寶給到的支付寶公鑰
  # 簽名方式
  signType: RSA2
  # 字符編碼格式
  charset: UTF-8
  # 字符編碼格式
  format: json
  # 支付寶網(wǎng)關(guān) https://openapi.alipay.com/gateway.do 是正式的
  gatewayUrl: https://openapidev.alipay.com/gateway.do #dev是沙箱

Property:

import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 支付寶配置
 */
@Data
@Component
@ConfigurationProperties(prefix = "ali")
public class AliPayProperty {

    /**
     * 支付寶APPID
     */
    public String appId;
    /**
     * 商戶私鑰,您的PKCS8格式RSA2私鑰
     */
    public String merchantPrivateKey ;
    /**
     * 支付寶公鑰,查看地址:https://openhome.alipay.com 對應APPID下的支付寶公鑰。
     */
    public String alipayPublicKey;
    /**
     * 接口格式規(guī)范
     */
    public String format;
    /**
     * 簽名方式
     */
    public String signType;
    /**
     * 字符編碼格式
     */
    public String charset;
    /**
     * 支付寶網(wǎng)關(guān)  https://openapi.alipay.com/gateway.do 這是正式地址
     */
    public String gatewayUrl;

    /**
     * 支付寶客戶端
     * @return
     */
    public AlipayClient getAlipayClient(){
        AlipayClient alipayClient = new DefaultAlipayClient(
                this.gatewayUrl,
                this.appId,
                this.merchantPrivateKey,
                this.format,
                this.charset,
                this.alipayPublicKey,
                this.signType);
        return alipayClient;
    }

}

業(yè)務流程代碼

controller:

@GetMapping(value = "/loginCallBack")
public String loginCallBack(HttpServletRequest request){
	return aliPayService.loginCallBack(request);
}

service:

public String loginCallBack(HttpServletRequest request){
	//獲取用戶掃碼授權(quán)的參數(shù)
	Map<String,String> map = this.getAliPayParam(request);
	//獲取用戶掃碼后的code
	String code = map.get("auth_code");
	//構(gòu)建阿里客戶端
    AlipayClient alipayClient = aliPayProperty.getAlipayClient();
	//獲取阿里用戶token
    AlipaySystemOauthTokenResponse aliUserToken = 
    			this.getAliUserToken(code, alipayClient,0);
    //獲取用戶信息
    AlipayUserInfoShareResponse infoShareResponse = 
    			this.getUserInfo(alipayClient, aliUserToken, 0);
    //?。?!沙箱環(huán)境用戶沒有這些基本信息但是可以看到支付寶接口是成功的
    return "SUECCSS";
}

封裝接收參數(shù)方法:

    public Map<String,String> getAliPayParam(HttpServletRequest request) {
        Map<String,String> map = new HashMap();
        Map<String, String[]> requestParams = request.getParameterMap();
        for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
            String name = (String) iter.next();
            String[] values = (String[]) requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i < values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
            }
            // 亂碼解決,這段代碼在出現(xiàn)亂碼時使用
//            valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
            map.put(name, valueStr);
            log.info("接受支付寶回調(diào)參數(shù):{}",map);
        }
        return map;
    }

獲取token方法:

    private AlipaySystemOauthTokenResponse getAliUserToken(String code, AlipayClient alipayClient,int number) throws AlipayApiException {
        AlipaySystemOauthTokenRequest alipaySystemOauthTokenRequest = new AlipaySystemOauthTokenRequest();
        alipaySystemOauthTokenRequest.setGrantType("authorization_code");
        alipaySystemOauthTokenRequest.setCode(code);
        AlipaySystemOauthTokenResponse oauthTokenResponse = alipayClient.execute(alipaySystemOauthTokenRequest);
        log.info("獲得用戶+++++++++++++++token:{}+++++++++++++++",oauthTokenResponse.getAccessToken());
        log.info("獲得用戶+++++++++++++++uuid:{}+++++++++++++++",oauthTokenResponse.getUserId());
        if(oauthTokenResponse.isSuccess()){
            log.info("成功");
        } else {
        	log.info("***********失敗,自旋開始第:{}次",number);
            number += 1;
            if(number < 3){
                log.info("獲取token失敗,嘗試:*******{}*******",number);
                return this.getAliUserToken(apiPayLoginReq, alipayClient, number);
            }
        }
        return oauthTokenResponse;
    }

獲取用戶支付寶信息方法:

private AlipayUserInfoShareResponse getUserInfo(AlipayClient alipayClient,AlipaySystemOauthTokenResponse aliUserToken,int number) throws AlipayApiException {
        AlipayUserInfoShareRequest alipayUserInfoShareRequest = new AlipayUserInfoShareRequest();
        AlipayUserInfoShareResponse infoShareResponse = alipayClient.execute(alipayUserInfoShareRequest,aliUserToken.getAccessToken());
        log.info("----------------獲得支付寶用戶詳情:{}",infoShareResponse.getBody());
        UserInfoReq userInfoReq = new UserInfoReq();
        if(infoShareResponse.isSuccess()){
            //用戶授權(quán)成功
            log.info("----------------獲得支付寶用戶基本而信息:{}",userInfoReq);
            log.info("成功");
        } else {
            log.info("***********失敗,自旋開始第:{}次",number);
            number += 1;
            if(number < 3){
                log.info("調(diào)用用戶詳情失敗,嘗試:*******{}*******",number);
                return this.getUserInfo(alipayClient,aliUserToken,number);
            }
            return infoShareResponse ;
        }
    }

串業(yè)務

用戶掃碼后后會跳到你配置的回調(diào)地址上?。。〉且驗榇a中返回是success,用戶收到的只是個字符串。所以此處因該是配置支付寶去回調(diào)前端地址 然后參數(shù)讓前端原封不動傳向后端 后端解析成功后,前端引導用戶進行下一步操作

總結(jié)

到此這篇關(guān)于Java接入支付寶授權(quán)第三方登錄的文章就介紹到這了,更多相關(guān)Java接入支付寶授權(quán)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Java在netty中實現(xiàn)線程和CPU綁定

    基于Java在netty中實現(xiàn)線程和CPU綁定

    這篇文章主要介紹了基于Java在netty中實現(xiàn)線程和CPU綁定,文章圍繞主題的相關(guān)內(nèi)容展開詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • Java for循環(huán)的幾種用法分析

    Java for循環(huán)的幾種用法分析

    本篇文章小編為大家介紹,Java for循環(huán)的幾種用法分析。需要的朋友參考下
    2013-04-04
  • SpringBoot整合OpenFeign的坑

    SpringBoot整合OpenFeign的坑

    最近試用SpringBoot+K8S,遇到了個坑,通過OpenFeign請求返回值LocalDateTime發(fā)生了異常,本文就詳細的介紹一下解決方法,感興趣的可以了解一下
    2021-07-07
  • 基于java文本復制的7種方式總結(jié)

    基于java文本復制的7種方式總結(jié)

    下面小編就為大家分享一篇基于java文本復制的7種方式總結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Java如何在List或Map遍歷過程中刪除元素

    Java如何在List或Map遍歷過程中刪除元素

    相信大家在日常的開發(fā)過程中,經(jīng)常需要對List或Map里面的符合某種業(yè)務的數(shù)據(jù)進行刪除,但是如果不了解里面的機制就容易掉入“陷阱”導致遺漏或者程序異常。下面這篇文章將會給大家詳細介紹Java如何在List和Map遍歷過程中刪除元素,有需要的朋友們可以參考借鑒。
    2016-12-12
  • 編寫調(diào)用新浪微博API的Java程序來發(fā)送微博

    編寫調(diào)用新浪微博API的Java程序來發(fā)送微博

    這篇文章主要介紹了編寫調(diào)用新浪微博API的Java程序來發(fā)送微博的方法,只是展示了一個基本的程序框架而非一個完整的圖形化軟件:)需要的朋友可以參考下
    2015-11-11
  • 利用maven deploy上傳本地jar至私服的方法

    利用maven deploy上傳本地jar至私服的方法

    這篇文章主要介紹了利用maven deploy上傳本地jar至私服的方法,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • Eclipse新建項目不可選擇Java Project問題解決方案

    Eclipse新建項目不可選擇Java Project問題解決方案

    這篇文章主要介紹了Eclipse新建項目不可選擇Java Project問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot+ruoyi框架文件上傳和下載的實現(xiàn)

    SpringBoot+ruoyi框架文件上傳和下載的實現(xiàn)

    文件的上傳和下載功能,是項目開發(fā)過程中比較常見的業(yè)務需求,本文主要介紹了SpringBoot+ruoyi框架文件上傳和文件下載的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • SpringBoot整合Mybatis-plus案例及用法實例

    SpringBoot整合Mybatis-plus案例及用法實例

    mybatis-plus是一個 Mybatis 的增強工具,在 Mybatis 的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)、提高效率而生,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合Mybatis-plus案例及用法實例的相關(guān)資料,需要的朋友可以參考下
    2022-11-11

最新評論