Commit 29a249b5 authored by xiaoyu's avatar xiaoyu
Browse files

jeepay支付通道优化

parent 2743de4b
......@@ -16,24 +16,20 @@
package com.jeequan.jeepay.pay.channel.jeepluspay.payway;
import com.alibaba.fastjson.JSONObject;
import com.jeequan.jeepay.Jeepay;
import com.jeequan.jeepay.JeepayClient;
import com.jeequan.jeepay.core.constants.CS;
import com.jeequan.jeepay.core.entity.PayOrder;
import com.jeequan.jeepay.core.exception.BizException;
import com.jeequan.jeepay.core.model.params.jeepluspay.JeepluspayConfig;
import com.jeequan.jeepay.core.model.params.jeepluspay.JeepluspayNormalMchParams;
import com.jeequan.jeepay.exception.JeepayException;
import com.jeequan.jeepay.model.PayOrderCreateReqModel;
import com.jeequan.jeepay.pay.channel.jeepluspay.JeepluspayKit;
import com.jeequan.jeepay.pay.channel.jeepluspay.JeepluspayPaymentService;
import com.jeequan.jeepay.pay.model.MchAppConfigContext;
import com.jeequan.jeepay.pay.rqrs.AbstractRS;
import com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg;
import com.jeequan.jeepay.pay.rqrs.payorder.UnifiedOrderRQ;
import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxLiteOrderRQ;
import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxLiteOrderRS;
import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxJsapiOrderRQ;
import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxJsapiOrderRS;
import com.jeequan.jeepay.pay.util.ApiResBuilder;
import com.jeequan.jeepay.request.PayOrderCreateRequest;
import com.jeequan.jeepay.response.PayOrderCreateResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
......@@ -52,7 +48,7 @@ public class WxLite extends JeepluspayPaymentService {
@Override
public String preCheck(UnifiedOrderRQ rq, PayOrder payOrder) {
WxLiteOrderRQ bizRQ = (WxLiteOrderRQ) rq;
WxJsapiOrderRQ bizRQ = (WxJsapiOrderRQ) rq;
if (StringUtils.isEmpty(bizRQ.getOpenid())) {
throw new BizException("[openid]不可为空");
}
......@@ -61,59 +57,37 @@ public class WxLite extends JeepluspayPaymentService {
@Override
public AbstractRS pay(UnifiedOrderRQ rq, PayOrder payOrder, MchAppConfigContext mchAppConfigContext) throws Exception {
WxLiteOrderRQ bizRQ = (WxLiteOrderRQ) rq;
JeepluspayNormalMchParams normalMchParams = (JeepluspayNormalMchParams) configContextQueryService.queryNormalMchParams(mchAppConfigContext.getMchNo(), mchAppConfigContext.getAppId(), CS.IF_CODE.JEEPLUSPAY);
// 构建请求数据
PayOrderCreateRequest request = new PayOrderCreateRequest();
PayOrderCreateReqModel model = new PayOrderCreateReqModel();
model.setMchNo(normalMchParams.getMerchantNo()); // 商户号
model.setAppId(normalMchParams.getAppId()); // 应用ID
model.setMchOrderNo(payOrder.getPayOrderId()); // 商户订单号
model.setWayCode(JeepluspayConfig.WX_LITE); // 支付方式
model.setAmount(payOrder.getAmount()); // 金额,单位分
model.setCurrency(payOrder.getCurrency()); // 币种,目前只支持cny
model.setClientIp(payOrder.getClientIp()); // 发起支付请求客户端的IP地址
model.setSubject(payOrder.getSubject()); // 商品标题
model.setBody(payOrder.getBody()); // 商品描述
model.setNotifyUrl(getNotifyUrl()); // 异步通知地址
JSONObject channelExtra = new JSONObject();
channelExtra.put("openid", bizRQ.getOpenid());
model.setChannelExtra(channelExtra.toString()); // 微信openId
request.setBizModel(model);
WxJsapiOrderRQ bizRQ = (WxJsapiOrderRQ) rq;
// 构造函数响应数据
WxLiteOrderRS res = ApiResBuilder.buildSuccess(WxLiteOrderRS.class);
WxJsapiOrderRS res = ApiResBuilder.buildSuccess(WxJsapiOrderRS.class);
ChannelRetMsg channelRetMsg = new ChannelRetMsg();
res.setChannelRetMsg(channelRetMsg);
try {
// 发起统一下单
PayOrderCreateResponse response = new PayOrderCreateResponse();
boolean checkSign = false;
boolean isSuccess = false;
if (normalMchParams.getSignType().equals(JeepluspayConfig.DEFAULT_SIGN_TYPE) || StringUtils.isEmpty(normalMchParams.getSignType())) {
JeepayClient jeepayClient = JeepayClient.getInstance(normalMchParams.getAppId(), normalMchParams.getAppSecret(), Jeepay.getApiBase());
response = jeepayClient.execute(request);
checkSign = response.checkSign(normalMchParams.getAppSecret());
isSuccess = response.isSuccess(normalMchParams.getAppSecret());
// 构建请求数据
PayOrderCreateReqModel model = new PayOrderCreateReqModel();
// 支付方式
model.setWayCode(JeepluspayConfig.WX_LITE);
// 异步通知地址
model.setNotifyUrl(getNotifyUrl());
JSONObject channelExtra = new JSONObject();
channelExtra.put("openid", bizRQ.getOpenid());
// 微信openId
model.setChannelExtra(channelExtra.toString());
} else if (normalMchParams.getSignType().equals(JeepluspayConfig.SIGN_TYPE_RSA2)) {
JeepayClient jeepayClient = JeepayClient.getInstance(normalMchParams.getAppId(), normalMchParams.getRsa2AppPrivateKey(), Jeepay.getApiBase());
response = jeepayClient.executeByRSA2(request);
checkSign = response.checkSignByRsa2(normalMchParams.getRsa2PayPublicKey());
isSuccess = response.isSuccessByRsa2(normalMchParams.getRsa2PayPublicKey());
}
// 发起统一下单
PayOrderCreateResponse response = JeepluspayKit.payRequest(payOrder, mchAppConfigContext, model);
// 下单返回状态
Boolean isSuccess = JeepluspayKit.checkPayResp(response, mchAppConfigContext);
if (checkSign) {
if (isSuccess) {
// 下单成功
res.setPayInfo(response.getData().getString("payData"));
channelRetMsg.setChannelOrderId(response.get().getPayOrderId());
if (isSuccess) {
// 下单成功
JSONObject payData = response.getData().getJSONObject("payData");
res.setPayInfo(payData.toJSONString());
channelRetMsg.setChannelState(ChannelRetMsg.ChannelState.WAITING);
} else {
channelRetMsg.setChannelState(ChannelRetMsg.ChannelState.CONFIRM_FAIL);
channelRetMsg.setChannelErrCode(response.get().getErrCode());
channelRetMsg.setChannelErrMsg(response.get().getErrMsg());
}
channelRetMsg.setChannelState(ChannelRetMsg.ChannelState.WAITING);
} else {
channelRetMsg.setChannelState(ChannelRetMsg.ChannelState.CONFIRM_FAIL);
channelRetMsg.setChannelErrCode(response.get().getErrCode());
channelRetMsg.setChannelErrMsg(response.get().getErrMsg());
}
} catch (JeepayException e) {
channelRetMsg.setChannelState(ChannelRetMsg.ChannelState.CONFIRM_FAIL);
......
......@@ -15,14 +15,12 @@
*/
package com.jeequan.jeepay.pay.channel.jeepluspay.payway;
import com.jeequan.jeepay.Jeepay;
import com.jeequan.jeepay.JeepayClient;
import com.jeequan.jeepay.core.constants.CS;
import com.jeequan.jeepay.core.entity.PayOrder;
import com.jeequan.jeepay.core.model.params.jeepluspay.JeepluspayConfig;
import com.jeequan.jeepay.core.model.params.jeepluspay.JeepluspayNormalMchParams;
import com.jeequan.jeepay.exception.JeepayException;
import com.jeequan.jeepay.model.PayOrderCreateReqModel;
import com.jeequan.jeepay.pay.channel.jeepluspay.JeepluspayKit;
import com.jeequan.jeepay.pay.channel.jeepluspay.JeepluspayPaymentService;
import com.jeequan.jeepay.pay.model.MchAppConfigContext;
import com.jeequan.jeepay.pay.rqrs.AbstractRS;
......@@ -31,9 +29,7 @@ import com.jeequan.jeepay.pay.rqrs.payorder.UnifiedOrderRQ;
import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxNativeOrderRQ;
import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxNativeOrderRS;
import com.jeequan.jeepay.pay.util.ApiResBuilder;
import com.jeequan.jeepay.request.PayOrderCreateRequest;
import com.jeequan.jeepay.response.PayOrderCreateResponse;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
/*
......@@ -54,59 +50,37 @@ public class WxNative extends JeepluspayPaymentService {
@Override
public AbstractRS pay(UnifiedOrderRQ rq, PayOrder payOrder, MchAppConfigContext mchAppConfigContext) throws Exception {
WxNativeOrderRQ bizRQ = (WxNativeOrderRQ) rq;
JeepluspayNormalMchParams normalMchParams = (JeepluspayNormalMchParams) configContextQueryService.queryNormalMchParams(mchAppConfigContext.getMchNo(), mchAppConfigContext.getAppId(), CS.IF_CODE.JEEPLUSPAY);
// 构建请求数据
PayOrderCreateRequest request = new PayOrderCreateRequest();
PayOrderCreateReqModel model = new PayOrderCreateReqModel();
model.setMchNo(normalMchParams.getMerchantNo()); // 商户号
model.setAppId(normalMchParams.getAppId()); // 应用ID
model.setMchOrderNo(payOrder.getPayOrderId()); // 商户订单号
model.setWayCode(JeepluspayConfig.WX_NATIVE); // 支付方式
model.setAmount(payOrder.getAmount()); // 金额,单位分
model.setCurrency(payOrder.getCurrency()); // 币种,目前只支持cny
model.setClientIp(payOrder.getClientIp()); // 发起支付请求客户端的IP地址
model.setSubject(payOrder.getSubject()); // 商品标题
model.setBody(payOrder.getBody()); // 商品描述
model.setNotifyUrl(getNotifyUrl()); // 异步通知地址
request.setBizModel(model);
// 构造函数响应数据
WxNativeOrderRS res = ApiResBuilder.buildSuccess(WxNativeOrderRS.class);
ChannelRetMsg channelRetMsg = new ChannelRetMsg();
res.setChannelRetMsg(channelRetMsg);
try {
// 发起统一下单
PayOrderCreateResponse response = new PayOrderCreateResponse();
boolean checkSign = false;
boolean isSuccess = false;
if (normalMchParams.getSignType().equals(JeepluspayConfig.DEFAULT_SIGN_TYPE) || StringUtils.isEmpty(normalMchParams.getSignType())) {
JeepayClient jeepayClient = JeepayClient.getInstance(normalMchParams.getAppId(), normalMchParams.getAppSecret(), Jeepay.getApiBase());
response = jeepayClient.execute(request);
checkSign = response.checkSign(normalMchParams.getAppSecret());
isSuccess = response.isSuccess(normalMchParams.getAppSecret());
// 构建请求数据
PayOrderCreateReqModel model = new PayOrderCreateReqModel();
// 支付方式
model.setWayCode(JeepluspayConfig.WX_NATIVE);
// 异步通知地址
model.setNotifyUrl(getNotifyUrl());
} else if (normalMchParams.getSignType().equals(JeepluspayConfig.SIGN_TYPE_RSA2)) {
JeepayClient jeepayClient = JeepayClient.getInstance(normalMchParams.getAppId(), normalMchParams.getRsa2AppPrivateKey(), Jeepay.getApiBase());
response = jeepayClient.executeByRSA2(request);
checkSign = response.checkSignByRsa2(normalMchParams.getRsa2PayPublicKey());
isSuccess = response.isSuccessByRsa2(normalMchParams.getRsa2PayPublicKey());
}
// 发起统一下单
PayOrderCreateResponse response = JeepluspayKit.payRequest(payOrder, mchAppConfigContext, model);
// 下单返回状态
Boolean isSuccess = JeepluspayKit.checkPayResp(response, mchAppConfigContext);
if (checkSign) {
channelRetMsg.setChannelOrderId(response.get().getPayOrderId());
if (isSuccess) {
// 下单成功
// 二维码图片地址
if (CS.PAY_DATA_TYPE.CODE_IMG_URL.equals(bizRQ.getPayDataType())) {
res.setCodeImgUrl(sysConfigService.getDBApplicationConfig().genScanImgUrl(response.get().getPayData()));
} else {
res.setCodeUrl(response.get().getPayData());
}
channelRetMsg.setChannelState(ChannelRetMsg.ChannelState.WAITING);
if (isSuccess) {
// 下单成功
// 二维码图片地址
if (CS.PAY_DATA_TYPE.CODE_IMG_URL.equals(bizRQ.getPayDataType())) {
res.setCodeImgUrl(sysConfigService.getDBApplicationConfig().genScanImgUrl(response.get().getPayData()));
} else {
channelRetMsg.setChannelState(ChannelRetMsg.ChannelState.CONFIRM_FAIL);
channelRetMsg.setChannelErrCode(response.get().getErrCode());
channelRetMsg.setChannelErrMsg(response.get().getErrMsg());
res.setCodeUrl(response.get().getPayData());
}
channelRetMsg.setChannelOrderId(response.get().getPayOrderId());
channelRetMsg.setChannelState(ChannelRetMsg.ChannelState.WAITING);
} else {
channelRetMsg.setChannelState(ChannelRetMsg.ChannelState.CONFIRM_FAIL);
channelRetMsg.setChannelErrCode(response.get().getErrCode());
channelRetMsg.setChannelErrMsg(response.get().getErrMsg());
}
} catch (JeepayException e) {
channelRetMsg.setChannelState(ChannelRetMsg.ChannelState.CONFIRM_FAIL);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment