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

fix car pay

release_toaliyun_real
lin 3 лет назад
Родитель
Сommit
255fa9f755
8 измененных файлов: 121 добавлений и 112 удалений
  1. +1
    -1
      mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java
  2. +8
    -10
      mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java
  3. +3
    -1
      mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java
  4. +7
    -1
      mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java
  5. +2
    -1
      mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayService.java
  6. +26
    -2
      mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java
  7. +73
    -96
      mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v2/miniApp/appPay/WxMiniAppPayAdapterService.java
  8. +1
    -0
      mallinkService/src/main/java/com/iformall/utils/Constant.java

+ 1
- 1
mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java Просмотреть файл

@@ -280,7 +280,7 @@ public class WxMerchantController extends BaseController {
@ApiOperation("(微信)商户手填收款账号") @ApiOperation("(微信)商户手填收款账号")
@PostMapping("setMerchantAccount") @PostMapping("setMerchantAccount")
public ResultData setMerchantAccount(@RequestBody WxMerchant wxMerchant) { public ResultData setMerchantAccount(@RequestBody WxMerchant wxMerchant) {
if (null == wxMerchant.getId() || StringUtils.isBlank(wxMerchant.getAccount()) || StringUtils.isBlank(wxMerchant.getApiKey())) {
if (null == wxMerchant.getId() || StringUtils.isBlank(wxMerchant.getAccount()) || null == wxMerchant.getIsIsv()) {
return new ResultData(ResultData.ERROR,"参数缺失"); return new ResultData(ResultData.ERROR,"参数缺失");
} }
wxMerchant.updateTenantInfo(getTenantInfo()); wxMerchant.updateTenantInfo(getTenantInfo());


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

@@ -492,17 +492,15 @@ public class WxCarController extends BaseController {
.append(",\"mid\":").append(parkMerchant.getId()) .append(",\"mid\":").append(parkMerchant.getId())
.append(",\"mn\":").append(parkMerchant.getName()) .append(",\"mn\":").append(parkMerchant.getName())
.append("}"); .append("}");
WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(park.getTenantId(), EnumPayWay.PAY_WAY_WECHAT.getPlat());
if(cAppInfo == null){
new ResultData(Result.ERROR,ErrorCode.APP_ID_NOT_FOUND.name());
}
WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(cAppInfo.getPayId());
if(payAccount == null){
new ResultData(Result.ERROR,ErrorCode.API_KEY_NOT_FOUND.name());
}
//创建微信支付订单 //创建微信支付订单
PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), "停车费支付", attachSb.toString(), uniquePayOrderNo, payOrder.getFee(),
"127.0.0.1", park.getPaidCallBack(), (String)receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey), new Date());
boolean isIsv = false;
Integer isvModel = (Integer)receiver.getReceiverParamValue(Constant.paymentReceiverParamIsv);
if (EnumYesOrNo.YES.getCode() == isvModel) {
isIsv = true;
}
String apiKey = (String)receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey);
PayAdapterResult wxResult = wxParkPayService.createWxPayOrder(park,isIsv,false,user.getOpenId(), user.getAppId(), receiver.getReceiverAccount(), "停车费支付", attachSb.toString(), uniquePayOrderNo, payOrder.getFee(),
"127.0.0.1", park.getPaidCallBack(), apiKey, new Date());
return new ResultData(wxResult); return new ResultData(wxResult);
} catch (Exception e) { } catch (Exception e) {
logger.error("park createPayOrder error",e); logger.error("park createPayOrder error",e);


+ 3
- 1
mallinkService/src/main/java/com/iformall/domain/po/WxMerchant.java Просмотреть файл

@@ -398,7 +398,9 @@ public class WxMerchant extends TenantEntity {
@io.swagger.annotations.ApiModelProperty(value="首款账号",name="account") @io.swagger.annotations.ApiModelProperty(value="首款账号",name="account")
@TableField(exist = false) @TableField(exist = false)
private String account; private String account;
@io.swagger.annotations.ApiModelProperty(value="首款账号",name="account")
@TableField(exist = false)
private Integer isIsv;
@io.swagger.annotations.ApiModelProperty(value="收款账号",name="apiKey") @io.swagger.annotations.ApiModelProperty(value="收款账号",name="apiKey")
@TableField(exist = false) @TableField(exist = false)
private String apiKey; private String apiKey;


+ 7
- 1
mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java Просмотреть файл

@@ -945,8 +945,14 @@ public class WxMerchantServiceImpl implements WxMerchantService {
receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode());
receiver.setPlat(EnumAppPlat.WX.getCode()); receiver.setPlat(EnumAppPlat.WX.getCode());
} }
StringBuffer psb = new StringBuffer("{\"").append(Constant.paymentReceiverParamIsv).append("\":").append(wxMerchant.getIsIsv()).append("");
if (EnumYesOrNo.YES.getCode() == wxMerchant.getIsIsv()) {
psb.append(",\"").append(Constant.paymentReceicerParamApiKey).append("\":\"").append(wxMerchant.getApiKey()).append("\"}");
}else {
psb.append("}");
}
receiver.setReceiverAccount(wxMerchant.getAccount()); receiver.setReceiverAccount(wxMerchant.getAccount());
receiver.setReceiverParams(new StringBuffer("{\"").append(Constant.paymentReceicerParamApiKey).append("\":\"").append(wxMerchant.getApiKey()).append("\"}").toString());
receiver.setReceiverParams(psb.toString());
wxProfitPaymentReceiverService.saveOrUpdate(receiver); wxProfitPaymentReceiverService.saveOrUpdate(receiver);
} catch (Exception e) { } catch (Exception e) {
logger.error("db failed: 账号操作失败, e:" + e.getMessage()); logger.error("db failed: 账号操作失败, e:" + e.getMessage());


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

@@ -14,7 +14,8 @@ public interface WxParkPayService {


public PageInfo<WxCarPayOrder> listPayOrderAsPage(WxCarPayOrder record, Integer pageIndex, Integer pageSize); 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,
//share:是否分账,服务商模式下生效
public PayAdapterResult createWxPayOrder(TenantEntity tenantEntity,boolean isIsvModel,boolean share,String openId,String appId,String mchId,String productName,String attach,String payOrderNo,
Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception; Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception;
public String handlePaidCallBack(Map<String, String> paramMap); public String handlePaidCallBack(Map<String, String> paramMap);


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

@@ -6,6 +6,8 @@ import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.iformall.common.ErrorCode; import com.iformall.common.ErrorCode;
import com.iformall.common.IdWorker; import com.iformall.common.IdWorker;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxAppinfo;
import com.iformall.domain.po.WxCarPayOrder; import com.iformall.domain.po.WxCarPayOrder;
import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxCoupon;
@@ -24,7 +26,9 @@ import com.iformall.mapper.WxCarPayOrderMapper;
import com.iformall.mapper.WxPayAccountMapper; import com.iformall.mapper.WxPayAccountMapper;
import com.iformall.pay.WxPayment; import com.iformall.pay.WxPayment;
import com.iformall.service.ExcelService; import com.iformall.service.ExcelService;
import com.iformall.service.WxAppinfoService;
import com.iformall.service.WxParkService; import com.iformall.service.WxParkService;
import com.iformall.service.WxPayAccountService;
import com.iformall.service.park.ParkFactory; import com.iformall.service.park.ParkFactory;
import com.iformall.service.park.entity.ParkCreatePayOrder; import com.iformall.service.park.entity.ParkCreatePayOrder;
import com.iformall.service.park.entity.ParkNotifyPaid; import com.iformall.service.park.entity.ParkNotifyPaid;
@@ -80,15 +84,35 @@ public class WxParkPayServiceImpl implements WxParkPayService {
@Autowired @Autowired
WxParkService wxParkService; WxParkService wxParkService;
@Lazy
@Autowired
WxAppinfoService wxAppinfoService;
@Lazy
@Autowired
WxPayAccountService wxPayAccountService;
@Override @Override
public PageInfo<WxCarPayOrder> listPayOrderAsPage(WxCarPayOrder record, Integer pageIndex, Integer pageSize) { public PageInfo<WxCarPayOrder> listPayOrderAsPage(WxCarPayOrder record, Integer pageIndex, Integer pageSize) {
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCarPayOrderMapper.findList(record)); return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCarPayOrderMapper.findList(record));
} }


@Override @Override
public PayAdapterResult createWxPayOrder(String openId,String appId,String mchId,String productName,String attach,String payOrderNo,
public PayAdapterResult createWxPayOrder(TenantEntity tenantEntity,boolean isIsvModel,boolean share,String openId,String appId,String mchId,String productName,String attach,String payOrderNo,
Integer fee,String ip,String notifyUrl,String apiKey,Date currentDate) throws Exception { 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);
if (!isIsvModel) {
return wxMiniAppPayAdapterService.pay(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate);
}else {
WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(tenantEntity.getTenantId(), EnumPayWay.PAY_WAY_WECHAT.getPlat());
if(cAppInfo == null){
throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND.getCode(),"未查询到C端小程序");
}
WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(cAppInfo.getPayId());
if(payAccount == null){
throw new MallinkException(ErrorCode.API_KEY_NOT_FOUND.getCode(),"未查询到payAccount.");
}
return wxMiniAppPayAdapterService.payIsv(payAccount, cAppInfo, mchId, openId, productName, attach, payOrderNo, fee, ip, notifyUrl, currentDate, share);
}
} }
private String notifyErrorResult(String msg) { private String notifyErrorResult(String msg) {


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

@@ -59,7 +59,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem
"\"POST_DATA_EMPTY\":{\"detail\":\"post数据为空\",\"reason\":\"post数据不能为空\",\"resolution\":\"请检查post数据是否为空\"}," + "\"POST_DATA_EMPTY\":{\"detail\":\"post数据为空\",\"reason\":\"post数据不能为空\",\"resolution\":\"请检查post数据是否为空\"}," +
"\"NOT_UTF8\":{\"detail\":\"编码格式错误\",\"reason\":\"未使用指定编码格式\",\"resolution\":\"请使用UTF-8编码格式\"}}"); "\"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 {
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,String productId)throws Exception {
// 统一下单 普通商户模式 // 统一下单 普通商户模式
String noncestr = Utility.generate32UUID(); String noncestr = Utility.generate32UUID();
WxPayOrderP wxPayOrderP = new WxPayOrderP(); WxPayOrderP wxPayOrderP = new WxPayOrderP();
@@ -75,6 +75,7 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem
wxPayOrderP.setGoods_tag(productName); wxPayOrderP.setGoods_tag(productName);
wxPayOrderP.setNotify_url(notifyUrl); wxPayOrderP.setNotify_url(notifyUrl);
wxPayOrderP.setTrade_type(WxPay.TradeType.JSAPI.name()); // 终端类型 wxPayOrderP.setTrade_type(WxPay.TradeType.JSAPI.name()); // 终端类型
wxPayOrderP.setProduct_id(productId);
wxPayOrderP.setTime_start(Utility.getDataFormatStringYYYYMMDDHHmmss(currentDate)); wxPayOrderP.setTime_start(Utility.getDataFormatStringYYYYMMDDHHmmss(currentDate));
Date futureDate = new Date(); Date futureDate = new Date();
futureDate.setTime(currentDate.getTime() + 15 * 60 * 1000); futureDate.setTime(currentDate.getTime() + 15 * 60 * 1000);
@@ -86,85 +87,32 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem
private WxPayOrderP generateWxPayOrderP(WxPayAccount payAccount,WxComposeOrder composeOrder,String productName, WxPayOrder record,String openId,String appId,Date currentDate) throws Exception { private WxPayOrderP generateWxPayOrderP(WxPayAccount payAccount,WxComposeOrder composeOrder,String productName, WxPayOrder record,String openId,String appId,Date currentDate) throws Exception {
// 统一下单 普通商户模式 // 统一下单 普通商户模式
String noncestr = Utility.generate32UUID();
WxPayOrderP wxPayOrderP = new WxPayOrderP();
wxPayOrderP.setOpenid(openId);
wxPayOrderP.setAppid(appId);
wxPayOrderP.setMch_id(payAccount.getMchId());
wxPayOrderP.setNonce_str(noncestr);
wxPayOrderP.setBody(productName);
wxPayOrderP.setAttach(getAttach(record));
wxPayOrderP.setOut_trade_no(record.getPayOrderNo());
wxPayOrderP.setTotal_fee(composeOrder.getPayment());
wxPayOrderP.setSpbill_create_ip(record.getIp()); // 终端IP
wxPayOrderP.setGoods_tag(productName);
wxPayOrderP.setNotify_url(payAccount.getPayNotifyUrl());
wxPayOrderP.setTrade_type(WxPay.TradeType.JSAPI.name()); // 终端类型
wxPayOrderP.setProduct_id(String.valueOf(composeOrder.getMainOrderId())); // 订单ID
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, payAccount.getApiKey()));
return wxPayOrderP;
return generateWxPayOrderP(openId,appId,payAccount.getMchId(),productName,getAttach(record),record.getPayOrderNo(),composeOrder.getPayment(),record.getIp(),payAccount.getPayNotifyUrl(),payAccount.getApiKey(),currentDate,String.valueOf(composeOrder.getMainOrderId()));
} }
private PayAdapterResult getOrderPResult(Map<String, String> returnMap,WxPayOrder record,WxPayAccount payAccount,String noncestr) { private PayAdapterResult getOrderPResult(Map<String, String> returnMap,WxPayOrder record,WxPayAccount payAccount,String noncestr) {
PayAdapterResult par = new PayAdapterResult();
returnMap.put("payOrderId", String.valueOf(record.getId()));
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");
// update payOrder with prepay_id
record.setPrepayId(prepay_id);
record.setUpdateTime(new Date());
record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode());

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, payAccount.getApiKey());
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();
record.setFailReason(errMsg);
} else {
errMsg = returnMap.get("return_msg");
record.setFailReason(errMsg);
}
record.setUpdateTime(new Date());
par.setSuccess(false);
par.setMsg(errMsg);
par.setData(returnMap);
}
return par;
return getOrderPResult(returnMap,noncestr,payAccount.getApiKey(),record);
} }
private PayAdapterResult getOrderPResult(Map<String, String> returnMap,String noncestr,String apiKey) {
private PayAdapterResult getOrderPResult(Map<String, String> returnMap,String noncestr,String apiKey,WxPayOrder record) {
PayAdapterResult par = new PayAdapterResult(); PayAdapterResult par = new PayAdapterResult();
if (null != record ) {
returnMap.put("payOrderId", String.valueOf(record.getId()));
}
String result_code = returnMap.get("result_code"); String result_code = returnMap.get("result_code");
if ("SUCCESS".equals(result_code)) { if ("SUCCESS".equals(result_code)) {
par.setSuccess(true); par.setSuccess(true);
par.setMsg("success."); par.setMsg("success.");
par.setData(returnMap); par.setData(returnMap);
String prepay_id = returnMap.get("prepay_id"); String prepay_id = returnMap.get("prepay_id");
if (null != record) {
// update payOrder with prepay_id
record.setPrepayId(prepay_id);
record.setUpdateTime(new Date());
record.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode());
}
String timestamp = String.valueOf(Utility.getCurrentTimeStamp()); String timestamp = String.valueOf(Utility.getCurrentTimeStamp());
Map<String, String> sighMap = MapUtil.getOrderMap(); Map<String, String> sighMap = MapUtil.getOrderMap();
sighMap.put("appId", returnMap.get("appid")); sighMap.put("appId", returnMap.get("appid"));
@@ -185,6 +133,10 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem
errMsg = errObj.toJSONString(); errMsg = errObj.toJSONString();
} else { } else {
errMsg = returnMap.get("return_msg"); errMsg = returnMap.get("return_msg");
}
if (null != record) {
record.setFailReason(errMsg);
record.setUpdateTime(new Date());
} }
par.setSuccess(false); par.setSuccess(false);
par.setMsg(errMsg); par.setMsg(errMsg);
@@ -193,44 +145,52 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem
return par; return par;
} }
///////ISV模式
private WxPayOrderSP generateWxPayOrderSP(WxPayAccount payAccount, WxComposeOrder composeOrder,String productName,WxPayOrder record,WxAppinfo appInfo,String openId,String appId,Date currentDate,EnumPayShare isShare) throws Exception {
private WxPayOrderSP generateWxPayOrderSP(String openId,String parentAppId,String mchId,String appId,String subMchId,String productName,
String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,String productId,Date currentDate,boolean share,String apiKey) throws Exception{
String noncestr = Utility.generate32UUID(); String noncestr = Utility.generate32UUID();
WxPayOrderSP wxPayOrderSP = new WxPayOrderSP(); WxPayOrderSP wxPayOrderSP = new WxPayOrderSP();
wxPayOrderSP.setSub_openid(openId); wxPayOrderSP.setSub_openid(openId);
wxPayOrderSP.setAppid(appInfo.getParentAppId());
wxPayOrderSP.setMch_id(payAccount.getMchId());
wxPayOrderSP.setAppid(parentAppId);
wxPayOrderSP.setMch_id(mchId);
wxPayOrderSP.setSub_appid(appId); wxPayOrderSP.setSub_appid(appId);
wxPayOrderSP.setSub_mch_id(payAccount.getSubMchId());
wxPayOrderSP.setSub_mch_id(subMchId);
wxPayOrderSP.setNonce_str(noncestr); wxPayOrderSP.setNonce_str(noncestr);
wxPayOrderSP.setBody(productName); wxPayOrderSP.setBody(productName);
wxPayOrderSP.setAttach(getAttach(record));
wxPayOrderSP.setOut_trade_no(record.getPayOrderNo());
wxPayOrderSP.setTotal_fee(composeOrder.getPayment().toString());
wxPayOrderSP.setSpbill_create_ip(record.getIp()); // 终端IP
wxPayOrderSP.setAttach(attach);
wxPayOrderSP.setOut_trade_no(payOrderNo);
wxPayOrderSP.setTotal_fee(fee.toString());
wxPayOrderSP.setSpbill_create_ip(ip); // 终端IP
wxPayOrderSP.setGoods_tag(productName); // 券ID wxPayOrderSP.setGoods_tag(productName); // 券ID
wxPayOrderSP.setNotify_url(payAccount.getPayNotifyUrl());
wxPayOrderSP.setNotify_url(notifyUrl);
wxPayOrderSP.setTrade_type(WxPay.TradeType.JSAPI.name()); // 终端类型 wxPayOrderSP.setTrade_type(WxPay.TradeType.JSAPI.name()); // 终端类型
wxPayOrderSP.setProduct_id(String.valueOf(composeOrder.getMainOrderId())); //
wxPayOrderSP.setProduct_id(productId); //
wxPayOrderSP.setTime_start(Utility.getDataFormatStringYYYYMMDDHHmmss(currentDate)); wxPayOrderSP.setTime_start(Utility.getDataFormatStringYYYYMMDDHHmmss(currentDate));
Date futureDate = new Date(); Date futureDate = new Date();
futureDate.setTime(currentDate.getTime() + 15 * 60 * 1000); futureDate.setTime(currentDate.getTime() + 15 * 60 * 1000);
wxPayOrderSP.setTime_expire(Utility.getDataFormatStringYYYYMMDDHHmmss(futureDate)); // 15分钟后结束 wxPayOrderSP.setTime_expire(Utility.getDataFormatStringYYYYMMDDHHmmss(futureDate)); // 15分钟后结束
wxPayOrderSP.setSign_type("HMAC-SHA256"); wxPayOrderSP.setSign_type("HMAC-SHA256");
wxPayOrderSP.setProfit_sharing("Y");
// wxPayOrderSP.setProfit_sharing(null);
// if (isShare == EnumPayShare.YES) {
// wxPayOrderSP.setProfit_sharing("Y");
// }
if (share) {
wxPayOrderSP.setProfit_sharing("Y");
}else {
wxPayOrderSP.setProfit_sharing("N");
}
Map<String, String> payOrderMap = BeanUtils.toStringMap(wxPayOrderSP); Map<String, String> payOrderMap = BeanUtils.toStringMap(wxPayOrderSP);
wxPayOrderSP.setSign(WxPayment.createSignHMAC(payOrderMap, payAccount.getApiKey()));
wxPayOrderSP.setSign(WxPayment.createSignHMAC(payOrderMap, apiKey));
return wxPayOrderSP; return wxPayOrderSP;
} }
private PayAdapterResult getOrderSPResult(Map<String, String> returnMap,WxPayOrder record,WxPayAccount payAccount,WxAppinfo appInfo,String noncestr) {
private WxPayOrderSP generateWxPayOrderSP(WxPayAccount payAccount, WxComposeOrder composeOrder,String productName,WxPayOrder record,WxAppinfo appInfo,String openId,String appId,Date currentDate,EnumPayShare isShare) throws Exception {
return generateWxPayOrderSP(openId,appInfo.getParentAppId(),payAccount.getMchId(),appId,payAccount.getSubMchId(),productName,getAttach(record),record.getPayOrderNo(),composeOrder.getPayment(),
record.getIp(),payAccount.getPayNotifyUrl(),String.valueOf(composeOrder.getMainOrderId()),currentDate,true,payAccount.getApiKey());
}
private PayAdapterResult getOrderSPResult(Map<String, String> returnMap,WxPayOrder record,String appId,String noncestr,String apiKey) {
PayAdapterResult par = new PayAdapterResult(); PayAdapterResult par = new PayAdapterResult();
returnMap.put("payOrderId", String.valueOf(record.getId()));
if (null != record) {
returnMap.put("payOrderId", String.valueOf(record.getId()));
}
String result_code = returnMap.get("result_code"); String result_code = returnMap.get("result_code");
if ("SUCCESS".equals(result_code)) { if ("SUCCESS".equals(result_code)) {
par.setSuccess(true); par.setSuccess(true);
@@ -239,17 +199,19 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem
String prepay_id = returnMap.get("prepay_id"); String prepay_id = returnMap.get("prepay_id");
// update payOrder with prepay_id // update payOrder with prepay_id
record.setPrepayId(prepay_id);
record.setUpdateTime(new Date());
if (null != record) {
record.setPrepayId(prepay_id);
record.setUpdateTime(new Date());
}


String timestamp = String.valueOf(Utility.getCurrentTimeStamp()); String timestamp = String.valueOf(Utility.getCurrentTimeStamp());
Map<String, String> sighMap = MapUtil.getOrderMap(); Map<String, String> sighMap = MapUtil.getOrderMap();
sighMap.put("appId", appInfo.getAppId());
sighMap.put("appId", appId);
sighMap.put("timeStamp", timestamp); sighMap.put("timeStamp", timestamp);
sighMap.put("nonceStr", noncestr); sighMap.put("nonceStr", noncestr);
sighMap.put("package", "prepay_id=" + prepay_id); sighMap.put("package", "prepay_id=" + prepay_id);
sighMap.put("signType", "HMAC-SHA256"); sighMap.put("signType", "HMAC-SHA256");
String signAgent = WxPayment.createSignHMAC(sighMap, payAccount.getApiKey());
String signAgent = WxPayment.createSignHMAC(sighMap, apiKey);
returnMap.put("timeStamp", timestamp); returnMap.put("timeStamp", timestamp);
returnMap.put("nonceStr", noncestr); returnMap.put("nonceStr", noncestr);
returnMap.put("package", "prepay_id=" + prepay_id); returnMap.put("package", "prepay_id=" + prepay_id);
@@ -261,12 +223,14 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem
JSONObject errObj = errorMap.getJSONObject(result_code); JSONObject errObj = errorMap.getJSONObject(result_code);
if (errObj != null) { if (errObj != null) {
errMsg = errObj.toJSONString(); errMsg = errObj.toJSONString();
record.setFailReason(errMsg);
} else { } else {
errMsg = returnMap.get("return_msg"); errMsg = returnMap.get("return_msg");
record.setFailReason(errMsg);
}
if (null != record) {
record.setFailReason(errMsg);
record.setUpdateTime(new Date());
} }
record.setUpdateTime(new Date());
par.setSuccess(false); par.setSuccess(false);
par.setMsg(errMsg); par.setMsg(errMsg);
par.setData(returnMap); par.setData(returnMap);
@@ -274,6 +238,10 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem
return par; return par;
} }
private PayAdapterResult getOrderSPResult(Map<String, String> returnMap,WxPayOrder record,WxPayAccount payAccount,WxAppinfo appInfo,String noncestr) {
return getOrderSPResult(returnMap,record,appInfo.getAppId(),noncestr,payAccount.getApiKey());
}
@Override @Override
public PayAdapterResult pay(WxPayAccount payAccount,WxPayOrder record,WxComposeOrder composeOrder,List<WxOrder> childOrders, public PayAdapterResult pay(WxPayAccount payAccount,WxPayOrder record,WxComposeOrder composeOrder,List<WxOrder> childOrders,
@@ -310,11 +278,20 @@ public class WxMiniAppPayAdapterService extends BaseWxPayV2AdapterService implem
} }
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 { 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);
WxPayOrderP wxPayOrderP = generateWxPayOrderP(openId, appId, mchId, productName, attach, payOrderNo, fee, ip, notifyUrl, apiKey, currentDate,null);
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,null);
}
public PayAdapterResult payIsv(WxPayAccount payAccount,WxAppinfo appInfo,String subMchId,String openId,String productName,String attach,String payOrderNo,Integer fee,String ip,String notifyUrl,Date currentDate,boolean share) throws Exception {
String apiKey = payAccount.getApiKey();
WxPayOrderSP wxPayOrderP = generateWxPayOrderSP(openId,appInfo.getParentAppId(),payAccount.getMchId(),appInfo.getAppId(),subMchId,productName,attach,payOrderNo,fee,ip,notifyUrl,null,currentDate,share,apiKey);
String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderP)); String response = WxPay.pushOrder(BeanUtils.toStringMap(wxPayOrderP));
log.info("pay order, wechat pushOrder, " + wxPayOrderP.toString() + ", response: " + response.toString()); log.info("pay order, wechat pushOrder, " + wxPayOrderP.toString() + ", response: " + response.toString());
Map<String, String> returnMap = WxPayment.xmlToMap(response); Map<String, String> returnMap = WxPayment.xmlToMap(response);
return getOrderPResult(returnMap,wxPayOrderP.getNonce_str(),apiKey);
return getOrderSPResult(returnMap,null,appInfo.getAppId(),wxPayOrderP.getNonce_str(),apiKey);
} }


@Override @Override


+ 1
- 0
mallinkService/src/main/java/com/iformall/utils/Constant.java Просмотреть файл

@@ -117,5 +117,6 @@ public class Constant {
public static final Integer wiwideNewPlat = 1;//新平台 public static final Integer wiwideNewPlat = 1;//新平台
public static final String paymentReceicerParamApiKey = "apiKey"; public static final String paymentReceicerParamApiKey = "apiKey";
public static final String paymentReceiverParamIsv = "isvModel";


} }

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