diff --git a/mallplus-pay/src/main/java/com/zscat/mallplus/alipay/AliPayApi.java b/mallplus-pay/src/main/java/com/zscat/mallplus/alipay/AliPayApi.java index 69b1a83..073b35c 100644 --- a/mallplus-pay/src/main/java/com/zscat/mallplus/alipay/AliPayApi.java +++ b/mallplus-pay/src/main/java/com/zscat/mallplus/alipay/AliPayApi.java @@ -6,9 +6,12 @@ import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.domain.*; +import com.alipay.api.internal.util.AlipaySignature; import com.alipay.api.request.*; import com.alipay.api.response.*; import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -53,13 +56,32 @@ public class AliPayApi { * @throws AlipayApiException 支付宝 Api 异常 */ public static AlipayTradeAppPayResponse appPayToResponse(AlipayTradeAppPayModel model, String notifyUrl, AliPayApiConfig aliPayApiConfig) throws AlipayApiException { - AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); + AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); request.setBizModel(model); request.setNotifyUrl(notifyUrl); + request.setBizContent(model.toString()); AlipayTradeAppPayResponse response = aliPayApiConfig.getAliPayClient().sdkExecute(request); System.out.println(response.getBody()); return aliPayApiConfig.getAliPayClient().sdkExecute(request); } + public static AlipayTradeAppPayResponse appPayToResponse1(AlipayTradeAppPayModel model, String notifyUrl, AlipayClient alipayClient) throws AlipayApiException { + log.info("-----------支付宝支付:{}", JSONObject.toJSONString(alipayClient)); + AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); + request.setNotifyUrl(notifyUrl); +// JSONObject bizContent = new JSONObject(); +// bizContent.put("out_trade_no", model.getOutTradeNo()); +// bizContent.put("total_amount",model.getTotalAmount()); +// bizContent.put("subject", "测试商品"); +// bizContent.put("product_code", "QUICK_MSECURITY_PAY"); + request.setBizModel(model); +// request.setBizContent(bizContent.toString()); + AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);; + log.info("-----------支付宝同步结果--------------:{}", JSONObject.toJSONString(response)); + System.out.println(response.getBody()); + return response; + } + + /** * WAP支付 diff --git a/mallplus-pay/src/main/java/com/zscat/mallplus/alipay/AliPayBean.java b/mallplus-pay/src/main/java/com/zscat/mallplus/alipay/AliPayBean.java index 2dfabd2..f51719e 100644 --- a/mallplus-pay/src/main/java/com/zscat/mallplus/alipay/AliPayBean.java +++ b/mallplus-pay/src/main/java/com/zscat/mallplus/alipay/AliPayBean.java @@ -26,5 +26,9 @@ public class AliPayBean { private String serverUrl; private String domain; + private String rootCertPath; + private String certPath; + private String alipayPublicKey; + } diff --git a/mallplus-portal/src/main/java/com/zscat/mallplus/pay/controller/alipay/AliPayController.java b/mallplus-portal/src/main/java/com/zscat/mallplus/pay/controller/alipay/AliPayController.java index fffe458..57d2da8 100644 --- a/mallplus-portal/src/main/java/com/zscat/mallplus/pay/controller/alipay/AliPayController.java +++ b/mallplus-portal/src/main/java/com/zscat/mallplus/pay/controller/alipay/AliPayController.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; +import com.alipay.api.CertAlipayRequest; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.domain.*; import com.alipay.api.internal.util.AlipaySignature; @@ -35,6 +36,7 @@ import com.zscat.mallplus.utils.ValidatorUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; @@ -65,10 +67,61 @@ import java.util.Map; @RequestMapping("/api/aliPay") public class AliPayController extends AbstractAliPayApiController { private static final Logger log = LoggerFactory.getLogger(AliPayController.class); + + @Value("${alipay.domain}") + private String DOMAIN; + + @Value("${alipay.appId}") + private String APPID; + /** + * 支付宝公钥 + */ + @Value("${alipay.ALIPAY_PUBLIC_KEY}") + private String ALIPAY_PUBLIC_KEY; + /** + * 支付宝网关 + */ + @Value("${alipay.serverUrl}") + private String GATE; + + /** + * 编码方式 + */ + private String CHARSET = "utf-8"; + + /** + * 回调地址 + */ + @Value("${alipay.notifyUrl}") + private String NOTIFY_URL; + /** + * 支付宝CA根证书文件路径(alipay_root_cert_path 文件绝对路径) + */ + @Value("${alipay.RootCertPath}") + private String RootCertPath; + + /** + * 应用公钥证书路径(app_cert_path 文件绝对路径) + */ + @Value("${alipay.CertPath}") + private String CertPath; + + private String SignType = "RSA2"; + + /** + * 应用私钥 + */ + @Value("${alipay.privateKey}") + private String APP_PRIVATE_KEY; + + String domain = ""; String privateKey = ""; + //支付宝公钥 String publicKey = ""; + //支付宝支付业务:app_id String appId = ""; + @Resource private IOmsOrderService orderService; @Resource @@ -91,10 +144,10 @@ public class AliPayController extends AbstractAliPayApiController { aliPayApiConfig = AliPayApiConfig.builder() .setAppId(aliPayBean.getAppId()) .setAliPayPublicKey(aliPayBean.getPublicKey()) - .setCharset("UTF-8") + .setCharset(CHARSET) .setPrivateKey(aliPayBean.getPrivateKey()) .setServiceUrl(aliPayBean.getServerUrl()) - .setSignType("RSA2") + .setSignType(SignType) .build(); domain = aliPayBean.getDomain(); privateKey = aliPayBean.getPrivateKey(); @@ -104,29 +157,52 @@ public class AliPayController extends AbstractAliPayApiController { } catch (Exception e) { AliPayBean aliPayBean = new AliPayBean(); - aliPayBean.setAppId("2018082761134635"); - aliPayBean.setDomain("http://www.yyundong.com:8083/api"); - //aliPayBean.setDomain("http://26077a35f5.wicp.vip:43609/api"); - aliPayBean.setServerUrl("https://openapi.alipay.com/gateway.do"); - aliPayBean.setPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlOOOOWg4e2deSDMRG2y5EzG7/udMfTzYkn4u/3PWIOlpcUd2ujCztqKY2HdFhIaWE4q8PCLtT5XtBWCq2IVvpCPE8HRzgSZckh6J36SnO0JG1pZe8HajUgIw+T1NM7/b2Nb4OaI5HKNsQ5ei9NlN9RvlIUSpum/nIyk/9CBvNAg8xUlHUFPaPL0WCMJ9zIwRO+aEn2kwA7JQ8AvjuPy390oil0W4fxfHonJYxuzOo6Lx369Vti5N9UmXczXUcOiVwyCveoH05chNr3r8xu5QqpD1o32cO01Zt4EA9j6aM2H09g08VzoLam2OoU3umKOV0vvX+bMmb1GwrkussSvDpQIDAQAB"); - aliPayBean.setPrivateKey("MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCjI8p9Vh3QrBsa2BdTLAa9YrPGdHAo4DeYx79rlrITI4kIwy6/q/JDaXNBQgl80mUYh4Zinc0mDZ68n14zIL0f4At+EzzfxT5RIVYKZb/EEj6ijElldvijblcCAkrcoTl+oWDEKEOyyJW2UFbRIUYUZcszfi+pue1BIdvwlfxHTI77o1H6d2ApkyIHgs6zYeeauDkYYTdAjSCV7PHhTO6H6yS5uyc0rOLxUTdABA+b+ewSnTw2uvuVTTnrC7xIqjfj1fRocsNh/1KfqF4I5iMQmrRaIlujRSTQrO7kLVbYW45D+Qr4mB3TlhTGAFcTL+ovugA+66NASZmUyNsZHcBZAgMBAAECggEAao+eXHA72WoR6l7sHW/Mlzg5pY+5E3oh1rHi3yv39XhoskiL6Lcv78iZeC7ic54aWwNrTE83CXwsC5kttsfTwVZfK2L1iFUWd3gG85OyxygDsblg1932Wwpf2vgUXjkRjR1sT7TdQ5Kx9/xSORg65mf3axMpnvvLdZfgSi4uM4NJ94NzCLwH7zSWuK6CsPfl24RQlQfczRUy4GzG+wtXjDj5XLNNO6GQacQY4BUkcjCfrkUrQ9Lf2joYiXRyVNWUN1HivmfMouG37WQhUzz0CL8tF1EfooCfPhetAF5Aursve3O8l0Lno6K1auziN8g/Jfuo+efKfImzwvyo3m1n4QKBgQDjtfOWqcVP611OSTm1L1RFHCJMZN5wgOLEquO/2VC4VItV7vy0odNrLydd9Eg77VbC0IVcqunQIHjON3fFEVlj0bEVOaEN+X26oP84UNBK12QcLWvxxXQvOyaXg0hqgae5dpG5LvZHIP6b27jF3IuTG3lILZDjZsO9NcZbBr+NGwKBgQC3aD5VAUjCn+xnHIzGd0/avFYIGzqGUw2hZfFfuI3r58gRo/bjlOny7jLTxOFa+2SGggdDVm/izWut2FacNr3/GVTkcZc6ZEIXWq793vFky69PwGj24bCbplLYaCWM79HczM9sIWBl5WKmI7k1O/AIJrPteTa/Du/T+IfcATQDmwKBgQCCNjXI3eP6w3hjn/Pj6+CgdGoYjUW1x73lAGOj/Tzva0kSJstS74baL+ivDVWRDzMhy+O3DfUOEsOCCK3wfu9C6VH99Spnt1dyNUY8idnSMkEI6+BiLKs3pvd2hJgQb3vdzjOeVYB3RCLUNVz/qBIYWQmNgKDtqIId3HZE7yLyKQKBgQCq4Blq00Z55cu4CZZy9ghVL7Er3kp5iXmijLsExoqbZpg1L0E/qacJ6bk7KiwXuy5eT1j6+NZHRcHz9yJCapI70NsR927BPVWCMr/k0Uiv80FDmW1xzrXfXmfDLc0GcQ1inQMHqFUKultdlNziZxRsU7rBHnTOLtls8RmK9SgDzwKBgBnWfQNVF/BSIP/pOkudu966DwqySamzy/HrdOIq92r+OtAWqtLMq8bbIkMW1asC8+MLE81JD9fn7YmKeZTbMwxE2z5Tv1z+UUqy//79Vkj8FmlSfY0kraj9ZXjMp+Hg0kCpavOU4QFXONn2LVvrrh0tACcgJoJGRJJYuJMQeu7c"); + //APPID 即创建应用后生成,详情见创建应用并获取 APPID + aliPayBean.setAppId(APPID); + //gateway:支付宝网关(固定)https://openapi.alipay.com/gateway.do + aliPayBean.setServerUrl(GATE); + //开发者应用私钥,由开发者自己生成 + aliPayBean.setPrivateKey(APP_PRIVATE_KEY); + aliPayBean.setDomain(DOMAIN); + aliPayBean.setAlipayPublicKey(ALIPAY_PUBLIC_KEY); + aliPayBean.setCertPath(CertPath); + aliPayBean.setRootCertPath(RootCertPath); + aliPayApiConfig = AliPayApiConfig.builder() .setAppId(aliPayBean.getAppId()) - .setAliPayPublicKey(aliPayBean.getPublicKey()) - .setCharset("UTF-8") .setPrivateKey(aliPayBean.getPrivateKey()) + .setAliPayPublicKey(aliPayBean.getAlipayPublicKey()) + .setCharset(CHARSET) + .setSignType(SignType) .setServiceUrl(aliPayBean.getServerUrl()) - .setSignType("RSA2") + .setAppCertPath(aliPayBean.getCertPath()) + .setAliPayPublicKey(aliPayBean.getAlipayPublicKey()) + .setAliPayRootCertPath(aliPayBean.getRootCertPath()) .build(); domain = aliPayBean.getDomain(); privateKey = aliPayBean.getPrivateKey(); - publicKey = aliPayBean.getPublicKey(); + publicKey = aliPayBean.getAlipayPublicKey(); appId = aliPayBean.getAppId(); } return aliPayApiConfig; } + public AlipayClient alipayClient() throws AlipayApiException { + CertAlipayRequest certAlipayRequest = new CertAlipayRequest(); + certAlipayRequest.setServerUrl(GATE); //gateway:支付宝网关(固定)https://openapi.alipay.com/gateway.do + certAlipayRequest.setAppId(APPID); //APPID 即创建应用后生成,详情见创建应用并获取 APPID + certAlipayRequest.setPrivateKey(APP_PRIVATE_KEY); //开发者应用私钥,由开发者自己生成 + certAlipayRequest.setFormat("json"); //参数返回格式,只支持 json 格式 + certAlipayRequest.setCharset(CHARSET); //请求和签名使用的字符编码格式,支持 GBK和 UTF-8 + certAlipayRequest.setSignType(SignType); //商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐商家使用 RSA2。 + certAlipayRequest.setCertPath(CertPath); //应用公钥证书路径(app_cert_path 文件绝对路径) + certAlipayRequest.setAlipayPublicCertPath(ALIPAY_PUBLIC_KEY); //支付宝公钥证书文件路径(alipay_cert_path 文件绝对路径) + certAlipayRequest.setRootCertPath(RootCertPath); //支付宝CA根证书文件路径(alipay_root_cert_path 文件绝对路径) + AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest); + return alipayClient; + } + @RequestMapping("") @ResponseBody public String index() { @@ -168,9 +244,10 @@ public class AliPayController extends AbstractAliPayApiController { model.setOutTradeNo(orderInfo.getOrderSn()); model.setTimeoutExpress("30m"); model.setTotalAmount(orderInfo.getPayAmount().floatValue() + ""); - model.setPassbackParams("callback params"); +// model.setPassbackParams("callback params"); model.setProductCode("QUICK_MSECURITY_PAY"); - String order = AliPayApi.appPayToResponse(model, domain + "/aliPay/notify_url", this.getApiConfig()).getBody(); +// String order = AliPayApi.appPayToResponse1(model, domain + "/aliPay/notify_url", this.getApiConfig()).getBody(); + String order = AliPayApi.appPayToResponse1(model, domain + "/aliPay/notify_url", alipayClient()).getBody(); //String order = AliPayApi.appPayToResponse(model, domain, this.getApiConfig()).getBody(); System.out.println(JSONObject.toJSONString(orderInfo)); return new CommonResult().success(order); @@ -475,7 +552,7 @@ public class AliPayController extends AbstractAliPayApiController { public Object tradeRefund(AlipayTradeRefundModel model) { try { - // AlipayTradeRefundModel model = new AlipayTradeRefundModel(); + // AlipayTradeRefundModel model = new AlipayTradeRefundModel(); /*model.setOutTradeNo("081014283315023"); model.setTradeNo("2017081021001004200200273870"); model.setRefundAmount("86.00"); diff --git a/mallplus-portal/src/main/resources/application-dev.properties b/mallplus-portal/src/main/resources/application-dev.properties index 8f0662b..ad801e5 100644 --- a/mallplus-portal/src/main/resources/application-dev.properties +++ b/mallplus-portal/src/main/resources/application-dev.properties @@ -1,11 +1,6 @@ -spring.datasource.url=jdbc:mysql://8.130.39.13:3306/mallplus1?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8 -#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mallplus1?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8 +spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mallplus1?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8 spring.datasource.username=root -spring.datasource.password=1LAiGz$t1*Iw -#spring.datasource.password=root -#spring.datasource.url=jdbc:mysql://39.104.142.92:3306/mallplus?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8 -#spring.datasource.username=root -#spring.datasource.password=123456 +spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.druid.initialSize=5 @@ -43,13 +38,13 @@ mybatis-plus.configuration.cache-enabled=false #===mongodb end=== #===redis start=== # Redis\u6570\u636E\u5E93\u7D22\u5F15\uFF08\u9ED8\u8BA4\u4E3A0\uFF09 -spring.redis.database=4 +spring.redis.database=0 # Redis\u670D\u52A1\u5668\u5730\u5740 spring.redis.host=127.0.0.1 # Redis\u670D\u52A1\u5668\u8FDE\u63A5\u7AEF\u53E3 spring.redis.port=6379 # Redis\u670D\u52A1\u5668\u8FDE\u63A5\u5BC6\u7801\uFF08\u9ED8\u8BA4\u4E3A\u7A7A\uFF09 -spring.redis.password= +spring.redis.password=123456 # \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09 spring.redis.pool.max-active=8 # \u8FDE\u63A5\u6C60\u6700\u5927\u963B\u585E\u7B49\u5F85\u65F6\u95F4\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09 @@ -91,3 +86,17 @@ logging.level.com.mallplus.mall.ums.mapper=debug logistics.Kdniao.EBusinessID=test1627898 logistics.Kdniao.AppKey=5f1463ac-7fb7-4601-9a07-a43f4ff1ce1a logistics.Kdniao.ReqURL=http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json + +#支付宝相关配置 +alipay.appId=2018082761134635 +alipay.privateKey=MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCpYi38h2/25e4mNWo56mmwuwa7QbBbPdgH00rsmPI/+0JkYhda2uZDvtrFXWMLzVJ2ioh9pamcfUbb2LcFgLIJ0KJyTia4sVMHmbk9l8wPf9mE4aOYN8ix6olzkm9ZhDGVekx2niW/hf6bpjnh92+I4EZo4xsK3RAsQ9oDXPjrJzktrrerAP+5MNOY8wLRqOp0KU+bOIcsz4Wz+qD3UxP2PjXPJDvXu7NkYDndOc7G0tVnhzVahFafqAntbgQHMyJENhLl9xdbnYdiKQqZJUwfI9xlRKYk08P4YVYTL7dAGAibQJJamgqmmKo8uibDIMkLsTGNm5WzW3EErWOCl6wlAgMBAAECggEAXfyxgbdxRDHPlHn9KIfO/5a3pH5NqkNFtQnkQCaZ/TChZWwcg3iFXr/vSqaICAt1H3u9QuMCm2fUQrcczzvbDqErEnwU9lTGuqfs5qVtQIhznU1K5nLFtRtsC6oMiUJV9Rh4hzU3wu9KGPoCkkUnKW8xApBJ+Bw0FivMNCOJp4kipif0gXQFxDH14w8n4QAyG3keXYP43DPqlsjmjJm4inHajxNO012Snle5SqA5HaIrZzf9St3ctq1BzqgUaD5yyXPmPyi1sqjrK+A16R4DrbKlY2h3/mo1IIfPjYbjb/uPcHf9pDMxEFwYIZ+kkz0uUjRDNWVX3A7ldav8MvvZ/QKBgQDot2raw93blrEhld3GGY4JNxboi6UZ1guK2nDEjlnpZjDUklSlNsx82NM8g0bm76Q9A3WpuoHQoSGEIy9ElrMuNS7xj+PZe5mNyKFMBG8hKeIV3jx4OIU80aiV9OQLv6+AonavHvOLXu41OJKdoQexyz7q3lu0+i7d9KKbWd2SlwKBgQC6VJxj1KPh3kHtmm/d/5fOZUDLqxTOyexRrEUCj9hGjv5XymxULQPskKxasFKiPyn4TCp2ZOrPO1slu8IUpzaymM4DDQYtTQkbsAT/N6r9efCJTXDdTgm5iyTaILbSbqd01KEnqjmFLOSCpasvM47rARlG4IYXIXD9cXKj12AaowKBgAN7w2C079w6nDopeSFe/o5KwdAHTxhc6N1SOb/ndZcVzYNREW1LrbHsuPS97lDEo4u6Qoeg4BKUZuEIecuoCdSWPTamdb2qqPjDWQ6/Pj6b1uOG6RbPmcb4SHK+MK+wVdsyE165suGSMTSgvSkY4PmbVjzDyVGjMRJneAulQ7jPAoGAViCIDWkbu2q1xLNPJClhrSiGU94nhxI05uefGnkM+khcbo4Flr8cAjw5Ps4j1BUoPDpQolsxYkrIbd+k7VEBanpRN33MriHepOqu1J2RrwqvUXf3RIQu4JHdnenjN8+oHcuvFhuL7O/8TBtxziah2CSw318m/AgcJzpKSEtkg8sCgYB/cr6PuuQ7JpK2kYmwYMSwNvys0v31iSqFmJK6EyPRycGw9Wj/ANiGJrKuVqdnzb2LqSzdNWkKte25hSIv21satgHM2of7oFzjFB2N/hMx5o+nOQgq0zZcA6Mvn0W3GFFZ1YAep3oyrxLh9+5ELi2JGXgJafiEJvr5J3YzSGOWrw== +alipay.serverUrl=https://openapi.alipay.com/gateway.do +alipay.domain=http://2xpk7t.natappfree.cc/api +#回调地址 +alipay.notifyUrl=http://n748bm.natappfree.cc/api/aliPay/notify_url +# 支付宝CA根证书文件路径(alipay_root_cert_path 文件绝对路径) +alipay.RootCertPath=D:\\apliay\\alipayRootCert.crt +# 支付宝公钥证书文件路径(alipay_cert_path 文件绝对路径) +alipay.ALIPAY_PUBLIC_KEY=D:\\apliay\\alipayCertPublicKey_RSA2.crt +# 应用公钥证书路径(app_cert_path 文件绝对路径) +alipay.CertPath=D:\\apliay\\appCertPublicKey_2018082761134635.crt