mitao
2024-08-12 aeb379749ad10eabd54086e93231228a48c69843
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
package com.ruoyi.order.util.alipay.util;
 
 
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.domain.AlipayTradeCreateModel;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.request.AlipayTradeCreateRequest;
import com.alipay.api.response.AlipayTradeCreateResponse;
import com.jpay.alipay.AliPayApi;
import com.jpay.alipay.AliPayApiConfig;
import com.jpay.alipay.AliPayApiConfigKit;
import com.ruoyi.order.util.alipay.config.AlipayConfig;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
 
 
/**
 * 支付宝签名工具类<
 */
@SuppressWarnings("unused")
public class PayDemoActivity {
 
     /**        支付宝参数配置项    */
        public static String serverUrl = "https://openapi.alipay.com/gateway.do";
        public static String format = "json";
        public static String charset = "UTF-8";
        public static String signType = "RSA2";
        
        public static String APP_ID = AlipayConfig.app_id;
        public static String APP_PRIVATE_KEY = AlipayConfig.private_key;
        public static String ALIPAY_PUBLIC_KEY = AlipayConfig.ali_public_key;
        public static String NOTIFY_URL = AlipayConfig.notify_url;
        
        //实例化客户端
        private static AlipayClient alipayClient = new DefaultAlipayClient(serverUrl, APP_ID, APP_PRIVATE_KEY, format, charset, ALIPAY_PUBLIC_KEY, signType);
 
 
    private static AliPayApiConfig aliPayApiConfig = null;
 
    static {
        aliPayApiConfig = AliPayApiConfig.New()
                .setAppId(APP_ID)
                .setCharset("UTF-8")
                .setPrivateKey(APP_PRIVATE_KEY)
                .setAlipayPublicKey(ALIPAY_PUBLIC_KEY)
                .setServiceUrl("https://openapi.alipay.com/gateway.do")
                .setSignType("RSA2")
                .build();
    }
        
    /**
     * @throws AlipayApiException 
     * @throws UnsupportedEncodingException 
     * @throws UnsupportedEncodingException 
     * @throws AlipayApiException 
     * 
     * 方法功能说明:支付宝2.0 app支付  
     * 创建:2017年2月10日 by tzj
     * 修改:日期 by 修改者  
     * 修改内容:  
     * @参数: @param subject
     * @参数: @param body
     * @参数: @param price
     * @参数: @param out_trade_no
     * @参数: @param notify_url
     * @参数: @return      
     * @return Map<String,Object>     
     * @throws
     */
    public static Map<String, Object> appPay(String subject, String body, Double price, String out_trade_no) throws UnsupportedEncodingException, AlipayApiException{
 
        String outtradeno = out_trade_no;
        String total_amount = price+"";
        
        /*********** 测试数据(仅供测试) ************/
//            subject = "subject"+DateUtil.getTodayDate("yyMMssHHmmss");
//            total_amount = "0.01";
        
        /*********** 测试数据(仅供测试)end ************/
        
            Map<String, Object> map = new HashMap<>();
        try {
 
            AliPayApiConfigKit.setThreadLocalAppId(APP_ID);
            AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig);
        
            //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
            AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
            //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
            AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
            model.setBody(body);
            model.setSubject(subject);
            model.setOutTradeNo(outtradeno);
            model.setTimeoutExpress("30m");
            model.setTotalAmount(total_amount);
            model.setProductCode("QUICK_MSECURITY_PAY");
            request.setBizModel(model);
            request.setNotifyUrl(NOTIFY_URL);
            // 这里和普通的接口调用不同,使用的是sdkExecute
            String orderInfo = "";
            orderInfo = AliPayApi.startAppPay(model, NOTIFY_URL);
 
 
            map.put("orderInfo", orderInfo);
            map.put("Type",2);
            
        } catch (Exception e) {
            e.printStackTrace();
        }
         return map;
    }
 
    public static Map<String, Object> jsApiPay(String subject, String body, Double price,
            String out_trade_no, String openId) throws AlipayApiException {
        // 构造请求参数以调用接口
        AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
        AlipayTradeCreateModel model = new AlipayTradeCreateModel();
 
        // 设置商户订单号
        model.setOutTradeNo(out_trade_no);
 
        // 设置产品码
        model.setProductCode("JSAPI_PAY");
 
        // 设置小程序支付中
        model.setOpAppId(APP_ID);
 
        // 设置订单总金额
        model.setTotalAmount(price.toString());
 
        // 设置业务扩展参数
        // ExtendParams extendParams = new ExtendParams();
        // extendParams.setTradeComponentOrderId("2023060801502300000008810000005657");
        // model.setExtendParams(extendParams);
 
        // 设置可打折金额
        // model.setDiscountableAmount("80.00");
 
        // 设置订单标题
        model.setSubject(subject);
 
        // 设置订单附加信息
        model.setBody(body);
 
        // uid参数未来计划废弃,存量商户可继续使用,新商户请使用openid。请根据应用-开发配置-openid配置选择支持的字段。
        // model.setBuyerId("2088102146225135");
 
        // 设置买家支付宝用户唯一标识
        model.setBuyerOpenId(openId);
 
        // 设置商户门店编号
        // model.setStoreId("NJ_001");
 
        request.setBizModel(model);
        request.setNotifyUrl(NOTIFY_URL);
        // 第三方代调用模式下请设置app_auth_token
        // request.putOtherTextParam("app_auth_token", "<-- 请填写应用授权令牌 -->");
 
        AlipayTradeCreateResponse response = alipayClient.execute(request);
        System.out.println(response.getBody());
        Map<String, Object> map = new HashMap<>();
        if (response.isSuccess()) {
            System.out.println("调用成功");
 
            map.put("outTradeNo", response.getOutTradeNo());
            map.put("tradeNo", response.getTradeNo());
            map.put("Type", 2);
        } else {
            System.out.println("调用失败");
            // sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接
            // String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response);
            // System.out.println(diagnosisUrl);
        }
        return map;
    }
 
}