国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

香港云服务器
服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Java接入支付寶授權(quán)第三方登錄的完整步驟

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

2021-09-24 11:58不知所終,不知所起 Java教程

不管是支付寶支付,還是微信支付,還是銀聯(lián)支付等,大部分的支付流程都是相似的,這篇文章主要給大家介紹了關(guān)于Java接入支付寶授權(quán)第三方登錄的相關(guān)資料,使用支付寶的沙盒環(huán)境示例,需要的朋友可以參考下

開發(fā)前準(zhǔn)備

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

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

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

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

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

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

獲取用戶授權(quán)

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

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

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

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

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

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

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

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

yml:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 支付寶配置
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是沙箱

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

property:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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 對(duì)應(yīng)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è)務(wù)流程代碼

controller:

?
1
2
3
4
@getmapping(value = "/logincallback")
public string logincallback(httpservletrequest request){
    return alipayservice.logincallback(request);
}

service:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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ù)方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    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)亂碼時(shí)使用
//            valuestr = new string(valuestr.getbytes("iso-8859-1"), "utf-8");
            map.put(name, valuestr);
            log.info("接受支付寶回調(diào)參數(shù):{}",map);
        }
        return map;
    }

獲取token方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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è)務(wù)

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

總結(jié)

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

原文鏈接:https://blog.csdn.net/weixin_44440642/article/details/117906000

延伸 · 閱讀

精彩推薦
  • Java教程Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程升級(jí)IDEA后Lombok不能使用的解決方法

    升級(jí)IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級(jí),尋思已經(jīng)有好久沒有升過(guò)級(jí)了。升級(jí)完畢重啟之后,突然發(fā)現(xiàn)好多錯(cuò)誤,本文就來(lái)介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個(gè)非常實(shí)用的Java程序片段,對(duì)java開發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)搶紅包功能,采用多線程模擬多人同時(shí)搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml與Java對(duì)象的轉(zhuǎn)換詳解

    xml與Java對(duì)象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對(duì)象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對(duì)于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7472021-02-04
1899
主站蜘蛛池模板: 日韩精品免费在线观看 | 超色视频在线观看 | av一区在线 | 免费久久99精品国产婷婷六月 | 欧美大片免费影院在线观看 | 国产欧美日韩一区 | 深夜网址| av免费在线观看网站 | 日韩精品一区二区在线观看视频 | 日本日韩中文字幕 | 黄工厂精品免费观看 | 亚洲国产免费av | 久久综合九色综合欧美狠狠 | 日韩av在线一区 | 免费毛片网站 | 国产一区二区三区在线观看视频 | 日韩一二三 | 国产高清在线a视频大全 | 成人午夜精品一区二区三区 | 精品在线视频一区 | 黄色毛片看看 | 91精品国产一区二区三区四区在线 | 日本一级毛片免费看 | 日韩av成人在线观看 | 国产综合精品 | 天天躁日日躁bbbbb | 国产成人免费视频网站视频社区 | 人人爱人人爽 | 忘忧草av | 香蕉久久精品视频 | 国产伊人一区 | 韩国成人精品a∨在线观看 欧美精品综合 | 亚洲三级在线 | 黄色电影在线免费观看 | av久草 | 日本在线观看一区 | 在线观看特色大片免费网站 | 综合久久网 | 成人午夜精品一区二区三区 | 成人片在线播放 | 国产精品久久久久久久久久新婚 |