rentaiming
2024-06-21 b21f5b5b40b9b45634020380cf03244d46be2df7
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
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.request.AlipayTradeAppPayRequest;
import com.alipay.api.response.AlipayTradeAppPayResponse;
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);
            
        } catch (Exception e) {
            e.printStackTrace();
        }
         return map;
    }
    
 
}