From d9a5d041ae25f2bf2912bbf92981d1c6b3bc7350 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E5=87=AF=E5=87=AF?= Date: Tue, 24 Sep 2024 09:53:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=BE=AE=E4=BF=A1=E5=B0=8F?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=92=8C=E6=94=AF=E4=BB=98=E5=AE=9D=E5=B0=8F?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E7=99=BB=E5=BD=95=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cashierservice/alipayUtil/AlipayUtil.java | 92 +++++++++++++++++++ .../cashierservice/auth/AuthSource.java | 35 +++++++ 2 files changed, 127 insertions(+) create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/alipayUtil/AlipayUtil.java create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/auth/AuthSource.java diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/alipayUtil/AlipayUtil.java b/src/main/java/com/chaozhanggui/system/cashierservice/alipayUtil/AlipayUtil.java new file mode 100644 index 0000000..2ede67d --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/alipayUtil/AlipayUtil.java @@ -0,0 +1,92 @@ +package com.chaozhanggui.system.cashierservice.alipayUtil; + +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.AlipayConfig; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.request.AlipaySystemOauthTokenRequest; +import com.alipay.api.response.AlipaySystemOauthTokenResponse; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * 支付宝通用SDK工具类 + * + * @author tankaikai + * @since 2024-09-23 16:15 + */ + +@Slf4j +@Component +public class AlipayUtil { + + /** + * 网关地址 线上:https://openapi.alipay.com/gateway.do 沙箱:https://openapi.alipaydev.com/gateway.do + */ + @Value("${alipay.sdk.config.serverUrl}") + private String serverUrl; + /** + * 应用ID + */ + @Value("${alipay.sdk.config.appId}") + private String appId; + /** + * 应用私钥 + */ + @Value("${alipay.sdk.config.privateKey}") + private String privateKey; + /** + * 支付宝公钥 + */ + @Value("${alipay.sdk.config.alipayPublicKey}") + private String alipayPublicKey; + + /** + * 创建支付宝客户端 + * @return AlipayClient + */ + @SneakyThrows + public AlipayClient createClient() { + AlipayConfig alipayConfig = new AlipayConfig(); + //设置网关地址 + alipayConfig.setServerUrl(serverUrl); + //设置应用ID + alipayConfig.setAppId(appId); + //设置应用私钥 + alipayConfig.setPrivateKey(privateKey); + //设置支付宝公钥 + alipayConfig.setAlipayPublicKey(alipayPublicKey); + return new DefaultAlipayClient(alipayConfig); + } + + /** + * 获取支付宝用户的openId + * @param code 用户信息授权码 + * @return openId + */ + public String getOpenId(String code) throws AlipayApiException{ + AlipaySystemOauthTokenRequest req = new AlipaySystemOauthTokenRequest(); + //SDK已经封装掉了公共参数,这里只需要传入业务参数 + req.setCode(code); + req.setGrantType("authorization_code"); + //此次只是参数展示,未进行字符串转义,实际情况下请转义 + //req.setBizContent(" {" + " \"primary_industry_name\":\"IT科技/IT软件与服务\"," + " \"primary_industry_code\":\"10001/20102\"," + " \"secondary_industry_code\":\"10001/20102\"," + " \"secondary_industry_name\":\"IT科技/IT软件与服务\"" + " }"); + AlipaySystemOauthTokenResponse response; + try { + response = createClient().execute(req); + }catch (AlipayApiException e){ + log.error("获取支付宝用户信息失败,错误码:{},错误信息:{}", e.getErrCode(), e.getErrMsg()); + throw e; + } + //调用失败 + if (!response.isSuccess()) { + log.error("获取支付宝用户信息失败,错误码:{},错误信息:{}", response.getSubCode(), response.getSubMsg()); + throw new AlipayApiException(response.getSubCode(), response.getSubMsg()); + } + //调用成功,则处理业务逻辑 + return response.getOpenId(); + } + +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/auth/AuthSource.java b/src/main/java/com/chaozhanggui/system/cashierservice/auth/AuthSource.java new file mode 100644 index 0000000..11b952e --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/auth/AuthSource.java @@ -0,0 +1,35 @@ +package com.chaozhanggui.system.cashierservice.auth; + +/** + * 三方登录认证来源 + * @author tankaikai + * @since 2024-09-23 17:51 + */ +public enum AuthSource { + WECHAT("微信", "wechat"), + ALIPAY("支付宝", "alipay"); + + private String name; + private String value; + + AuthSource(String name, String value) { + this.name = name; + this.value = value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +}