Просмотр исходного кода

fix car pay

release_toaliyun_real
lin 3 лет назад
Родитель
Сommit
5cdcf51593
4 измененных файлов: 153 добавлений и 0 удалений
  1. +23
    -0
      mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java
  2. +15
    -0
      mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java
  3. +46
    -0
      mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java
  4. +69
    -0
      mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java

+ 23
- 0
mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java Просмотреть файл

@@ -14,6 +14,7 @@ import com.iformall.service.park.entity.ParkCreatePayOrder;
import com.iformall.service.park.entity.ParkStopFee;
import com.iformall.service.park.impl.etcp.EtcpHelper;
import com.iformall.service.park.impl.util.ParkHelper;
import com.iformall.service.park.pay.WxParkPayService;
import com.iformall.service.park.utils.ParkCacheUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -67,6 +68,9 @@ public class WxCarController extends BaseController {
@Autowired
WxCUserBasicInfoService wxCUserBasicInfoService;
@Autowired
WxParkPayService wxParkPayService;
@Autowired
ParkFactory parkFactory;
@@ -421,8 +425,27 @@ public class WxCarController extends BaseController {
if (StringUtils.isBlank(carNumber)) {
return new ResultData(Result.ERROR,"无车牌参数.");
}
if (EnumYesOrNo.YES.getCode() != park.getSupportPay()) {
return new ResultData(Result.ERROR,"当前车场配置WxPark不支持支付.");
}
CUser user = getCUser();
if (!user.basicInfoIs()) {
logger.error("暂未成为会员,请授权手机号");
return new ResultData(ErrorCode.USER_IS_NOT_MEMBER.getCode(), "暂未成为会员,请授权手机号");
}
try {
//创建车场支付订单
ParkCreatePayOrder payOrder = parkFactory.getParkService(park.getVendorType()).createPayOrder(paramMap, park,carNumber);
if (null == payOrder || StringUtils.isBlank(payOrder.getParkOrderNumber())) {
return new ResultData(Result.ERROR,"创建车场订单错误.");
}
//查询当前停车商户的收款账号
String mchId = "";
//创建微信支付订单
wxParkPayService.createWxPayOrder(user.getOpenId(), user.getAppId(), carNumber, carNumber, carNumber, carNumber, null, carNumber, carNumber, carNumber, null);
return new ResultData(payOrder);
} catch (Exception e) {
logger.error("park getCarStopFee error",e);


+ 15
- 0
mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java Просмотреть файл

@@ -0,0 +1,15 @@
package com.iformall.service.park.pay;

import java.util.Date;

import com.github.pagehelper.PageInfo;
import com.iformall.domain.po.WxCarPayOrder;
import com.iformall.service.pay.service.pay.entity.PayAdapterResult;

public interface WxParkPayService {

public PageInfo<WxCarPayOrder> listPayOrderAsPage(WxCarPayOrder record, Integer pageIndex, Integer pageSize);
public PayAdapterResult createWxPayOrder(String openId,String appId,String mchId,String productName,String attach,String payOrderNo,
Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception;
}

+ 46
- 0
mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java Просмотреть файл

@@ -0,0 +1,46 @@
package com.iformall.service.park.pay;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.iformall.domain.po.WxCarPayOrder;
import com.iformall.mapper.WxCarPayOrderMapper;
import com.iformall.service.ExcelService;
import com.iformall.service.pay.service.pay.entity.PayAdapterResult;
import com.iformall.service.pay.service.pay.wx.v2.miniApp.appPay.WxMiniAppPayAdapterService;

import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


@Service
public class WxParkPayServiceImpl implements WxParkPayService {

private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
ExcelService excelService;

@Autowired
WxCarPayOrderMapper wxCarPayOrderMapper;
@Autowired
WxMiniAppPayAdapterService wxMiniAppPayAdapterService;

@Override
public PageInfo<WxCarPayOrder> listPayOrderAsPage(WxCarPayOrder record, Integer pageIndex, Integer pageSize) {
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCarPayOrderMapper.findList(record));
}

@Override
public PayAdapterResult createWxPayOrder(String openId,String appId,String mchId,String productName,String attach,String payOrderNo,
Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception {
return wxMiniAppPayAdapterService.pay(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate);
}


}

+ 69
- 0
mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java Просмотреть файл

@@ -2,6 +2,7 @@ package com.iformall.service.pay.service.pay.wx.v2.miniApp.appPay;

import java.io.File;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@@ -58,6 +59,30 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem
"\"POST_DATA_EMPTY\":{\"detail\":\"post数据为空\",\"reason\":\"post数据不能为空\",\"resolution\":\"请检查post数据是否为空\"}," +
"\"NOT_UTF8\":{\"detail\":\"编码格式错误\",\"reason\":\"未使用指定编码格式\",\"resolution\":\"请使用UTF-8编码格式\"}}");
private WxPayOrderP generateWxPayOrderP(String openId,String appId,String mchId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate)throws Exception {
// 统一下单 普通商户模式
String noncestr = Utility.generate32UUID();
WxPayOrderP wxPayOrderP = new WxPayOrderP();
wxPayOrderP.setOpenid(openId);
wxPayOrderP.setAppid(appId);
wxPayOrderP.setMch_id(mchId);
wxPayOrderP.setNonce_str(noncestr);
wxPayOrderP.setBody(productName);
wxPayOrderP.setAttach(attach);
wxPayOrderP.setOut_trade_no(payOrderNo);
wxPayOrderP.setTotal_fee(fee);
wxPayOrderP.setSpbill_create_ip(ip); // 终端IP
wxPayOrderP.setGoods_tag(productName);
wxPayOrderP.setNotify_url(notifyUrl);
wxPayOrderP.setTrade_type(WxPay.TradeType.JSAPI.name()); // 终端类型
wxPayOrderP.setTime_start(Utility.getDataFormatStringYYYYMMDDHHmmss(currentDate));
Date futureDate = new Date();
futureDate.setTime(currentDate.getTime() + 15 * 60 * 1000);
wxPayOrderP.setTime_expire(Utility.getDataFormatStringYYYYMMDDHHmmss(futureDate)); // 15分钟后结束
Map<String, String> payOrderMap = BeanUtils.toStringMap(wxPayOrderP);
wxPayOrderP.setSign(WxPayment.createSign(payOrderMap, apiKey));
return wxPayOrderP;
}
private WxPayOrderP generateWxPayOrderP(WxPayAccount payAccount,WxComposeOrder composeOrder,String productName, WxPayOrder record,String openId,String appId,Date currentDate) throws Exception {
// 统一下单 普通商户模式
@@ -132,6 +157,42 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem
return par;
}
private PayAdapterResult getOrderPResult(Map<String, String> returnMap,String noncestr,String apiKey) {
PayAdapterResult par = new PayAdapterResult();
String result_code = returnMap.get("result_code");
if ("SUCCESS".equals(result_code)) {
par.setSuccess(true);
par.setMsg("success.");
par.setData(returnMap);
String prepay_id = returnMap.get("prepay_id");
String timestamp = String.valueOf(Utility.getCurrentTimeStamp());
Map<String, String> sighMap = MapUtil.getOrderMap();
sighMap.put("appId", returnMap.get("appid"));
sighMap.put("timeStamp", timestamp);
sighMap.put("nonceStr", noncestr);
sighMap.put("package", "prepay_id=" + prepay_id);
sighMap.put("signType", "MD5");
String signAgent = WxPayment.createSign(sighMap, apiKey);
returnMap.put("timeStamp", timestamp);
returnMap.put("nonceStr", noncestr);
returnMap.put("package", "prepay_id=" + prepay_id);
returnMap.put("paySign", signAgent);
log.info("back to UI: " + returnMap.toString());
} else {
String errMsg = "";
JSONObject errObj = errorMap.getJSONObject(result_code);
if (errObj != null) {
errMsg = errObj.toJSONString();
} else {
errMsg = returnMap.get("return_msg");
}
par.setSuccess(false);
par.setMsg(errMsg);
par.setData(returnMap);
}
return par;
}
private WxPayOrderSP generateWxPayOrderSP(WxPayAccount payAccount, WxComposeOrder composeOrder,String productName,WxPayOrder record,WxAppinfo appInfo,String openId,String appId,Date currentDate,EnumPayShare isShare) throws Exception {
@@ -247,6 +308,14 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem
return getOrderSPResult(returnMap,record,payAccount,appInfo,wxPayOrderSP.getNonce_str());
}
}
public PayAdapterResult pay(String openId,String appId,String mchId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception {
WxPayOrderP wxPayOrderP = generateWxPayOrderP(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate);
String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderP));
log.info("pay order, wechat pushOrder, " + wxPayOrderP.toString() + ", response: " + response.toString());
Map<String, String> returnMap = WxPayment.xmlToMap(response);
return getOrderPResult(returnMap,wxPayOrderP.getNonce_str(),apiKey);
}

@Override
public PayQueryAdapterResult queryPayStatus(WxPayOrder oldRecord, WxAppinfo appInfo,


Загрузка…
Отмена
Сохранить