JAVA接入支付寶授權第三方登入
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 ;
/**
* 支付寶公鑰 , 檢視地址: 對應 APPID 下的支付寶公鑰。
*/
public String alipayPublicKey;
/**
* 介面格式規範
*/
public String format;
/**
* 簽名方式
*/
public String signType;
/**
* 字元編碼格式
*/
public String charset;
/**
* 支付寶閘道器 這是正式地址
*/
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;
}
}
業務流程程式碼
controller :
@GetMapping(value = "/loginCallBack")
public String loginCallBack(HttpServletRequest request){
return aliPayService.loginCallBack(request);
}
1
2
3
4
service :
public String loginCallBack(HttpServletRequest request){
// 獲取使用者掃碼授權的引數
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);
// !!!沙箱環境使用者沒有這些基本資訊但是可以看到支付寶介面是成功的
return "SUECCSS";
}
封裝接收引數方法:
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] + ",";
}
// 亂碼解決,外匯跟單gendan5.com這段程式碼在出現亂碼時使用
// valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
map.put(name, valueStr);
log.info(" 接受支付寶回撥引數: {}",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 ;
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2780188/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- IDEA支付寶小程式開發流程——授權登入Idea
- .netcore第三方登入授權:10分鐘急速接入NetCore
- Java接入支付寶支付教程Java
- Java QQ授權第三方登陸Java
- java 微信授權登入配置Java
- Android 第三方登入之新浪微博授權登入Android
- 支付寶怎麼刪除已授權應用?支付寶刪除已授權應用的方法
- Java微信授權登入小程式介面Java
- 第三方微信登入 | 靜默授權與網頁授權的實現網頁
- 微信授權登入
- 關於QQ授權登入
- laravel使用EasyWeChat 授權登入Laravel
- Android 接入微信支付寶支付Android
- IDEA基於支付寶小程式之授權篇Idea
- 小程式登入、微信網頁授權(Java版)網頁Java
- 手機APP如何接入支付寶支付APP
- 微信小程式的授權登入微信小程式
- App 第三方登入獲取使用者資訊 支付寶登入後端程式碼參考APP後端
- web端網站接入支付寶支付過程Web網站
- Blazor OIDC 單點登入授權例項7 - Blazor hybird app 端授權BlazorAPP
- <span>小程式授權登入彈框</span>
- 「新手上路」Go 微博授權登入Go
- 關於uniapp呼叫支付寶登入問題APP
- Lumen/Laravel 中支付寶 / 微信第三方 App 登陸LaravelAPP
- PHP實現支付寶小程式使用者授權的工具類PHP
- ajax 實現微信網頁授權登入網頁
- 微信小程式授權登入最佳實踐微信小程式
- 微信網頁授權登入(c# Webform)網頁C#WebORM
- 認證授權:IdentityServer4 - 單點登入IDEServer
- golang 基於 jwt 實現的登入授權GolangJWT
- uni-app 微信小程式授權登入APP微信小程式
- 原生 PHP 實現支付寶 App 第三方登入獲取 使用者資訊PHPAPP
- 支付寶小程式(後臺)---獲取授權和使用者資訊
- C#微信網頁授權登入(NET MVC)C#網頁MVC
- 使用釘釘Oauth2授權登入Odoo配置OAuthOdoo
- .NET Core企業微信網頁授權登入網頁
- Spring Security OAuth2.0認證授權六:前後端分離下的登入授權SpringOAuth後端
- 客服系統配置抖音開放平臺,實現授權登入回覆私信和評論 實現授權登入,為授權使用者管理回覆私信和評論