Przeglądaj źródła

支付宝获取token

weifanli 3 lat temu
rodzic
commit
91a4a70afa

+ 5 - 0
cooleshow-user/user-biz/pom.xml

@@ -91,6 +91,11 @@
             <artifactId>adapay-java-sdk</artifactId>
             <version>1.2.10</version>
         </dependency>
+        <dependency>
+            <groupId>com.alipay.sdk</groupId>
+            <artifactId>alipay-sdk-java</artifactId>
+            <version>4.23.0.ALL</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/config/HuifuConfiguration.java

@@ -1,5 +1,7 @@
 package com.yonge.cooleshow.biz.dal.config;
 
+import com.alipay.api.AlipayClient;
+import com.alipay.api.DefaultAlipayClient;
 import com.huifu.adapay.Adapay;
 import com.huifu.adapay.model.MerConfig;
 import com.yonge.cooleshow.biz.dal.props.HuifuProperties;
@@ -30,6 +32,16 @@ public class HuifuConfiguration {
 		return merConfig;
 	}
 
+	@Bean
+	public AlipayClient alipayClient(HuifuProperties authProperties){
+		AlipayClient alipayClient = new DefaultAlipayClient(
+				"https://openapi.alipay.com/gateway.do",
+				authProperties.getAliAppid(),
+				authProperties.getAliPrivatekey(),
+				"json","GBK",authProperties.getAliPublickey(),"RSA2");
+		return alipayClient;
+	}
+
 	public static HuifuProperties getHuifuProperties(){
 		return huifuProperties;
 	}

+ 41 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/props/HuifuProperties.java

@@ -51,6 +51,24 @@ public class HuifuProperties {
      * @updateTime 2022/3/31 11:24
      */
     private String wxSecret;
+    /***
+     * 支付宝appid
+     * @author liweifan
+     * @updateTime 2022/3/31 11:24
+     */
+    private String aliAppid;
+    /***
+     * 支付宝开发者私钥(由开发者自己生成)
+     * @author liweifan
+     * @updateTime 2022/3/31 11:24
+     */
+    private String aliPrivatekey;
+    /***
+     * 支付宝公钥(由支付宝生成)
+     * @author liweifan
+     * @updateTime 2022/3/31 11:24
+     */
+    private String aliPublickey;
 
     public String getApiKey() {
         return apiKey;
@@ -108,4 +126,27 @@ public class HuifuProperties {
         this.notifyUrl = notifyUrl;
     }
 
+    public String getAliAppid() {
+        return aliAppid;
+    }
+
+    public void setAliAppid(String aliAppid) {
+        this.aliAppid = aliAppid;
+    }
+
+    public String getAliPrivatekey() {
+        return aliPrivatekey;
+    }
+
+    public void setAliPrivatekey(String aliPrivatekey) {
+        this.aliPrivatekey = aliPrivatekey;
+    }
+
+    public String getAliPublickey() {
+        return aliPublickey;
+    }
+
+    public void setAliPublickey(String aliPublickey) {
+        this.aliPublickey = aliPublickey;
+    }
 }

+ 26 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/PaymentSdk.java

@@ -2,6 +2,11 @@ package com.yonge.cooleshow.biz.dal.sdk;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.AlipayClient;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.request.AlipaySystemOauthTokenRequest;
+import com.alipay.api.response.AlipaySystemOauthTokenResponse;
 import com.huifu.adapay.core.exception.BaseAdaPayException;
 import com.huifu.adapay.model.Payment;
 import com.huifu.adapay.model.PaymentConfirm;
@@ -17,6 +22,7 @@ import com.yonge.toolset.utils.http.HttpUtil;
 import com.yonge.toolset.utils.string.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
@@ -25,6 +31,8 @@ import java.util.*;
 @Component
 public class PaymentSdk {
     private final static Logger log = LoggerFactory.getLogger(PaymentSdk.class);
+    @Autowired
+    private AlipayClient alipayClient;
 
     /**
      * 执行一个支付交易
@@ -177,6 +185,24 @@ public class PaymentSdk {
         }
     }
 
+    public HttpResponseResult<AlipaySystemOauthTokenResponse> getAliToken(String authorization_code) {
+        AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
+        request.setGrantType("authorization_code");
+        request.setCode(authorization_code);
+        AlipaySystemOauthTokenResponse response = null;
+        try {
+            response = alipayClient.execute(request);
+            if (response.isSuccess()) {
+                return HttpResponseResult.succeed(response);
+            } else {
+                return HttpResponseResult.failed(response.getMsg());
+            }
+        } catch (AlipayApiException e) {
+            log.error("请求支付宝获取token异常,参数{},code is {},msg is {}", authorization_code, e.getErrCode(), e.getErrMsg());
+            return HttpResponseResult.failed(e.getErrMsg());
+        }
+    }
+
 /*
     public static Map<String, Object> queryList(Integer pageIndex, Long createdGte, Long createdLte) throws Exception {
         Map<String, Object> paymentParams = new HashMap<>();

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderService.java

@@ -61,7 +61,7 @@ public interface UserOrderService extends IService<UserOrder> {
      * @updateTime 2022/3/31 15:42
      * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.entity.Order>
      */
-    HttpResponseResult<UserOrder> executeOrder(OrderReq orderReq);
+    HttpResponseResult<UserOrder> executeOrder(OrderReq orderReq) throws Exception;
 
     /***
      * 订单付款
@@ -70,7 +70,7 @@ public interface UserOrderService extends IService<UserOrder> {
      * @updateTime 2022/3/31 17:23
      * @return: com.yonge.cooleshow.common.entity.HttpResponseResult
      */
-    HttpResponseResult<OrderPayRes> orderPay(OrderPayReq payReq);
+    HttpResponseResult<OrderPayRes> orderPay(OrderPayReq payReq) throws Exception;
 
     /***
      * 通过业务id查询用户正在交易中的订单

+ 5 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java

@@ -243,7 +243,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public HttpResponseResult<UserOrder> executeOrder(OrderReq orderReq) {
+    public HttpResponseResult<UserOrder> executeOrder(OrderReq orderReq) throws Exception{
         log.info("订单[创建订单] Req:{}", JSONObject.toJSONString(orderReq));
         //订单号生成
         Long orderNo = idGeneratorService.generatorId("userOrder");
@@ -288,7 +288,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public HttpResponseResult<OrderPayRes> orderPay(OrderPayReq payReq) {
+    public HttpResponseResult<OrderPayRes> orderPay(OrderPayReq payReq) throws Exception{
         //查询订单
         UserOrderVo detail = detail(payReq.getOrderNo(), payReq.getUserId());
         if (null == detail || !payReq.getUserId().equals(detail.getUserId())) {
@@ -528,7 +528,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
      * @updateTime 2022/3/31 16:15
      * @return: com.yonge.cooleshow.biz.dal.entity.Order
      */
-    private UserOrderVo insertOrder(Long orderNo, OrderReq orderReq, List<OrderCreateRes> resList) {
+    private UserOrderVo insertOrder(Long orderNo, OrderReq orderReq, List<OrderCreateRes> resList) throws Exception {
         UserOrder userOrder = new UserOrder();
 
         userOrder.setOrderNo(Long.toString(orderNo));
@@ -602,15 +602,10 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         int insert = baseMapper.insert(userOrder);
 
         if (insert == 0 || null == userOrder.getId()) {
-            throw new BizException("插入失败");
+            throw new BizException("创建订单失败");
         }
         UserOrderVo vo = new UserOrderVo();
-        try {
-            BeanUtils.copyProperties(vo, userOrder);
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new BizException("对象转换失败");
-        }
+        BeanUtils.copyProperties(vo, userOrder);
         vo.setOrderDetailList(orderDetailList);
         return vo;
     }

+ 19 - 2
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/PaymentController.java

@@ -1,13 +1,12 @@
 package com.yonge.cooleshow.student.controller;
 
 import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.response.AlipaySystemOauthTokenResponse;
 import com.huifu.adapay.core.AdapayCore;
-import com.huifu.adapay.core.util.AdapaySign;
 import com.huifu.adapay.core.util.StringUtil;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.sdk.PaymentSdk;
-import com.yonge.cooleshow.biz.dal.service.EmployeeService;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -62,6 +61,24 @@ public class PaymentController extends BaseController {
         return responseResult;
     }
 
+    @ApiOperation(value = "支付宝支付获取access_token(授权令牌)和user_id(用户支付宝 ID)")
+    @GetMapping("/getAliToken")
+    public HttpResponseResult<AlipaySystemOauthTokenResponse> getAliToken(String authorization_code) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        HttpResponseResult<AlipaySystemOauthTokenResponse> aliToken = paymentSdk.getAliToken(authorization_code);
+        /*if (responseResult.getStatus()) {
+            Map<String, String> data = responseResult.getData();
+            //绑定到用户表
+            user.setWxOpenid(data.get("openid"));
+            log.info("绑定用户openid,param is {}", JSONObject.toJSONString(user));
+            sysUserFeignService.bindOpenId(user);
+        }*/
+        return aliToken;
+    }
+
     /***
      * 汇付回调
      * 问题:1、成功失败需要回执什么信息 2、回调url地址是否需要加入白名单

+ 8 - 7
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java

@@ -62,11 +62,11 @@ public class UserOrderController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         orderReq.setUserId(user.getId());
-        Future<HttpResponseResult<UserOrder>> httpResponseResultFuture = DistributedLock.of(redissonClient)
-                .callIfLockCanGet(CacheNameEnum.LOCK_EXECUTE_ORDER.getRedisKey(user.getId())
-                        , () -> userOrderService.executeOrder(orderReq), 60L, TimeUnit.SECONDS);
 
         try {
+            Future<HttpResponseResult<UserOrder>> httpResponseResultFuture = DistributedLock.of(redissonClient)
+                    .callIfLockCanGet(CacheNameEnum.LOCK_EXECUTE_ORDER.getRedisKey(user.getId())
+                            , () -> userOrderService.executeOrder(orderReq), 60L, TimeUnit.SECONDS);
             return httpResponseResultFuture.get();
         } catch (BizException e) {
             return HttpResponseResult.failed(e.getMessage());
@@ -89,12 +89,13 @@ public class UserOrderController extends BaseController {
         payReq.setUserId(user.getId());
         payReq.setIpAddress(WebUtil.getRemoteIp(request));
 
-        Future<HttpResponseResult<OrderPayRes>> httpResponseResultFuture = DistributedLock.of(redissonClient)
-                .callIfLockCanGet(CacheNameEnum.LOCK_EXECUTE_ORDER.getRedisKey(user.getId())
-                        , () -> userOrderService.orderPay(payReq), 60L, TimeUnit.SECONDS);
-
         try {
+            Future<HttpResponseResult<OrderPayRes>> httpResponseResultFuture = DistributedLock.of(redissonClient)
+                    .callIfLockCanGet(CacheNameEnum.LOCK_EXECUTE_ORDER.getRedisKey(user.getId())
+                            , () -> userOrderService.orderPay(payReq), 60L, TimeUnit.SECONDS);
             return httpResponseResultFuture.get();
+        }  catch (BizException e) {
+            return HttpResponseResult.failed(e.getMessage());
         } catch (Exception e) {
             e.printStackTrace();
             return HttpResponseResult.failed("付款失败");