zhs пре 3 година
родитељ
комит
c996c2ced2

+ 1 - 0
build.gradle

@@ -37,6 +37,7 @@ dependencies {
     implementation 'ws.schild:jave-core:3.1.1'
     implementation 'ws.schild:jave-nativebin-win64:3.1.1'
     implementation 'commons-fileupload:commons-fileupload:1.3.2'
+    implementation 'com.alipay.sdk:alipay-sdk-java:3.7.110.ALL'
 //    implementation 'com.github.wechatpay-apiv3:wechatpay-apache-httpclient:0.3.0'//微信支付
 //    implementation 'org.apache.httpcomponents:httpclient:4.3.2'  //post get请求包
     implementation 'com.baidubce:api-explorer-sdk:1.0.3.1'//百度翻译

+ 1 - 1
src/main/java/com/travel/config/InterceptConfig.java

@@ -63,7 +63,7 @@ public class InterceptConfig implements WebMvcConfigurer {
         registry.addInterceptor(sessionInterceptor);// 多次请求监听拦截
         registry.addInterceptor(new JWTIntercept())
                 .addPathPatterns("/**")   //拦截所有请求/**
-                .excludePathPatterns("/personal/**").excludePathPatterns("/supplier/*").excludePathPatterns("/wx/login/**");  //放心登录接口,因为要通过登录获取token
+                .excludePathPatterns("/personal/**").excludePathPatterns("/supplier/*").excludePathPatterns("/wx/login/**").excludePathPatterns("/pay/**");  //放心登录接口,因为要通过登录获取token
     }
 }
 

Разлика између датотеке није приказан због своје велике величине
+ 3 - 3
src/main/java/com/travel/controller/AKeyToLogInController.java


+ 8 - 3
src/main/java/com/travel/controller/SupplierController.java

@@ -175,9 +175,14 @@ public class SupplierController {
             if(count > 0){
                 Supplier user1 = supplierService.checkUser(supplier); //验证是否第一次登录
                 if(user1.getCode() == null){ //如果为空的话增加
-                    map.put("msg", "100");
-                    map.put("errMsg", "该账号无注册,请先注册");
-                    return map;
+//                    map.put("msg", "100");
+//                    map.put("errMsg", "该账号无注册,请先注册");
+                    user1.setName("TUYAGYS_" + user1.getId())
+                            .setCode(PersonalController.SerialNumber("SUP", user1.getId() + ""))
+                            .setHeadpir("https://lidaotech.oss-cn-beijing.aliyuncs.com/test/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220622112747.png")
+                            .setCaptcha("null");
+                    supplierService.upddateSupplier(user1);
+//                    return map;
                 } else {
                     //登录清空验证码
                     user1.setCaptcha("null");

+ 83 - 0
src/main/java/com/travel/controller/ZfbPayController.java

@@ -0,0 +1,83 @@
+package com.travel.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.AlipayClient;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.request.AlipayTradePagePayRequest;
+import com.travel.zfb.ZfbPayUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+
+/**
+ * 支付宝支付
+ */
+@RestController
+@RequestMapping("pay")
+public class ZfbPayController extends ZfbPayUtils {
+
+    /**
+     * 获取支付宝支付二维码
+     * @param price 金额
+     * @return 返回结果
+     * @throws Exception 异常抛出
+     */
+    @RequestMapping("/toPay")
+    @ResponseBody
+    public Map<String, Object> toPay(String price) throws Exception {
+        Map<String, Object> map = new HashMap<>();
+        //获得初始化的AlipayClient
+        AlipayClient alipayClient = new DefaultAlipayClient(GATEWAYURL, APPID, MERCHANTPRIVATEKEY, "json", CHARSET, ALIPAYPUBLICKEY, SIGNTYPE);
+
+        //设置请求参数
+        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
+        alipayRequest.setNotifyUrl(NOTIFYURL);
+        try {
+            String out_trade_no = getOrderNo();//订单号
+            Map<String,Object> para = new HashMap<>();
+            para.put("out_trade_no", out_trade_no);
+            para.put("subject", "途丫-" + out_trade_no);//订单标题
+            para.put("total_amount", price);//订单金额 单位元
+            para.put("timeout_express", "30m");
+            //发送请求参数 orderid 订单id,price表示价格,title表示订单标题
+//            alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\","
+//                    + "\"total_amount\":\"" + price + "\","
+//                    + "\"subject\":\"途丫-" + out_trade_no+ "\","
+//                    + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
+            alipayRequest.setBizContent(JSON.toJSONString(para));
+            //请求
+            String result;
+            result = alipayClient.pageExecute(alipayRequest).getBody();
+            map.put("msg", "200");
+            map.put("data", result);
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            map.put("msg", "500");
+            map.put("data", "服务器请求异常,请稍后再试");
+        }
+        return map;
+    }
+
+    /**
+     * 生成订单号
+     * @return
+     */
+    public String getOrderNo() {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+        String newDate = sdf.format(new Date());
+        String result = "";
+        Random random = new Random();
+        for (int i = 0; i < 3; i++) {
+            result += random.nextInt(10);
+        }
+        return newDate + result;
+    }
+}

+ 0 - 103
src/main/java/com/travel/wxPay/PayBeanConfig.java

@@ -1,103 +0,0 @@
-//package com.travel.wxPay;
-//
-//import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
-//import com.wechat.pay.contrib.apache.httpclient.auth.PrivateKeySigner;
-//import com.wechat.pay.contrib.apache.httpclient.auth.ScheduledUpdateCertificatesVerifier;
-//import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Credentials;
-//import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Validator;
-//import lombok.extern.slf4j.Slf4j;
-//import org.apache.http.impl.client.CloseableHttpClient;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.context.annotation.Bean;
-//import org.springframework.context.annotation.Configuration;
-//import org.springframework.core.io.ClassPathResource;
-//import java.io.BufferedReader;
-//import java.io.IOException;
-//import java.io.InputStream;
-//import java.io.InputStreamReader;
-//import java.nio.charset.StandardCharsets;
-//import java.security.KeyFactory;
-//import java.security.NoSuchAlgorithmException;
-//import java.security.PrivateKey;
-//import java.security.spec.InvalidKeySpecException;
-//import java.security.spec.PKCS8EncodedKeySpec;
-//import java.util.Base64;
-//import java.util.stream.Collectors;
-//
-////@Configuration
-//@Slf4j
-//public class PayBeanConfig {
-//    @Autowired
-//    private WxPayConfigure payConfig;
-//
-//
-//    /**
-//     * 加载秘钥
-//     *
-//     * @return
-//     * @throws IOException
-//     */
-//    public PrivateKey getPrivateKey() throws IOException {
-//        InputStream inputStream = new ClassPathResource(payConfig.getPrivateKeyPath()
-//                .replace("classpath:", "")).getInputStream();
-//
-//        String content = new BufferedReader(new InputStreamReader(inputStream))
-//                .lines().collect(Collectors.joining(System.lineSeparator()));
-//
-//        try {
-//            String privateKey = content.replace("-----BEGIN PRIVATE KEY-----", "")
-//                    .replace("-----END PRIVATE KEY-----", "")
-//                    .replaceAll("\\s+", "");
-//            KeyFactory kf = KeyFactory.getInstance("RSA");
-//
-//            PrivateKey finalPrivateKey = kf.generatePrivate(
-//                    new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey)));
-//
-//            return finalPrivateKey;
-//
-//        } catch (NoSuchAlgorithmException e) {
-//            throw new RuntimeException("当前Java环境不支持RSA", e);
-//        } catch (InvalidKeySpecException e) {
-//            throw new RuntimeException("无效的密钥格式");
-//        }
-//    }
-//
-//
-//    /**
-//     * 定时获取微信签名验证器,自动获取微信平台证书(证书里面包括微信平台公钥)
-//     *
-//     * @return
-//     */
-//    @Bean
-//    public ScheduledUpdateCertificatesVerifier getCertificatesVerifier() throws IOException {
-//
-//        // 使用定时更新的签名验证器,不需要传入证书
-//        ScheduledUpdateCertificatesVerifier verifier = null;
-//        verifier = new ScheduledUpdateCertificatesVerifier(
-//                new WechatPay2Credentials(payConfig.getMchId(),
-//                        new PrivateKeySigner(payConfig.getMchSerialNo(),
-//                                getPrivateKey())),
-//                payConfig.getApiV3Key().getBytes(StandardCharsets.UTF_8));
-//
-//        return verifier;
-//    }
-//
-//
-//    /**
-//     * 获取http请求对象,会自动的处理签名和验签,
-//     * 并进行证书自动更新
-//     *
-//     * @return
-//     */
-//    @Bean("wechatPayClient")
-//    public CloseableHttpClient getWechatPayClient(ScheduledUpdateCertificatesVerifier verifier) throws IOException {
-//        WechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create()
-//                .withMerchant(payConfig.getMchId(),payConfig.getMchSerialNo() , getPrivateKey())
-//                .withValidator(new WechatPay2Validator(verifier));
-//
-//        // 通过WechatPayHttpClientBuilder构造的HttpClient,会自动的处理签名和验签,并进行证书自动更新
-//        CloseableHttpClient httpClient = builder.build();
-//
-//        return httpClient;
-//    }
-//}

+ 0 - 38
src/main/java/com/travel/wxPay/WechatPayApi.java

@@ -1,38 +0,0 @@
-package com.travel.wxPay;
-
-public class WechatPayApi {
-    /**
-     * 微信支付主机地址
-     */
-    public static final String HOST = "https://api.mch.weixin.qq.com";
-
-
-    /**
-     * Native下单
-     */
-    public static final String NATIVE_ORDER = HOST+ "/v3/pay/transactions/native";
-
-
-
-    /**
-     * Native订单状态查询, 根据商户订单号查询
-     */
-    public static final String NATIVE_QUERY = HOST+ "/v3/pay/transactions/out-trade-no/%s?mchid=%s";
-
-
-    /**
-     * 关闭订单接口
-     */
-    public static final String NATIVE_CLOSE_ORDER = HOST+ "/v3/pay/transactions/out-trade-no/%s/close";
-
-
-
-    /**
-     * 申请退款接口
-     */
-    public static final String NATIVE_REFUND_ORDER = HOST+ "/v3/refund/domestic/refunds";
-    /**
-     * 退款状态查询接口
-     */
-    public static final String NATIVE_REFUND_QUERY = HOST+ "/v3/refund/domestic/refunds/%s";
-}

+ 0 - 43
src/main/java/com/travel/wxPay/WxPayConfigure.java

@@ -1,43 +0,0 @@
-package com.travel.wxPay;
-
-import lombok.Data;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.stereotype.Component;
-
-@Data
-@Component
-public class WxPayConfigure {
-
-    /**
-     * 商户号
-     */
-    @Value("${pay.wechat.mchid}")
-    private String mchId;
-
-    /**
-     * 公众号id 需要和商户号绑定
-     */
-    @Value("${pay.wechat.appid}")
-    private String wxPayAppid;
-    /**
-     * 商户证书序列号,需要和证书对应
-     */
-    @Value("${pay.wechat.mchSerialNo}")
-    private String mchSerialNo;
-    /**
-     * API V3密钥
-     */
-    @Value("${pay.wechat.apiV3Key}")
-    private String apiV3Key;
-    /**
-     * 商户私钥路径(微信服务端会根据证书序列号,找到证书获取公钥进行解密数据)
-     */
-    @Value("${pay.wechat.privateKeyPath}")
-    private String privateKeyPath;
-    /**
-     * 支付成功,回调通知
-     */
-    @Value("${pay.wechat.callbackUrl}")
-    private String callbackUrl;
-}

+ 26 - 0
src/main/java/com/travel/zfb/ZfbPayUtils.java

@@ -0,0 +1,26 @@
+package com.travel.zfb;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ZfbPayUtils {
+    // 微信支付参数配置 //
+    @Value("${ZFBPAY.app_id}")
+    protected String APPID;//商户id
+    @Value("${ZFBPAY.merchant_private_key}")
+    protected String MERCHANTPRIVATEKEY;//商户私钥
+    @Value("${ZFBPAY.alipay_public_key}")
+    protected String ALIPAYPUBLICKEY;//公钥
+    @Value("${ZFBPAY.notify_url}")
+    protected String NOTIFYURL;//回调地址
+    @Value("${ZFBPAY.return_url}")
+    protected String RETURNURL;//支付成功后跳转地址
+    @Value("${ZFBPAY.sign_type}")
+    protected String SIGNTYPE;//签名方式
+    @Value("${ZFBPAY.charset}")
+    protected String CHARSET;//字符串编码格式
+    @Value("${ZFBPAY.gatewayUrl}")
+    protected String GATEWAYURL;//支付宝网关
+
+}

+ 19 - 19
src/main/resources/application.yml

@@ -46,22 +46,22 @@ mybatis:
   configuration:
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
     map-underscore-to-camel-case: true
-pay:
-  wechat:
-    #商户号
-    mchid:
-    #公众号id 需要和商户号绑定
-    appid:
-    #商户证书序列号,需要和证书对应
-    mchSerialNo:
-    #api密钥
-    apiV3Key:
-    #商户私钥路径(微信服务端会根据证书序列号,找到证书获取公钥进行解密数据)
-    privateKeyPath: classpath:/cert/apiclient_key.pem
-    #支付成功,回调通知
-    callbackUrl:
-wx:
-  login:
-    appId: wx6eaf18acb6c3a2cd
-    appSecret: 220378217e0cdb51ea7867e4d5a8ffef
-    redirectUri: "https://www.tuyatrip.com/api/wx/login/notify/code"
+ZFBPAY:
+  #商户id
+  app_id: "2021000118610565"
+  #商户私钥
+  merchant_private_key: "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCgDHNYP0CgXrK5gYQk1VM"
+  #支付宝公钥
+  alipay_public_key: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoAxzWD9AoF6yuYGEJNVTPlPAiMuCefEZA"
+  #回调地址
+  notify_url: ""
+  #成功后页面跳转路径
+  return_url: ""
+  #签名方式
+  sign_type: "RSA2"
+  #字符串编码格式
+  charset: "utf-8"
+  #支付宝网关
+  gatewayUrl: "https://openapi.alipaydev.com/gateway.do"
+
+