mitao
2024-09-21 f44e4d609e7efaed9eac545137970b1e334f8106
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/alipay/util/PayDemoActivity.java
@@ -5,10 +5,14 @@
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.response.AlipayTradeAppPayResponse;
import com.alipay.config.AlipayConfig;
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;
@@ -33,7 +37,20 @@
      
      //实例化客户端
      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 
@@ -67,6 +84,9 @@
      
         Map<String, Object> map = new HashMap<>();
      try {
         AliPayApiConfigKit.setThreadLocalAppId(APP_ID);
         AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig);
      
         //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
         AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
@@ -81,21 +101,81 @@
         request.setBizModel(model);
         request.setNotifyUrl(NOTIFY_URL);
         // 这里和普通的接口调用不同,使用的是sdkExecute
         AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
         String string = response.getBody();
         int one = string.lastIndexOf("&");
         String s=string.substring(0,(one));
         map.put("orderInfo", s);
         System.out.println(java.net.URLDecoder.decode(s, "UTF-8"));
         System.out.println(java.net.URLDecoder.decode(response.getBody(), "UTF-8"));
         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;
   }
}