最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java接入支付寶授權第三方登錄的完整步驟

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

開發(fā)前準備

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

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

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

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

獲取用戶授權

生成喚起支付寶授權連接

用到appid+回調路徑 回調路徑=在上面配置的全路徑 具體路徑:

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掃碼

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

構建請求支付寶客戶端

yml:

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

  # 自己的私鑰
  merchantPrivateKey: 連接生成的私鑰
  # 支付寶公鑰
  alipayPublicKey: 鏈接生成的公鑰配置后支付寶給到的支付寶公鑰
  # 簽名方式
  signType: RSA2
  # 字符編碼格式
  charset: UTF-8
  # 字符編碼格式
  format: json
  # 支付寶網(wǎng)關 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)關  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){
	//獲取用戶掃碼授權的參數(shù)
	Map<String,String> map = this.getAliPayParam(request);
	//獲取用戶掃碼后的code
	String code = map.get("auth_code");
	//構建阿里客戶端
    AlipayClient alipayClient = aliPayProperty.getAlipayClient();
	//獲取阿里用戶token
    AlipaySystemOauthTokenResponse aliUserToken = 
    			this.getAliUserToken(code, alipayClient,0);
    //獲取用戶信息
    AlipayUserInfoShareResponse infoShareResponse = 
    			this.getUserInfo(alipayClient, aliUserToken, 0);
    //!?。∩诚洵h(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("接受支付寶回調參數(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()){
            //用戶授權成功
            log.info("----------------獲得支付寶用戶基本而信息:{}",userInfoReq);
            log.info("成功");
        } else {
            log.info("***********失敗,自旋開始第:{}次",number);
            number += 1;
            if(number < 3){
                log.info("調用用戶詳情失敗,嘗試:*******{}*******",number);
                return this.getUserInfo(alipayClient,aliUserToken,number);
            }
            return infoShareResponse ;
        }
    }

串業(yè)務

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

總結

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

相關文章

  • Java通俗易懂系列設計模式之代理模式

    Java通俗易懂系列設計模式之代理模式

    這篇文章主要介紹了Java通俗易懂系列設計模式之代理模式,對設計模式感興趣的同學,一定要看下
    2021-04-04
  • java實現(xiàn)在原有日期時間上加幾個月或幾天

    java實現(xiàn)在原有日期時間上加幾個月或幾天

    這篇文章主要介紹了java實現(xiàn)在原有日期時間上加幾個月或幾天,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 詳解Spring?Bean的配置方式與實例化

    詳解Spring?Bean的配置方式與實例化

    本文主要帶大家一起學習一下Spring?Bean的配置方式與實例化,文中的示例代碼講解詳細,對我們學習Spring有一定的幫助,需要的可以參考一下
    2022-06-06
  • SpringBoot整合SpringDataJPA的示例

    SpringBoot整合SpringDataJPA的示例

    本文主要介紹了SpringBoot整合SpringDataJPA的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • 簡單了解SpringMVC全局異常處理常用方法

    簡單了解SpringMVC全局異常處理常用方法

    這篇文章主要介紹了簡單了解SpringMVC全局異常處理常用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • Java SPI簡單應用案例詳解

    Java SPI簡單應用案例詳解

    這篇文章主要介紹了Java SPI簡單應用案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • JAVA中的for循環(huán)幾種使用方法講解

    JAVA中的for循環(huán)幾種使用方法講解

    這篇文章主要介紹了JAVA中的for循環(huán)幾種使用方法講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • spring boot(四)之thymeleaf使用詳解

    spring boot(四)之thymeleaf使用詳解

    Thymeleaf 是一個跟 Velocity、FreeMarker 類似的模板引擎,它可以完全替代 JSP 。接下來通過本文給大家介紹spring boot(四)之thymeleaf使用詳解,需要的朋友可以參考下
    2017-05-05
  • java自動生成ID號的方法

    java自動生成ID號的方法

    這篇文章主要介紹了java自動生成ID號的方法,涉及java生成ID號的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Spring?Security實現(xiàn)添加圖片驗證功能

    Spring?Security實現(xiàn)添加圖片驗證功能

    這篇文章主要為大家介紹了Spring?Security實現(xiàn)添加圖片驗證功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01

最新評論

水城县| 富平县| 南开区| 青神县| 贵定县| 葵青区| 澜沧| 邵阳县| 惠州市| 临朐县| 漳浦县| 新闻| 广西| 普兰县| 汝南县| 建昌县| 梓潼县| 东台市| 昌宁县| 柏乡县| 禹城市| 红原县| 客服| 汤原县| 宜阳县| 永泰县| 文登市| 黄陵县| 新丰县| 冕宁县| 南溪县| 泗洪县| 镇赉县| 赣州市| 仪征市| 梧州市| 莆田市| 宜川县| 公主岭市| 监利县| 彭山县|