rentaiming
2024-05-22 dc0ade6bfc59db3d133673952bd674ba7a63dc84
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package com.ruoyi.member.controller;
 
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.ruoyi.common.core.domain.R;
import com.ruoyi.member.VO.AlipayUser;
import io.swagger.annotations.ApiOperation;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
 
@Controller
@RequestMapping("/alipay")
public class AlipayAppController {
 
    /**
     * Alipay客户端
     */
    private AlipayClient alipayClient;
 
    /**支付宝网关*/
    /**
     * 沙箱的
     */
    private static final String ALIPAY_BORDER_DEV = "https://openapi-sandbox.dl.alipaydev.com/gateway.do";
    /**
     * 个人用户的
     */
    private static final String ALIPAY_BORDER_PROD = "https://openapi.alipay.com/gateway.do";
    /**
     * appID
     **/
    private static final String APP_ID_PROD = "2021003196653501";
    /**
     * 私钥
     */
    private static final String APP_PRIVATE_KEY = "";
    /**
     * 支付宝公钥
     */
    private static final String ALIPAY_PUBLIC_KEY = "";
 
 
    @RequestMapping("/getalipayInfo")
    @ApiOperation(value = "获取支付寶授权码")
    public R<AlipayUser> getInfo(String auth_code) throws AlipayApiException {
        //使用支付宝小程序的固定方法获取auth_code
        if (auth_code == null || auth_code.length() == 0) {
            return R.fail("请求参数auth_code不能为空");
        } else {
            //String serverUrl, String appId, String privateKey, String format,String charset, String alipayPublicKey, String signType
            //实例化客户端 参数:正式环境URL,Appid,商户私钥 PKCS8格式,字符编码格式,字符格式,支付宝公钥,签名方式
            AlipayClient alipayClient = new DefaultAlipayClient(ALIPAY_BORDER_PROD,APP_ID_PROD, APP_PRIVATE_KEY, "json", "GBK", ALIPAY_PUBLIC_KEY, "RSA2");
            AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
            // 值为authorization_code时,代表用code换取
            request.setGrantType("authorization_code");
            //授权码,用户对应用授权后得到的
            request.setCode(auth_code);
            //这里使用execute方法
            AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
            //刷新令牌,上次换取访问令牌时得到。见出参的refresh_token字段
            request.setRefreshToken(response.getAccessToken());
            //返回成功时 就将唯一标识返回
            if (response.isSuccess()) {
                System.out.println("调用成功");
                //我这里只返回了一个字段给前端用
                AlipayUser user=new AlipayUser();
                user.setUserid(response.getUserId());
                return R.ok(user);
            } else {
                return R.fail("调用失败");
            }
        }
    }
 
 
}