Commit 2743de4b authored by yurong's avatar yurong
Browse files

jeepay对接计全付+计全付配置SQL+本地pls包+微信和支付宝小程序的OrderRQ和OrderRS

parent 54cb88c6
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.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.AliBarOrderRS;
import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxBarOrderRQ;
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;
/*
* 计全付 微信 bar
*
* @author yr
* @site https://www.jeequan.com
* @date 2022/8/16 18:37
*/
@Service("jeepluspayPaymentByWxBarService") //Service Name需保持全局唯一性
public class WxBar extends JeepluspayPaymentService {
@Override
public String preCheck(UnifiedOrderRQ rq, PayOrder payOrder) {
WxBarOrderRQ bizRQ = (WxBarOrderRQ) rq;
if (StringUtils.isEmpty(bizRQ.getAuthCode())) {
throw new BizException("用户支付条码[authCode]不可为空");
}
return null;
}
@Override
public AbstractRS pay(UnifiedOrderRQ rq, PayOrder payOrder, MchAppConfigContext mchAppConfigContext) throws Exception {
WxBarOrderRQ bizRQ = (WxBarOrderRQ) 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_BAR); // 支付方式
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("authCode", bizRQ.getAuthCode());
model.setChannelExtra(channelExtra.toString()); // 用户付款码值
request.setBizModel(model);
// 构造函数响应数据
AliBarOrderRS res = ApiResBuilder.buildSuccess(AliBarOrderRS.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());
} 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());
}
if (checkSign) {
channelRetMsg.setChannelOrderId(response.get().getPayOrderId());
if (isSuccess) {
// 下单成功
channelRetMsg.setChannelState(ChannelRetMsg.ChannelState.CONFIRM_SUCCESS);
} 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);
}
return res;
}
}
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.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.WxH5OrderRS;
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;
/*
* 计全付 微信 H5 支付
*
* @author yr
* @site https://www.jeequan.com
* @date 2022/8/17 15:37
*/
@Service("jeepluspayPaymentByWxH5Service") //Service Name需保持全局唯一性
public class WxH5 extends JeepluspayPaymentService {
@Override
public String preCheck(UnifiedOrderRQ rq, PayOrder payOrder) {
return null;
}
@Override
public AbstractRS pay(UnifiedOrderRQ rq, PayOrder payOrder, MchAppConfigContext mchAppConfigContext) {
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_H5); // 支付方式
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);
// 构造函数响应数据
WxH5OrderRS res = ApiResBuilder.buildSuccess(WxH5OrderRS.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());
} 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());
}
if (checkSign) {
channelRetMsg.setChannelOrderId(response.get().getPayOrderId());
if (isSuccess) {
// 下单成功
String payUrl = response.getData().getString("payData");
String payDataType = response.getData().getString("payDataType");
if (CS.PAY_DATA_TYPE.FORM.equals(payDataType)) { //表单方式
res.setFormContent(payUrl);
} else if (CS.PAY_DATA_TYPE.CODE_IMG_URL.equals(payDataType)) { //二维码图片地址
res.setCodeImgUrl(payUrl);
} else { // 默认都为 payUrl方式
res.setPayUrl(payUrl);
}
// 支付中
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);
}
return res;
}
}
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.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.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;
import org.springframework.stereotype.Service;
/*
* 计全付 微信 jsapi支付
*
* @author yr
* @site https://www.jeequan.com
* @date 2022/8/17 14:24
*/
@Service("jeepluspayPaymentByWxJsapiService") //Service Name需保持全局唯一性
@Slf4j
public class WxJsapi extends JeepluspayPaymentService {
@Override
public String preCheck(UnifiedOrderRQ rq, PayOrder payOrder) {
WxJsapiOrderRQ bizRQ = (WxJsapiOrderRQ) rq;
if (StringUtils.isEmpty(bizRQ.getOpenid())) {
throw new BizException("[openid]不可为空");
}
return null;
}
@Override
public AbstractRS pay(UnifiedOrderRQ rq, PayOrder payOrder, MchAppConfigContext mchAppConfigContext) throws Exception {
WxJsapiOrderRQ bizRQ = (WxJsapiOrderRQ) 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_JSAPI); // 支付方式
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);
// 构造函数响应数据
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());
} 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());
}
if (checkSign) {
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());
}
}
} catch (JeepayException e) {
channelRetMsg.setChannelState(ChannelRetMsg.ChannelState.CONFIRM_FAIL);
}
return res;
}
}
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.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.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;
import org.springframework.stereotype.Service;
/*
* 计全付 微信 小程序支付
*
* @author yr
* @site https://www.jeequan.com
* @date 2022/8/17 15:24
*/
@Service("jeepluspayPaymentByWxLiteService") //Service Name需保持全局唯一性
@Slf4j
public class WxLite extends JeepluspayPaymentService {
@Override
public String preCheck(UnifiedOrderRQ rq, PayOrder payOrder) {
WxLiteOrderRQ bizRQ = (WxLiteOrderRQ) rq;
if (StringUtils.isEmpty(bizRQ.getOpenid())) {
throw new BizException("[openid]不可为空");
}
return null;
}
@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);
// 构造函数响应数据
WxLiteOrderRS res = ApiResBuilder.buildSuccess(WxLiteOrderRS.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());
} 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());
}
if (checkSign) {
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());
}
}
} catch (JeepayException e) {
channelRetMsg.setChannelState(ChannelRetMsg.ChannelState.CONFIRM_FAIL);
}
return res;
}
}
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.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.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;
/*
* 计全付 微信 native支付
*
* @author yr
* @site https://www.jeequan.com
* @date 2022/8/11 15:37
*/
@Service("jeepluspayPaymentByWxNativeService") //Service Name需保持全局唯一性
public class WxNative extends JeepluspayPaymentService {
@Override
public String preCheck(UnifiedOrderRQ rq, PayOrder payOrder) {
return null;
}
@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());
} 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());
}
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);
} 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);
}
return res;
}
}
......@@ -23,8 +23,8 @@ 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.AliBarOrderRS;
import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxBarOrderRQ;
import com.jeequan.jeepay.pay.rqrs.payorder.payway.WxBarOrderRS;
import com.jeequan.jeepay.pay.util.ApiResBuilder;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
......@@ -72,7 +72,7 @@ public class WxBar extends XxpayPaymentService {
paramMap.put("body", payOrder.getBody());
paramMap.put("extra", bizRQ.getAuthCode());
// 构造函数响应数据
AliBarOrderRS res = ApiResBuilder.buildSuccess(AliBarOrderRS.class);
WxBarOrderRS res = ApiResBuilder.buildSuccess(WxBarOrderRS.class);
ChannelRetMsg channelRetMsg = new ChannelRetMsg();
res.setChannelRetMsg(channelRetMsg);
// 发起支付
......
......@@ -98,6 +98,10 @@ public class UnifiedOrderRQ extends AbstractMchAppRQ {
AliJsapiOrderRQ bizRQ = JSONObject.parseObject(StringUtils.defaultIfEmpty(this.channelExtra, "{}"), AliJsapiOrderRQ.class);
BeanUtils.copyProperties(this, bizRQ);
return bizRQ;
}else if(CS.PAY_WAY_CODE.ALI_LITE.equals(wayCode)){
AliLiteOrderRQ bizRQ = JSONObject.parseObject(StringUtils.defaultIfEmpty(this.channelExtra, "{}"), AliLiteOrderRQ.class);
BeanUtils.copyProperties(this, bizRQ);
return bizRQ;
}else if(CS.PAY_WAY_CODE.QR_CASHIER.equals(wayCode)){
QrCashierOrderRQ bizRQ = JSONObject.parseObject(StringUtils.defaultIfEmpty(this.channelExtra, "{}"), QrCashierOrderRQ.class);
BeanUtils.copyProperties(this, bizRQ);
......@@ -106,6 +110,10 @@ public class UnifiedOrderRQ extends AbstractMchAppRQ {
WxJsapiOrderRQ bizRQ = JSONObject.parseObject(StringUtils.defaultIfEmpty(this.channelExtra, "{}"), WxJsapiOrderRQ.class);
BeanUtils.copyProperties(this, bizRQ);
return bizRQ;
}else if(CS.PAY_WAY_CODE.WX_LITE.equals(wayCode)){
WxLiteOrderRQ bizRQ = JSONObject.parseObject(StringUtils.defaultIfEmpty(this.channelExtra, "{}"), WxLiteOrderRQ.class);
BeanUtils.copyProperties(this, bizRQ);
return bizRQ;
}else if(CS.PAY_WAY_CODE.WX_BAR.equals(wayCode)){
WxBarOrderRQ bizRQ = JSONObject.parseObject(StringUtils.defaultIfEmpty(this.channelExtra, "{}"), WxBarOrderRQ.class);
BeanUtils.copyProperties(this, bizRQ);
......
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jeequan.jeepay.pay.rqrs.payorder.payway;
import com.jeequan.jeepay.core.constants.CS;
import com.jeequan.jeepay.pay.rqrs.payorder.UnifiedOrderRQ;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/*
* 支付方式: ALI_LITE
*
* @author terrfly
* @site https://www.jeequan.com
* @date 2021/6/8 17:34
*/
@Data
public class AliLiteOrderRQ extends UnifiedOrderRQ {
/** 支付宝用户ID **/
@NotBlank(message = "用户ID不能为空")
private String buyerUserId;
/** 构造函数 **/
public AliLiteOrderRQ(){
this.setWayCode(CS.PAY_WAY_CODE.ALI_LITE);
}
@Override
public String getChannelUserId(){
return this.buyerUserId;
}
}
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jeequan.jeepay.pay.rqrs.payorder.payway;
import com.jeequan.jeepay.core.constants.CS;
import com.jeequan.jeepay.core.utils.JsonKit;
import com.jeequan.jeepay.pay.rqrs.payorder.UnifiedOrderRS;
import lombok.Data;
/*
* 支付方式: ALI_LITE
*
* @author terrfly
* @site https://www.jeequan.com
* @date 2021/6/8 17:34
*/
@Data
public class AliLiteOrderRS extends UnifiedOrderRS {
/** 调起支付插件的支付宝订单号 **/
private String alipayTradeNo;
@Override
public String buildPayDataType(){
return CS.PAY_DATA_TYPE.ALI_APP;
}
@Override
public String buildPayData(){
return JsonKit.newJson("alipayTradeNo", alipayTradeNo).toString();
}
}
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jeequan.jeepay.pay.rqrs.payorder.payway;
import com.jeequan.jeepay.core.constants.CS;
import com.jeequan.jeepay.pay.rqrs.payorder.UnifiedOrderRQ;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/*
* 支付方式: WX_LITE
*
* @author zhuxiao
* @site https://www.jeequan.com
* @date 2021/6/8 17:34
*/
@Data
public class WxLiteOrderRQ extends UnifiedOrderRQ {
/** 微信openid **/
@NotBlank(message = "openid不能为空")
private String openid;
/** 标志是否为 subMchLiteAppId的对应 openId, 0-否, 1-是, 默认否 **/
private Byte isSubOpenId;
/** 构造函数 **/
public WxLiteOrderRQ(){
this.setWayCode(CS.PAY_WAY_CODE.WX_LITE);
}
@Override
public String getChannelUserId() {
return this.openid;
}
}
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jeequan.jeepay.pay.rqrs.payorder.payway;
import com.jeequan.jeepay.core.constants.CS;
import com.jeequan.jeepay.pay.rqrs.payorder.UnifiedOrderRS;
import lombok.Data;
/*
* 支付方式: WX_LITE
*
* @author zhuxiao
* @site https://www.jeequan.com
* @date 2021/6/8 17:34
*/
@Data
public class WxLiteOrderRS extends UnifiedOrderRS {
/** 预支付数据包 **/
private String payInfo;
@Override
public String buildPayDataType(){
return CS.PAY_DATA_TYPE.WX_APP;
}
@Override
public String buildPayData(){
return payInfo;
}
}
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