refactor(mcwl-pay): 重构支付宝支付功能,由秘钥改为证书
parent
aacf29a3db
commit
deabcf1b37
|
@ -27,6 +27,7 @@ import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -88,7 +89,7 @@ public class AliPayController extends BaseController {
|
||||||
* @param authCode 授权码
|
* @param authCode 授权码
|
||||||
*/
|
*/
|
||||||
@GetMapping("/callback")
|
@GetMapping("/callback")
|
||||||
public String callback(@RequestParam("auth_code") String authCode, String state) {
|
public String callback(@RequestParam("auth_code") String authCode, String state) throws FileNotFoundException {
|
||||||
|
|
||||||
System.out.println("authCode = " + authCode);
|
System.out.println("authCode = " + authCode);
|
||||||
String result = aliPayService.bindingCallback(authCode, state);
|
String result = aliPayService.bindingCallback(authCode, state);
|
||||||
|
|
|
@ -123,14 +123,16 @@ mall:
|
||||||
gatewayHost: openapi-sandbox.dl.alipaydev.com
|
gatewayHost: openapi-sandbox.dl.alipaydev.com
|
||||||
signType: RSA2
|
signType: RSA2
|
||||||
# 沙箱应用id
|
# 沙箱应用id
|
||||||
appId: 9021000143684202
|
appId: 9021000135682614
|
||||||
# 沙箱应用私钥
|
# 沙箱应用私钥
|
||||||
privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCyhwMKnP7oBQ9qKhxke9AXN7ZNcniMnJFcWWFPfs3W6QqKBGFGFYQFyqfmnf2gM4nYtEbvit0CcmSrdniR3aZVb6s0A/KWqD5ejf+zjdnn5XH4GYsm/DXZoBqdAMWQUaQcVB1lC9az1rn13n9UHBJ+s+UAWtFjXMDd78dsE7enU3RjBffyvl/A+r6c0jnSHDNttSXyamxGX8ng8hK5XdCAusOfYpWnLY90sjlyz98snIfVPqAfD3KTP88gRF1KfWZniwMCR/OjCp6jm5d5dvOj8xyk7R1LfZ0CH/fXOcvpCe9JISS9DyzEzW5XpsnO5p8Mo8wFL6TKVBng+Ss0Tr0NAgMBAAECggEAPnaCl+oKPf/XPtvxBy9SxWzWug49I2V8boVPSNMjDfiHmXai2jSY9rXLPSM2JCEkL9ATqag6X6rKkjtnQBH/KpFho1dmP1QqTkb8mkQdY8ehsp6tUzyXUsdzyE8G0NHfy5Gan0ofGtkcQ2xPvIv95JromtErxcokKQLGEYhsj3xL+KVsUh5YedX/6sAiJ1KS5Zs82eh6bbCvUzuSPc4hjyfLSux5AnGBPnwEzWWJiA5z9zK17i8Cb7FnEeRmNvJw7VsXaCMFquZ6+bzlKdSuUqzqNhHMX8AivePTjj7pPHFW3FTh64E20yzl7CIwkScToXT3H7oaHRA1xGySmGNBuQKBgQDXFcg0b8L0A/Zril+4IwfckH1gpUbqlplzfozM/a/0rojQEdS+X7g4ypdPc47cwoLJx08/84L8ZPj49CImoGNdj5K9B2fY/E10SIJJqN5lb9NI4KINvGGM58NDSAl+GjT5mljkPI8jzQ1ACcy9DGV/KVScGHUWUpeLOK22AEcfWwKBgQDUfPFBHc2Bkuv3bRoNT+fnChMw5CI65wD74vR5GKyurh50DB3RZXwhRsAFd9NowINm9B2KAR0IrB+vh3EwfJaWDauh3ykZZtrAphSa11dJXvtathHTuQmXalZv5brh5mHie87yoxMn7vqDi0bwkNlb/b1wwokwc0oc3NSoNsFptwKBgCJhjPs00kkHSSCvodVhZCRRxHjqcoeVQzo/BGrQMow+SghYkVVNH7mUSNOeeTu4rAdtILHsTwfhbBr/i2X5RWjzRlWJFYSN8COiY5E6uTIlyfRgVAc2EbHgakoa/cl2jvlHPuZc99SVNoUCDAQ8Mw08ohXBoxXKZgcPLFVnffb5AoGBAJW5cDmk6WCrCRAwVVIaAtsek0U5CxGcImpakk8d3te7IwQ8YWph6yR7eOSheVrvg+ewjXvnqvCocC877brvnyAeg9isqYYXnn5uyEgPApdVkSFq94bLdIG30S5JnvR8ZG61NK5t0BqsXuL/6b2rIy2Zzrm8qfR02D0cMdBRvNljAoGBAMJG7/TqodrYPYyOZ4/IbbhAitBHWpHYJHSENnuxbQGAQuCt52Jp3eULR2r7uk3dUDuE8mB2QAEStuV/orfdxxRxJIYbEynJFGCa9O5LTevbM4MoNRfLCPPmFK5PJivlJcdrCyQKEmGSLLrVdb3H/Wzu0/4K/ZhwyrtBz4MRkuwD
|
privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCQxmQGcaiKjOhayWi+zNTvpp8B5YT8jFFkjLzrD+W+T2Dwf2GfFR4p95zsCJxYeoLWdghMPA6/GMFrLbuVFpaEjuTm4icqA9N8n5d3W0j7gh+wMjZoqyJclAIeb09ut7rY6mWzilA9kWmZnUG7MOWIU70RVRYrfJectCFw/odM9lG4XIVe13X2h+1ecTQyQzLWmnvKFCfo7dQjE7fIYiWfud1ZGUneNs3u73pNWMB6ThGTTCbs0atcgM3fYOg3q7fTxIu9VcaUCJiJ/kNbL9sVEyOrSyx2f2o6w06zdEaOiQFsuDeS8QPYGMg7pf42wAfqCO6hqxQiQT5vp1hvB0o1AgMBAAECggEAIhaEYLwMSispXo8D2cES9iaOU/z91hUX6Qv2Q4anuqqoEZh8nN91Db6etTjFz1NxURvTklelxTsH97t56n26DRY0MWTYgd0Kw9Iz8MeOpKGb4nnAM97vpUq4QQBGfLRIC2ENdzu+7vA5JBFR88hsky/cWaNmJ/EbJauIIDneE7GigMR2HF7kfzdZzOBN4ZEh/ef5NKeCnEieRJJhWRgrgNXVZ44Tqi67AM7ey9pyUtBe7fgzxXtrWXBN9yKaVxxSXm3KJXFQqA6mcilFVZaxMNlAySc4MPTW8lq0ozOCOCunoeIphNz/OVIxGu3/voXFXlBfOKqOkYMVZxMY6OrvtQKBgQD0nIlXK4VW72VaGpz9kxQkRNzJV/yqaqet1GOSlPM2l0RCRFOVVdnvbQdHGPe6+HxHL1dh5MP8T/aHoP+4UXkkQCc8moS2FZxJvFH2QTSZBcSSdGL7GMpROqs38J+XlJzrhNcB20lrW6D7yMeQa4YEcXwdbD8Er/YaIqODBWYYewKBgQCXg+16RLDArciwwhf0TBWZPor2iYFDdwU5UPu7CKOhU1MLfQhG85gGpXHjB6G8cMUi/ezxh/FEl+sWOZegpkPwL5/BQS9tNYWIaC4kipPF/a5Up4DMYUHVAuuPwNqqXpvgU+rGjCns0wtPRnjrkghLkc3oTSID7o7pzUwIk2whDwKBgAys3+EIfExY82OL5X6uVGjcuKQmTw11oWK8krxRw5iclgjpCXu/ix+BAtOIU634mlgF9/02oYE9k4TLrvSaJDDgsifNyfq1e/fGLmkYT+VuCxWbulVQn4s+AwlPCrYMGWWK6KlL9638fYcOjGjLaZJpXwkXRtyzUYlhKh/r87JpAoGBAIavRp2mi/xrPvgpQQPv0k9L8llfOCHRnjoqC+thrZsNp8eRmJcBmMVnskofEZ2iHQuS71pw/n58EQTLo0ayJbhPjVJL8K3CovXzrfjbmqqoa5xi3bJQTiXdF6rMw1QpD6Uk05E1LVuQ6v/IZFr7kBYlAQWb8z3NhQq+bPU+nyLvAoGAGpBbSM8gPzdWQqkHoos0icu3cj0GhN3MU7+1Eb/rsXyh/lk5wtZTEnHjwhdUOUtwVNjvrv7CzA7unhOoaM6YcE/Zpd4zt8pjqH1Mhds7UHf4Xg+A+J4G6meYnhSwfBpOub02ncsqfBlXE0qhFv6AvcMewWndyLb8EYaUUXTYkG0=
|
||||||
|
# 沙箱应用公钥证书
|
||||||
|
appCertPath: cert/appPublicCert.crt
|
||||||
# 沙箱支付宝公钥证书路径
|
# 沙箱支付宝公钥证书路径
|
||||||
alipayCertPath: cert/alipay/alipayCertPublicKey_RSA2.crt
|
alipayCertPath: cert/alipayPublicCert.crt
|
||||||
# 沙箱支付宝根证书路径
|
# 沙箱支付宝根证书路径
|
||||||
alipayRootCertPath: cert/alipay/alipayRootCert.crt
|
alipayRootCertPath: cert/alipayRootCert.crt
|
||||||
notifyUrl: https://7d014da8.r27.cpolar.top/ali/pay/notify
|
notifyUrl: https://53a65908.r27.cpolar.top/ali/pay/notify
|
||||||
# 沙箱支付宝网关
|
# 沙箱支付宝网关
|
||||||
gatewayUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do
|
gatewayUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do
|
||||||
|
|
||||||
|
@ -145,10 +147,12 @@ mall:
|
||||||
# appId: 2021005119630093
|
# appId: 2021005119630093
|
||||||
# # 线上应用私钥
|
# # 线上应用私钥
|
||||||
# privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCQuhRU5iHoabfzJS40A+moMKzb5rmi5XbL59K98CW65Oq/rnzQnj6sCYggIXOLCLKUykZ1XIVa+4V7bGFkMDF0236ncPumnVY/tfCSebLyKl+up1mGeH4mAR6ily7nXAhRnXL+A0015bpCa5FCg2ReN68MEmquB/mHfeLqJfRupwzDWnIWxYSKkFCJ0i47KTFYhM93LHHQ8GrZNNaeiJ6q59MruQI83z0HCxN/DzK4Z2rBWGilwPuYcSEa0STPXYhz8XMXUX/Mlp7dd5zyWeNaxkNRWlhKHvhLVPGvteaEcchs476DIWLCRVXEC1372wMKNrKblzRp7Wi5+l+W14k5AgMBAAECggEAHahkPjmivTPc5FC8NSCQI01GPxH6/Ky1OXfaMd4ifTgn+vvQzBeBlFOnt53jRZyUq/T/l1FMaqacZfyBwLw3hlDslXeLuksHv6qTEBEsYH/ad7oHmIzcnQEhvAPrMrIjakYvqGoYynC3SKEudUjjqoMSthCYF+2+bsuXUpBQlNQLqcJ03U+YhfLswwVVujKvAujoLRqDAWeaa0k0y/1Ua4fr5GJq5M+P8TTBRgZlSK5A7Ee6yxMUncZ9W3lTqZtyG0OQLbz9gkr0c63KPisigaOx9eKlCPWFWUWo+zGvQMVijHDTeoJ3dqNmsPtiIE3rDt8anx4a1R7YK6MQ520hAQKBgQDPFMNl4fRmLSOLNShJm/0mBMoIjPmS3+tPBtCiG4oH9F8vYMJWDA1Im0FdgRa2HlCv6hpiVvvQt824RaUYa7XR6aefXKVEWddHvl3utnghMohjK8o8fTmIxADtU5Q2OlWmPdp1v7yDg8yE5P1GlY+AZ3oggxXOIRVtQrNeL7E3iQKBgQCy6nEaUQUCDDts4o7Pn+N402g3/T9Vz/5JtKmDI01EndK5l/yE8CdgGwdiwN1k3la/Nv8P5kaaX2qVcCGoOIQmMNGOxuNfkKCi+bJKdxmFOI4E3iVYT2H6x27QJwNB6bik1i6b2OWT7ckxeB6xMjefNp1u8Qif+vab60OQZSqoMQKBgESRF3Hwsz/xykcZvtFAuT2RcGQMacbcJcnw87v5ambf33SMkUx0iSF1ZttTFvYOa6ET3tCZBKBDe/Z7+QJxB68NstbtkjtjlAjJW8ji2jwDw20y3q/QtvA2Fih++CBMiHeXG3LJnd3eEiYevE5Wz0ExAhspzFqIUdPvtfyFxiQhAoGBAKgc+iGMN3RxIfVx/FbDGe6SVr8lSrnLMlj3VMBQD26GDVcupKwVLCp1uz7jkiQRdtk9R/UcnwK23WOFdVqnoCRygrXx0/wb3ZTFou2tc2Fmfqu8QML19E67zjfwMHNitYjNaAYwi6ewKvg8sjo1wWXs34k7GquYGNjw+w9Wv/pBAoGAUlVHfZ4RncAiiH/x3EDgqmmVikFpLoM2xXxM16nplrjdBE6IzkpgWb/x2ZI6JCMDyoV2kvF6owW2+QEQ81MrHQMtBRpAvd8nI03gXA5VF3uwp4UjfGpoIAGDBrqQv9DM8vx6C6VJNTT5esZWZSw/+PZ4D19l0/n7gICGx3ugw0Q=
|
# privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCQuhRU5iHoabfzJS40A+moMKzb5rmi5XbL59K98CW65Oq/rnzQnj6sCYggIXOLCLKUykZ1XIVa+4V7bGFkMDF0236ncPumnVY/tfCSebLyKl+up1mGeH4mAR6ily7nXAhRnXL+A0015bpCa5FCg2ReN68MEmquB/mHfeLqJfRupwzDWnIWxYSKkFCJ0i47KTFYhM93LHHQ8GrZNNaeiJ6q59MruQI83z0HCxN/DzK4Z2rBWGilwPuYcSEa0STPXYhz8XMXUX/Mlp7dd5zyWeNaxkNRWlhKHvhLVPGvteaEcchs476DIWLCRVXEC1372wMKNrKblzRp7Wi5+l+W14k5AgMBAAECggEAHahkPjmivTPc5FC8NSCQI01GPxH6/Ky1OXfaMd4ifTgn+vvQzBeBlFOnt53jRZyUq/T/l1FMaqacZfyBwLw3hlDslXeLuksHv6qTEBEsYH/ad7oHmIzcnQEhvAPrMrIjakYvqGoYynC3SKEudUjjqoMSthCYF+2+bsuXUpBQlNQLqcJ03U+YhfLswwVVujKvAujoLRqDAWeaa0k0y/1Ua4fr5GJq5M+P8TTBRgZlSK5A7Ee6yxMUncZ9W3lTqZtyG0OQLbz9gkr0c63KPisigaOx9eKlCPWFWUWo+zGvQMVijHDTeoJ3dqNmsPtiIE3rDt8anx4a1R7YK6MQ520hAQKBgQDPFMNl4fRmLSOLNShJm/0mBMoIjPmS3+tPBtCiG4oH9F8vYMJWDA1Im0FdgRa2HlCv6hpiVvvQt824RaUYa7XR6aefXKVEWddHvl3utnghMohjK8o8fTmIxADtU5Q2OlWmPdp1v7yDg8yE5P1GlY+AZ3oggxXOIRVtQrNeL7E3iQKBgQCy6nEaUQUCDDts4o7Pn+N402g3/T9Vz/5JtKmDI01EndK5l/yE8CdgGwdiwN1k3la/Nv8P5kaaX2qVcCGoOIQmMNGOxuNfkKCi+bJKdxmFOI4E3iVYT2H6x27QJwNB6bik1i6b2OWT7ckxeB6xMjefNp1u8Qif+vab60OQZSqoMQKBgESRF3Hwsz/xykcZvtFAuT2RcGQMacbcJcnw87v5ambf33SMkUx0iSF1ZttTFvYOa6ET3tCZBKBDe/Z7+QJxB68NstbtkjtjlAjJW8ji2jwDw20y3q/QtvA2Fih++CBMiHeXG3LJnd3eEiYevE5Wz0ExAhspzFqIUdPvtfyFxiQhAoGBAKgc+iGMN3RxIfVx/FbDGe6SVr8lSrnLMlj3VMBQD26GDVcupKwVLCp1uz7jkiQRdtk9R/UcnwK23WOFdVqnoCRygrXx0/wb3ZTFou2tc2Fmfqu8QML19E67zjfwMHNitYjNaAYwi6ewKvg8sjo1wWXs34k7GquYGNjw+w9Wv/pBAoGAUlVHfZ4RncAiiH/x3EDgqmmVikFpLoM2xXxM16nplrjdBE6IzkpgWb/x2ZI6JCMDyoV2kvF6owW2+QEQ81MrHQMtBRpAvd8nI03gXA5VF3uwp4UjfGpoIAGDBrqQv9DM8vx6C6VJNTT5esZWZSw/+PZ4D19l0/n7gICGx3ugw0Q=
|
||||||
|
# # 线上应用公钥证书
|
||||||
|
# appCertPath: appCertPublicKey_2021005119630093.crt
|
||||||
# # 线上支付宝公钥证书路径
|
# # 线上支付宝公钥证书路径
|
||||||
# alipayCertPath: cert/alipay/alipayCertPublicKey_RSA2.crt
|
# alipayCertPath: cert/alipayCertPublicKey_RSA2.crt
|
||||||
# # 线上支付宝根证书路径
|
# # 线上支付宝根证书路径
|
||||||
# alipayRootCertPath: cert/alipay/alipayRootCert.crt
|
# alipayRootCertPath: cert/alipayRootCert.crt
|
||||||
# # 线上支付宝公钥
|
# # 线上支付宝公钥
|
||||||
# notifyUrl: https://253d7236.r27.cpolar.top/ali/pay/notify
|
# notifyUrl: https://253d7236.r27.cpolar.top/ali/pay/notify
|
||||||
# # 线上支付宝网关
|
# # 线上支付宝网关
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDnTCCAoWgAwIBAgIQICUCFPTaqv/ZUGkFjQNMjTANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
|
|
||||||
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
|
|
||||||
aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
|
|
||||||
YXNzIDIgUjEwHhcNMjUwMjE0MDkxMDAxWhcNMzAwMjEzMDkxMDAxWjB+MQswCQYDVQQGEwJDTjEZ
|
|
||||||
MBcGA1UECgwQMjA4ODk0Mjk4OTQ4MjU3OTEPMA0GA1UECwwGQWxpcGF5MUMwQQYDVQQDDDrmlK/k
|
|
||||||
u5jlrp0o5Lit5Zu9Kee9kee7nOaKgOacr+aciemZkOWFrOWPuC0yMDg4OTQyOTg5NDgyNTc5MIIB
|
|
||||||
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwa7R9uTM3VJpWZDWiNSUw23AoIlSZ4Y6lgaA
|
|
||||||
xuhKYmUx8P2yCHJ8xEyASRHUggrYoEvkbuLqHPpNPmJsMaqnbuP4uwfkxO9l/D2bnPRFd2e4eQhX
|
|
||||||
L7YHOLRWgHhMBfkMYMq9A8kJHDa9drVbxvp1zbvxakJvEuJ9TVCvHdpsTGbMxBn5PP7qTQYoQAQj
|
|
||||||
FYF6j6eLmrskFgqYGmDV2dbf/tFLaQZSuhut47pb3glvi7g0ECMy+S3v76pZk5+FP42EkBFFsLH1
|
|
||||||
lTREgO1PTSRAEiZkSGRLtmf3u6EMb42pE6EUF4pHHaACEQ3ZRuYK8Mo00A0FmwAoKil2MxkzAX5Z
|
|
||||||
KQIDAQABoxIwEDAOBgNVHQ8BAf8EBAMCA/gwDQYJKoZIhvcNAQELBQADggEBAGsnIGoHjk4+YUJJ
|
|
||||||
nLMggzUmAuKt1rHcUN+3SfsNmnGqwluy4cm4emxj2qwcTzEEQvrES33difh4Ubtf2XyS1MFLkxhG
|
|
||||||
WonCuEUjZqKgWz66gCG3l0l7HRy2VJaaaVlC49yJMOsuUNtAFjh+Pu5XVb7ff8Adf3YGNeFC4Tde
|
|
||||||
gkBgDO8RbPSfdc7bP0Fq+TPj5nMCu64KzBz4RP5da7Q/mSFI2PCvtEquhq/eeDezfHUAz2ehC/bA
|
|
||||||
dSRHytgzrGktk+BIPtEsoYG9zIHBNwA8JCr9Z5q2eauhYvIE1sJVO151Dph1u4LE1voQQ4qr4t6v
|
|
||||||
gU2IoL6w5LvdWDSQCIrPOa4=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIE4jCCAsqgAwIBAgIIYsSr5bKAMl8wDQYJKoZIhvcNAQELBQAwejELMAkGA1UEBhMCQ04xFjAU
|
|
||||||
BgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEw
|
|
||||||
LwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMy
|
|
||||||
MjE0MzQxNVoXDTM3MTEyNjE0MzQxNVowgYIxCzAJBgNVBAYTAkNOMRYwFAYDVQQKDA1BbnQgRmlu
|
|
||||||
YW5jaWFsMSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE5MDcGA1UEAwwwQW50IEZp
|
|
||||||
bmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDbGFzcyAyIFIxMIIBIjANBgkqhkiG9w0B
|
|
||||||
AQEFAAOCAQ8AMIIBCgKCAQEAsLMfYaoRoPRbmDcAfXPCmKf43pWRN5yTXa/KJWO0l+mrgQvs89bA
|
|
||||||
NEvbDUxlkGwycwtwi5DgBuBgVhLliXu+R9CYgr2dXs8D8Hx/gsggDcyGPLmVrDOnL+dyeauheARZ
|
|
||||||
fA3du60fwEwwbGcVIpIxPa/4n3IS/ElxQa6DNgqxh8J9Xwh7qMGl0JK9+bALuxf7B541Gr4p0WEN
|
|
||||||
G8fhgjBV4w4ut9eQLOoa1eddOUSZcy46Z7allwowwgt7b5VFfx/P1iKJ3LzBMgkCK7GZ2kiLrL7R
|
|
||||||
iqV+h482J7hkJD+ardoc6LnrHO/hIZymDxok+VH9fVeUdQa29IZKrIDVj65THQIDAQABo2MwYTAf
|
|
||||||
BgNVHSMEGDAWgBRfdLQEwE8HWurlsdsio4dBspzhATAdBgNVHQ4EFgQUSqHkYINtUSAtDPnS8Xoy
|
|
||||||
oP9p7qEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIB
|
|
||||||
AIQ8TzFy4bVIVb8+WhHKCkKNPcJe2EZuIcqvRoi727lZTJOfYy/JzLtckyZYfEI8J0lasZ29wkTt
|
|
||||||
a1IjSo+a6XdhudU4ONVBrL70U8Kzntplw/6TBNbLFpp7taRALjUgbCOk4EoBMbeCL0GiYYsTS0mw
|
|
||||||
7xdySzmGQku4GTyqutIGPQwKxSj9iSFw1FCZqr4VP4tyXzMUgc52SzagA6i7AyLedd3tbS6lnR5B
|
|
||||||
L+W9Kx9hwT8L7WANAxQzv/jGldeuSLN8bsTxlOYlsdjmIGu/C9OWblPYGpjQQIRyvs4Cc/mNhrh+
|
|
||||||
14EQgwuemIIFDLOgcD+iISoN8CqegelNcJndFw1PDN6LkVoiHz9p7jzsge8RKay/QW6C03KNDpWZ
|
|
||||||
EUCgCUdfHfo8xKeR+LL1cfn24HKJmZt8L/aeRZwZ1jwePXFRVtiXELvgJuM/tJDIFj2KD337iV64
|
|
||||||
fWcKQ/ydDVGqfDZAdcU4hQdsrPWENwPTQPfVPq2NNLMyIH9+WKx9Ed6/WzeZmIy5ZWpX1TtTolo6
|
|
||||||
OJXQFeItMAjHxW/ZSZTok5IS3FuRhExturaInnzjYpx50a6kS34c5+c8hYq7sAtZ/CNLZmBnBCFD
|
|
||||||
aMQqT8xFZJ5uolUaSeXxg7JFY1QsYp5RKvj4SjFwCGKJ2+hPPe9UyyltxOidNtxjaknOCeBHytOr
|
|
||||||
-----END CERTIFICATE-----
|
|
|
@ -1,23 +0,0 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEgjCCA2qgAwIBAgIQICUCFE7HTf+7v9yXtoeyLjANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
|
|
||||||
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
|
|
||||||
aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
|
|
||||||
YXNzIDEgUjEwHhcNMjUwMjE0MDkxMDAwWhcNMzAwMjEzMDkxMDAwWjBKMQswCQYDVQQGEwJDTjEP
|
|
||||||
MA0GA1UECgwG5Ya35paMMQ8wDQYDVQQLDAZBbGlwYXkxGTAXBgNVBAMMEDIwODg5NDI5ODk0ODI1
|
|
||||||
NzkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCQuhRU5iHoabfzJS40A+moMKzb5rmi
|
|
||||||
5XbL59K98CW65Oq/rnzQnj6sCYggIXOLCLKUykZ1XIVa+4V7bGFkMDF0236ncPumnVY/tfCSebLy
|
|
||||||
Kl+up1mGeH4mAR6ily7nXAhRnXL+A0015bpCa5FCg2ReN68MEmquB/mHfeLqJfRupwzDWnIWxYSK
|
|
||||||
kFCJ0i47KTFYhM93LHHQ8GrZNNaeiJ6q59MruQI83z0HCxN/DzK4Z2rBWGilwPuYcSEa0STPXYhz
|
|
||||||
8XMXUX/Mlp7dd5zyWeNaxkNRWlhKHvhLVPGvteaEcchs476DIWLCRVXEC1372wMKNrKblzRp7Wi5
|
|
||||||
+l+W14k5AgMBAAGjggEpMIIBJTAfBgNVHSMEGDAWgBRxB+IEYRbk5fJl6zEPyeD0PJrVkTAdBgNV
|
|
||||||
HQ4EFgQUqfZMfgxmG9w6m5lXQSdoiPe0vagwQAYDVR0gBDkwNzA1BgdggRwBbgEBMCowKAYIKwYB
|
|
||||||
BQUHAgEWHGh0dHA6Ly9jYS5hbGlwYXkuY29tL2Nwcy5wZGYwDgYDVR0PAQH/BAQDAgbAMC8GA1Ud
|
|
||||||
HwQoMCYwJKAioCCGHmh0dHA6Ly9jYS5hbGlwYXkuY29tL2NybDk4LmNybDBgBggrBgEFBQcBAQRU
|
|
||||||
MFIwKAYIKwYBBQUHMAKGHGh0dHA6Ly9jYS5hbGlwYXkuY29tL2NhNi5jZXIwJgYIKwYBBQUHMAGG
|
|
||||||
Gmh0dHA6Ly9jYS5hbGlwYXkuY29tOjgzNDAvMA0GCSqGSIb3DQEBCwUAA4IBAQAmDOoavQGthLtz
|
|
||||||
WuW1e0g0K2WChYevFcnWWNILTJ0EsB01Ka0FagOo1T3ErGns+G9lbSj9g6DQZ5DVqLCGnl2ZRvBN
|
|
||||||
KwSnA/7Frllf7CebBaW5WWJ3VKWxP929izvywlPeQdmRELNGK4H/IZoW+nCDYjUgXLOLMgBnqmLY
|
|
||||||
wgug/g3iQ+yFSFuvSNE2J84FwPycWweDJ8zrj4aM9S/bjjWoE/Lfe/a86BIYV19A72Ozc/aTGnxP
|
|
||||||
W/D5txDrhO2wWeCzXd7TuBN1Hze5IX/hYeDqM3rjHuQcGcbFJOchqqR5fUEC/SU9MZ4j/KWND83l
|
|
||||||
Y28GbRbP5jxhgckHIKjfKh6b
|
|
||||||
-----END CERTIFICATE-----
|
|
|
@ -11,14 +11,24 @@ import org.springframework.stereotype.Component;
|
||||||
@Configuration
|
@Configuration
|
||||||
@Component
|
@Component
|
||||||
public class AliConfig {
|
public class AliConfig {
|
||||||
|
@Value("${mall.mgt.aliPayConfig.protocol}")
|
||||||
|
private String protocol;
|
||||||
|
@Value("${mall.mgt.aliPayConfig.gatewayHost}")
|
||||||
|
private String gatewayHost;
|
||||||
|
@Value("${mall.mgt.aliPayConfig.signType}")
|
||||||
|
private String signType;
|
||||||
@Value("${mall.mgt.aliPayConfig.appId}")
|
@Value("${mall.mgt.aliPayConfig.appId}")
|
||||||
private String appId;
|
private String appId;
|
||||||
@Value("${mall.mgt.aliPayConfig.privateKey}")
|
@Value("${mall.mgt.aliPayConfig.privateKey}")
|
||||||
private String privateKey;
|
private String privateKey;
|
||||||
|
@Value("${mall.mgt.aliPayConfig.appCertPath}")
|
||||||
|
private String appCertPath;
|
||||||
@Value("${mall.mgt.aliPayConfig.alipayCertPath}")
|
@Value("${mall.mgt.aliPayConfig.alipayCertPath}")
|
||||||
private String alipayCertPath;
|
private String alipayCertPath;
|
||||||
@Value("${mall.mgt.aliPayConfig.alipayRootCertPath}")
|
@Value("${mall.mgt.aliPayConfig.alipayRootCertPath}")
|
||||||
private String alipayRootCertPath;
|
private String alipayRootCertPath;
|
||||||
@Value("${mall.mgt.aliPayConfig.gatewayUrl}")
|
@Value("${mall.mgt.aliPayConfig.gatewayUrl}")
|
||||||
private String gatewayUrl;
|
private String gatewayUrl;
|
||||||
|
@Value("${mall.mgt.aliPayConfig.notifyUrl}")
|
||||||
|
private String notifyUrl;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,20 +7,19 @@ import com.mcwl.pay.domain.OrderTradeDto;
|
||||||
import com.mcwl.pay.domain.vo.PayVo;
|
import com.mcwl.pay.domain.vo.PayVo;
|
||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
|
||||||
public interface AliPayService {
|
public interface AliPayService {
|
||||||
String bindingCallback(String authCode, String state);
|
String bindingCallback(String authCode, String state) throws FileNotFoundException;
|
||||||
|
|
||||||
PayVo memberPay(OrderTradeDto orderTradeDto) throws Exception;
|
PayVo memberPay(OrderTradeDto orderTradeDto) throws Exception;
|
||||||
|
|
||||||
PayVo pointsPay(Double paymentAmount) throws Exception;
|
PayVo pointsPay(Double paymentAmount) throws Exception;
|
||||||
|
|
||||||
R<String> fetch(String amount) throws AlipayApiException;
|
R<String> fetch(String amount) throws AlipayApiException, FileNotFoundException;
|
||||||
|
|
||||||
// 查询订单状态
|
// 查询订单状态
|
||||||
R<Object> queryTradeStatus(String outTradeNo) throws Exception;
|
R<Object> queryTradeStatus(String outTradeNo) throws Exception;
|
||||||
|
|
||||||
String balance() throws AlipayApiException;
|
|
||||||
|
|
||||||
PayVo walletPay(Double amount) throws Exception;
|
PayVo walletPay(Double amount) throws Exception;
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,10 +52,11 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.util.ResourceUtils;
|
||||||
|
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
@ -98,7 +99,18 @@ public class AliPayServiceImpl implements AliPayService {
|
||||||
private final int MAX_RETRY = 3; // 最大重试次数
|
private final int MAX_RETRY = 3; // 最大重试次数
|
||||||
|
|
||||||
|
|
||||||
public AliPayServiceImpl(Config config) {
|
public AliPayServiceImpl(AliConfig aliConfig) {
|
||||||
|
Config config = new Config();
|
||||||
|
config.protocol = "https";
|
||||||
|
config.signType = "RSA2";
|
||||||
|
config.appId = aliConfig.getAppId();
|
||||||
|
config.merchantPrivateKey = aliConfig.getPrivateKey();
|
||||||
|
config.merchantCertPath = aliConfig.getAppCertPath();
|
||||||
|
config.alipayCertPath = aliConfig.getAlipayCertPath();
|
||||||
|
config.alipayRootCertPath = aliConfig.getAlipayRootCertPath();
|
||||||
|
config.gatewayHost = aliConfig.getGatewayHost();
|
||||||
|
config.notifyUrl = aliConfig.getNotifyUrl();
|
||||||
|
|
||||||
Factory.setOptions(config);
|
Factory.setOptions(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -277,12 +289,13 @@ public class AliPayServiceImpl implements AliPayService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 支付宝转账方法
|
* 支付宝转账方法
|
||||||
* @param amount 转账金额
|
*
|
||||||
|
* @param amount 转账金额
|
||||||
* @return 返回支付宝转账响应的内容
|
* @return 返回支付宝转账响应的内容
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public R<String> fetch(String amount) throws AlipayApiException {
|
public R<String> fetch(String amount) throws AlipayApiException, FileNotFoundException {
|
||||||
Long userId = SecurityUtils.getUserId();
|
Long userId = SecurityUtils.getUserId();
|
||||||
SysUser sysUser = sysUserService.selectUserById(userId);
|
SysUser sysUser = sysUserService.selectUserById(userId);
|
||||||
if (sysUser.getWallet() < Double.parseDouble(amount)) {
|
if (sysUser.getWallet() < Double.parseDouble(amount)) {
|
||||||
|
@ -353,7 +366,7 @@ public class AliPayServiceImpl implements AliPayService {
|
||||||
MailUtil.send(tos, "上海辰风互娱", content, false);
|
MailUtil.send(tos, "上海辰风互娱", content, false);
|
||||||
throw new ServiceException("网络连接出错,请稍后再试");
|
throw new ServiceException("网络连接出错,请稍后再试");
|
||||||
}
|
}
|
||||||
System.out.println("提现失败:" + response.getSubMsg());
|
System.out.println("用户" + SecurityUtils.getUsername() + "提现失败:" + response.getSubMsg());
|
||||||
throw new ServiceException("提现失败");
|
throw new ServiceException("提现失败");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -414,37 +427,8 @@ public class AliPayServiceImpl implements AliPayService {
|
||||||
return R.ok(orderTrade.getOrderStatus());
|
return R.ok(orderTrade.getOrderStatus());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String balance() throws AlipayApiException {
|
public String bindingCallback(String authCode, String state) throws FileNotFoundException {
|
||||||
// 初始化SDK
|
|
||||||
AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());
|
|
||||||
|
|
||||||
// 构造请求参数以调用接口
|
|
||||||
AlipayFundAccountQueryRequest request = new AlipayFundAccountQueryRequest();
|
|
||||||
AlipayFundAccountQueryModel model = new AlipayFundAccountQueryModel();
|
|
||||||
|
|
||||||
// 应用userId
|
|
||||||
model.setAlipayUserId("2088721057420516");
|
|
||||||
|
|
||||||
// 设置查询的账号类型
|
|
||||||
model.setAccountType("ACCTRANS_ACCOUNT");
|
|
||||||
|
|
||||||
request.setBizModel(model);
|
|
||||||
AlipayFundAccountQueryResponse response = alipayClient.execute(request);
|
|
||||||
|
|
||||||
if (response.isSuccess()) {
|
|
||||||
System.out.println("调用成功");
|
|
||||||
return response.getAvailableAmount();
|
|
||||||
} else {
|
|
||||||
System.out.println("调用失败");
|
|
||||||
return "fail";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String bindingCallback(String authCode, String state) {
|
|
||||||
try {
|
try {
|
||||||
Long userId = ShareCodeUtils.codeToId(state);
|
Long userId = ShareCodeUtils.codeToId(state);
|
||||||
if (Objects.isNull(userId)) {
|
if (Objects.isNull(userId)) {
|
||||||
|
@ -514,7 +498,6 @@ public class AliPayServiceImpl implements AliPayService {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object getTradStatus(String outTradeNo) throws Exception {
|
private Object getTradStatus(String outTradeNo) throws Exception {
|
||||||
Factory.setOptions(config);
|
|
||||||
AlipayTradeQueryResponse query = Factory.Payment.Common().query(outTradeNo);
|
AlipayTradeQueryResponse query = Factory.Payment.Common().query(outTradeNo);
|
||||||
Map<String, Object> map = JSONUtils.jsonToMap(query.getHttpBody());
|
Map<String, Object> map = JSONUtils.jsonToMap(query.getHttpBody());
|
||||||
|
|
||||||
|
@ -541,7 +524,8 @@ public class AliPayServiceImpl implements AliPayService {
|
||||||
sysUserPayAccountLog.setAccount("支付宝");
|
sysUserPayAccountLog.setAccount("支付宝");
|
||||||
sysUserPayAccountLogService.save(sysUserPayAccountLog);
|
sysUserPayAccountLogService.save(sysUserPayAccountLog);
|
||||||
}
|
}
|
||||||
public AlipayConfig getAlipayConfig() {
|
|
||||||
|
public AlipayConfig getAlipayConfig() throws FileNotFoundException {
|
||||||
|
|
||||||
AlipayConfig config = new AlipayConfig();
|
AlipayConfig config = new AlipayConfig();
|
||||||
|
|
||||||
|
@ -557,14 +541,16 @@ public class AliPayServiceImpl implements AliPayService {
|
||||||
// 设置支付宝公钥,因为配置了证书,所以不需要设置支付宝公钥
|
// 设置支付宝公钥,因为配置了证书,所以不需要设置支付宝公钥
|
||||||
// config.setAlipayPublicKey(aliConfig.getPublicKey());
|
// config.setAlipayPublicKey(aliConfig.getPublicKey());
|
||||||
|
|
||||||
// 设置应用公钥证书路径
|
// 设置应用公钥证书路径(线上)
|
||||||
config.setAppCertPath(getClass().getResource("/certs/appCertPublicKey.crt").getPath());
|
// config.setAppCertPath(getClass().getResource("/cert/appCertPublicKey.crt").getPath());
|
||||||
|
// 设置应用公钥证书路径(沙箱)
|
||||||
|
config.setAppCertPath(ResourceUtils.getFile("classpath:"+aliConfig.getAppCertPath()).getAbsolutePath());
|
||||||
|
|
||||||
// 设置支付宝公钥证书路径
|
// 设置支付宝公钥证书路径
|
||||||
config.setAlipayPublicCertPath(getClass().getResource(aliConfig.getAlipayCertPath()).getPath());
|
config.setAlipayPublicCertPath(ResourceUtils.getFile("classpath:"+aliConfig.getAlipayCertPath()).getAbsolutePath());
|
||||||
|
|
||||||
// 设置支付宝根证书路径
|
// 设置支付宝根证书路径
|
||||||
config.setRootCertPath(getClass().getResource(aliConfig.getAlipayRootCertPath()).getPath());
|
config.setRootCertPath(ResourceUtils.getFile("classpath:"+aliConfig.getAlipayRootCertPath()).getAbsolutePath());
|
||||||
|
|
||||||
// 设置字符编码格式
|
// 设置字符编码格式
|
||||||
config.setCharset("UTF-8");
|
config.setCharset("UTF-8");
|
||||||
|
|
|
@ -102,17 +102,17 @@ public class SysAdviceServiceImpl extends ServiceImpl<SysAdviceMapper, SysAdvice
|
||||||
if (Objects.nonNull(senderUser)) {
|
if (Objects.nonNull(senderUser)) {
|
||||||
commentAdviceVo.setUserAvatar(senderUser.getAvatar());
|
commentAdviceVo.setUserAvatar(senderUser.getAvatar());
|
||||||
}
|
}
|
||||||
if (productType == 0) {
|
if (sysAdvice.getProductType() == 0) {
|
||||||
ModelProduct modelProduct = modelProductMap.get(sysAdvice.getProductId());
|
ModelProduct modelProduct = modelProductMap.get(sysAdvice.getProductId());
|
||||||
if (Objects.nonNull(modelProduct)) {
|
if (Objects.nonNull(modelProduct)) {
|
||||||
commentAdviceVo.setProductImag(modelProduct.getSurfaceUrl());
|
commentAdviceVo.setProductImag(modelProduct.getSurfaceUrl());
|
||||||
}
|
}
|
||||||
} else if (productType == 1) {
|
} else if (sysAdvice.getProductType() == 1) {
|
||||||
WorkFlow workFlow = workFlowMap.get(sysAdvice.getProductId());
|
WorkFlow workFlow = workFlowMap.get(sysAdvice.getProductId());
|
||||||
if (Objects.nonNull(workFlow)) {
|
if (Objects.nonNull(workFlow)) {
|
||||||
commentAdviceVo.setProductImag(workFlow.getCoverPath());
|
commentAdviceVo.setProductImag(workFlow.getCoverPath());
|
||||||
}
|
}
|
||||||
} else if (productType == 2) {
|
} else if (sysAdvice.getProductType() == 2) {
|
||||||
ModelImage modelImage = modelImageMap.get(sysAdvice.getProductId());
|
ModelImage modelImage = modelImageMap.get(sysAdvice.getProductId());
|
||||||
if (Objects.nonNull(modelImage)) {
|
if (Objects.nonNull(modelImage)) {
|
||||||
commentAdviceVo.setProductImag(modelImage.getImagePaths().split(",")[0]);
|
commentAdviceVo.setProductImag(modelImage.getImagePaths().split(",")[0]);
|
||||||
|
@ -164,17 +164,17 @@ public class SysAdviceServiceImpl extends ServiceImpl<SysAdviceMapper, SysAdvice
|
||||||
if (Objects.nonNull(senderUser)) {
|
if (Objects.nonNull(senderUser)) {
|
||||||
likeAdviceVo.setUserAvatar(senderUser.getAvatar());
|
likeAdviceVo.setUserAvatar(senderUser.getAvatar());
|
||||||
}
|
}
|
||||||
if (productType == 0) {
|
if (sysAdvice.getProductType() == 0) {
|
||||||
ModelProduct modelProduct = modelProductMap.get(sysAdvice.getProductId());
|
ModelProduct modelProduct = modelProductMap.get(sysAdvice.getProductId());
|
||||||
if (Objects.nonNull(modelProduct)) {
|
if (Objects.nonNull(modelProduct)) {
|
||||||
likeAdviceVo.setProductImag(modelProduct.getSurfaceUrl());
|
likeAdviceVo.setProductImag(modelProduct.getSurfaceUrl());
|
||||||
}
|
}
|
||||||
} else if (productType == 1) {
|
} else if (sysAdvice.getProductType() == 1) {
|
||||||
WorkFlow workFlow = workFlowMap.get(sysAdvice.getProductId());
|
WorkFlow workFlow = workFlowMap.get(sysAdvice.getProductId());
|
||||||
if (Objects.nonNull(workFlow)) {
|
if (Objects.nonNull(workFlow)) {
|
||||||
likeAdviceVo.setProductImag(workFlow.getCoverPath());
|
likeAdviceVo.setProductImag(workFlow.getCoverPath());
|
||||||
}
|
}
|
||||||
} else if (productType == 2) {
|
} else if (sysAdvice.getProductType() == 2) {
|
||||||
ModelImage modelImage = modelImageMap.get(sysAdvice.getProductId());
|
ModelImage modelImage = modelImageMap.get(sysAdvice.getProductId());
|
||||||
if (Objects.nonNull(modelImage)) {
|
if (Objects.nonNull(modelImage)) {
|
||||||
likeAdviceVo.setProductImag(modelImage.getImagePaths().split(",")[0]);
|
likeAdviceVo.setProductImag(modelImage.getImagePaths().split(",")[0]);
|
||||||
|
|
Loading…
Reference in New Issue