Kaynağa Gözat

支付宝支付

cup 2 yıl önce
ebeveyn
işleme
f5b4520fa8

+ 16 - 3
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserTicketOrderController.java

@@ -205,13 +205,26 @@ public class UserTicketOrderController extends BaseApiController {
     public AjaxResult pay(@Valid @RequestBody OrderPayParam param) {
         Long userId = SecurityUtils.getLoginUser().getUserId();
         SysUser sysUser = sysUserService.selectUserById(userId);
-        if (StringUtils.isBlank(sysUser.getOpenId())) {
-            return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1005);
+        if (param.getPayType() == 1) {
+            if (StringUtils.isBlank(sysUser.getAliuserId())) {
+                return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1026);
+            }
+        } else {
+            if (StringUtils.isBlank(sysUser.getOpenId())) {
+                return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1005);
+            }
         }
+
         UserTicketOrder ticketOrder = userTicketOrderService.getById(param.getOrderId());
         JSONObject jsonObject;
         try {
-            jsonObject = walletService.pay(BizTypeEnum.TICKET_ORDER, param.getOrderId(), sysUser.getOpenId(), ticketOrder.getPayAmt(), ticketOrder.getTitle());
+            if (param.getPayType() == 1) {
+                // 支付宝支付
+                jsonObject = walletService.aliPay(BizTypeEnum.TICKET_ORDER, param.getOrderId(), sysUser.getAliuserId(), ticketOrder.getPayAmt(), ticketOrder.getTitle());
+            } else {
+                // 微信支付
+                jsonObject = walletService.pay(BizTypeEnum.TICKET_ORDER, param.getOrderId(), sysUser.getOpenId(), ticketOrder.getPayAmt(), ticketOrder.getTitle());
+            }
         } catch (ServiceException e) {
             LogUtil.error(logger, e, "根据盲票购买订单创建支付单失败。userId:{0},orderId:{1}", new Object[]{userId, param.getOrderId()});
             return AjaxResult.error(e.getMessage());

+ 2 - 0
mp-common/src/main/java/com/qs/mp/common/enums/ErrorCodeEnum.java

@@ -32,6 +32,8 @@ public enum ErrorCodeEnum {
   ERROR_CODE_1023(1023, "盲票未激活"),
   ERROR_CODE_1024(1024, "删除失败,分类下存在商品"),
   ERROR_CODE_1025(1025, "删除失败,标签下存在商品"),
+
+  ERROR_CODE_1026(1026, "用户支付宝未授权登录"),
   ;
   private int code;
   private String msg;

+ 1 - 1
mp-service/src/main/java/com/qs/mp/channel/domain/param/OrderPayParam.java

@@ -15,7 +15,7 @@ public class OrderPayParam {
 	private String orderId;
 
 	@NotNull(message = "支付方式不能为空")
-	@ApiModelProperty(value = "支付方式",required=true)
+	@ApiModelProperty(value = "支付方式:1支付宝,2微信",required=true)
 	private Integer payType;
 
 

+ 13 - 0
mp-service/src/main/java/com/qs/mp/pay/service/IWalletService.java

@@ -11,6 +11,19 @@ import com.qs.mp.pay.domain.PayOrder;
  */
 public interface IWalletService {
 
+  /**
+   * 支付宝支付
+   * @param bizType
+   * @param bizId
+   * @param openId
+   * @param money
+   * @param orderRemark
+   * @return
+   */
+  JSONObject aliPay(BizTypeEnum bizType, String bizId, String openId, int money,
+      String orderRemark);
+
+
   /**
    * 渠道订单支付
    * @param bizType

+ 53 - 5
mp-service/src/main/java/com/qs/mp/pay/service/impl/WalletServiceImpl.java

@@ -83,10 +83,55 @@ public class WalletServiceImpl implements IWalletService {
   @Value("${pay.channel-sign}")
   private String channelPaySign;  //渠道端商户签名
 
+
+  @Value("${ali-miniApp.appId}")
+  private String aliMiniAppAppId;
+
   private static final String REQ_STATUS_SUCCESS = "R0001";
   private static final String PAY_RESOURCE = "2"; //2:微信支付
   private static final String PAY_RESOURCE_TYPE = "1017"; //2:微信小程序
 
+
+  @Override
+  public JSONObject aliPay(BizTypeEnum bizType, String bizId, String openId, int money, String orderRemark) {
+    String reqUrl = baseUrl + "/pay/payMoneyCTB";
+    String appId = aliMiniAppAppId;
+    String payShopNo = userPayShopNo;
+    String paySign = userPaySign;
+    JSONObject params = buildPayOrderReqData(payShopNo, paySign, money, openId, appId, orderRemark, "1", "1014");
+    String result = OkHttpUtil.postJsonParams(reqUrl, params.toJSONString());
+    logger.info("request params:" + params.toJSONString() + "  result:" + result);
+    if (StringUtils.isBlank(result)) {
+      LogUtil.error(logger, "创建支付订单接口失败");
+      throw new ServiceException("创建三方支付订单失败");
+    }
+    JSONObject resultJson = JSONObject.parseObject(result);
+    String code = resultJson.getString("code");
+    String orderNo = resultJson.getString("order_no");
+    String payInfo = resultJson.getString("pay_info");
+    String orderstatus = resultJson.getString("orderstatus");
+    String resultMsg = resultJson.getString("result");
+    if (!REQ_STATUS_SUCCESS.equalsIgnoreCase(code)) {
+      throw new ServiceException(resultMsg);
+    }
+    //保存订单记录
+    PayOrder payOrder = buildPayOrder(params);
+    payOrder.setOrderId(resultJson.getString("shop_order_no"));
+    payOrder.setOrderNo(orderNo);
+    payOrder.setCode(code);
+    payOrder.setBizType(bizType);
+    payOrder.setBizId(bizId);
+    payOrder.setOrderStatus(orderstatus);
+    boolean ret = payOrderService.save(payOrder);
+    if (!ret) {
+      LogUtil.error(logger, "支付订单数据库保存失败.");
+      throw new ServiceException("支付订单保存失败");
+    }
+    JSONObject data = new JSONObject();
+    data.put("pay_info", payInfo);
+    return data;
+  }
+
   @Override
   public JSONObject pay(BizTypeEnum bizType, String bizId, String openId, int money,
       String orderRemark) {
@@ -99,7 +144,7 @@ public class WalletServiceImpl implements IWalletService {
       payShopNo = userPayShopNo;
       paySign = userPaySign;
     }
-    JSONObject params = buildPayOrderReqData(payShopNo, paySign, money, openId, appId, orderRemark);
+    JSONObject params = buildPayOrderReqData(payShopNo, paySign, money, openId, appId, orderRemark, PAY_RESOURCE, PAY_RESOURCE_TYPE);
     String result = OkHttpUtil.postJsonParams(reqUrl, params.toJSONString());
     logger.info("request params:" + params.toJSONString() + "  result:" + result);
     if (StringUtils.isBlank(result)) {
@@ -225,14 +270,14 @@ public class WalletServiceImpl implements IWalletService {
     return payOrder;
   }
 
-  private JSONObject buildPayOrderReqData(String shopNo, String sign, int money, String openId, String appId, String orderRemark) {
+  private JSONObject buildPayOrderReqData(String shopNo, String sign, int money, String openId, String appId, String orderRemark,String payResource, String payResourceType) {
 
     JSONObject sendData = new JSONObject();
     sendData.put("shop_no" , shopNo);
     sendData.put("shop_order_no" , String.valueOf(bizIdGenerator.newId()));
     sendData.put("shop_order_time" , DateUtils.getTime());
-    sendData.put("pay_resource" , PAY_RESOURCE); //支付来源 1:支付宝  2:微信支付 5:云闪付
-    sendData.put("trans_type_code" , PAY_RESOURCE_TYPE); //1017:微信小程序
+    sendData.put("pay_resource" , payResource); //支付来源 1:支付宝  2:微信支付 5:云闪付
+    sendData.put("trans_type_code" , payResourceType); //1017:微信小程序,1014支付宝
     sendData.put("transaction_amount" , money);
     sendData.put("order_remark" , "");
     sendData.put("timestamp" , System.currentTimeMillis());
@@ -244,7 +289,10 @@ public class WalletServiceImpl implements IWalletService {
 
     sendData.put("auth_code" , openId);
     sendData.put("notify_url" , notifyUrl);
-    sendData.put("app_id" , appId);
+    // 微信小程序必传appId
+    if ("2".equals(payResource)) {
+      sendData.put("app_id" , appId);
+    }
     return sendData;
   }
 }