forked from jeequan/jeepay
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
jmdhappy
committed
Sep 5, 2017
1 parent
2c1dc9f
commit d2dd560
Showing
8 changed files
with
290 additions
and
22 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,11 +2,14 @@ | |
|
||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.stereotype.Component; | ||
import org.springframework.util.CollectionUtils; | ||
import org.xxpay.common.constant.PayConstant; | ||
import org.xxpay.dal.dao.mapper.PayOrderMapper; | ||
import org.xxpay.dal.dao.model.PayOrder; | ||
import org.xxpay.dal.dao.model.PayOrderExample; | ||
|
||
import java.util.List; | ||
|
||
/** | ||
* @Description: | ||
* @author dingzhiwei [email protected] | ||
|
@@ -28,6 +31,24 @@ public PayOrder selectPayOrder(String payOrderId) { | |
return payOrderMapper.selectByPrimaryKey(payOrderId); | ||
} | ||
|
||
public PayOrder selectPayOrderByMchIdAndPayOrderId(String mchId, String payOrderId) { | ||
PayOrderExample example = new PayOrderExample(); | ||
PayOrderExample.Criteria criteria = example.createCriteria(); | ||
criteria.andMchIdEqualTo(mchId); | ||
criteria.andPayOrderIdEqualTo(payOrderId); | ||
List<PayOrder> payOrderList = payOrderMapper.selectByExample(example); | ||
return CollectionUtils.isEmpty(payOrderList) ? null : payOrderList.get(0); | ||
} | ||
|
||
public PayOrder selectPayOrderByMchIdAndMchOrderNo(String mchId, String mchOrderNo) { | ||
PayOrderExample example = new PayOrderExample(); | ||
PayOrderExample.Criteria criteria = example.createCriteria(); | ||
criteria.andMchIdEqualTo(mchId); | ||
criteria.andMchOrderNoEqualTo(mchOrderNo); | ||
List<PayOrder> payOrderList = payOrderMapper.selectByExample(example); | ||
return CollectionUtils.isEmpty(payOrderList) ? null : payOrderList.get(0); | ||
} | ||
|
||
public int updateStatus4Ing(String payOrderId, String channelOrderNo) { | ||
PayOrder payOrder = new PayOrder(); | ||
payOrder.setStatus(PayConstant.PAY_STATUS_PAYING); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
174 changes: 174 additions & 0 deletions
174
...pring-cloud/xxpay-web/src/main/java/org/xxpay/web/controller/QueryPayOrderController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,174 @@ | ||
package org.xxpay.web.controller; | ||
|
||
import com.alibaba.fastjson.JSON; | ||
import com.alibaba.fastjson.JSONObject; | ||
import org.apache.commons.lang.StringUtils; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.cloud.client.ServiceInstance; | ||
import org.springframework.cloud.client.discovery.DiscoveryClient; | ||
import org.springframework.web.bind.annotation.RequestMapping; | ||
import org.springframework.web.bind.annotation.RequestParam; | ||
import org.springframework.web.bind.annotation.RestController; | ||
import org.xxpay.common.constant.PayConstant; | ||
import org.xxpay.common.util.MyLog; | ||
import org.xxpay.common.util.XXPayUtil; | ||
import org.xxpay.web.service.MchInfoServiceClient; | ||
import org.xxpay.web.service.PayOrderServiceClient; | ||
|
||
import java.util.Map; | ||
|
||
/** | ||
* @Description: 支付订单查询 | ||
* @author dingzhiwei [email protected] | ||
* @date 2017-08-31 | ||
* @version V1.0 | ||
* @Copyright: www.xxpay.org | ||
*/ | ||
@RestController | ||
public class QueryPayOrderController { | ||
|
||
private final MyLog _log = MyLog.getLog(QueryPayOrderController.class); | ||
|
||
@Autowired | ||
private DiscoveryClient client; | ||
|
||
@Autowired | ||
private PayOrderServiceClient payOrderServiceClient; | ||
|
||
@Autowired | ||
private MchInfoServiceClient mchInfoServiceClient; | ||
|
||
/** | ||
* 查询支付订单接口: | ||
* 1)先验证接口参数以及签名信息 | ||
* 2)根据参数查询订单 | ||
* 3)返回订单数据 | ||
* @param params | ||
* @return | ||
*/ | ||
@RequestMapping(value = "/pay/query_order") | ||
public String queryPayOrder(@RequestParam String params) { | ||
_log.info("###### 开始接收商户查询支付订单请求 ######"); | ||
String logPrefix = "【商户支付订单查询】"; | ||
ServiceInstance instance = client.getLocalServiceInstance(); | ||
_log.info("{}/pay/query_order, host:{}, service_id:{}, params:{}", logPrefix, instance.getHost(), instance.getServiceId(), params); | ||
try { | ||
JSONObject po = JSONObject.parseObject(params); | ||
JSONObject payContext = new JSONObject(); | ||
// 验证参数有效性 | ||
String errorMessage = validateParams(po, payContext); | ||
if (!"success".equalsIgnoreCase(errorMessage)) { | ||
_log.warn(errorMessage); | ||
return XXPayUtil.makeRetFail(XXPayUtil.makeRetMap(PayConstant.RETURN_VALUE_FAIL, errorMessage, null, null)); | ||
} | ||
_log.debug("请求参数及签名校验通过"); | ||
String mchId = po.getString("mchId"); // 商户ID | ||
String mchOrderNo = po.getString("mchOrderNo"); // 商户订单号 | ||
String payOrderId = po.getString("payOrderId"); // 支付订单号 | ||
String executeNotify = po.getString("executeNotify"); // 是否执行回调 | ||
JSONObject payOrder; | ||
String retStr = payOrderServiceClient.queryPayOrder(getJsonParam(new String[]{"mchId", "payOrderId", "mchOrderNo", "executeNotify"}, new Object[]{mchId, payOrderId, mchOrderNo, executeNotify})); | ||
JSONObject retObj = JSON.parseObject(retStr); | ||
_log.info("{}查询支付订单,结果:{}", logPrefix, retObj); | ||
if(!"0000".equals(retObj.getString("code"))) { | ||
return XXPayUtil.makeRetFail(XXPayUtil.makeRetMap(PayConstant.RETURN_VALUE_FAIL, retObj.getString("msg"), null, null)); | ||
} | ||
payOrder = retObj.getJSONObject("result"); | ||
if (payOrder == null) { | ||
return XXPayUtil.makeRetFail(XXPayUtil.makeRetMap(PayConstant.RETURN_VALUE_FAIL, "支付订单不存在", null, null)); | ||
} | ||
Map<String, Object> map = XXPayUtil.makeRetMap(PayConstant.RETURN_VALUE_SUCCESS, "", PayConstant.RETURN_VALUE_SUCCESS, null); | ||
map.put("result", payOrder); | ||
_log.info("商户查询订单成功,payOrder={}", payOrder); | ||
_log.info("###### 商户查询订单处理完成 ######"); | ||
return XXPayUtil.makeRetData(map, payContext.getString("resKey")); | ||
}catch (Exception e) { | ||
_log.error(e, ""); | ||
return XXPayUtil.makeRetFail(XXPayUtil.makeRetMap(PayConstant.RETURN_VALUE_FAIL, "支付中心系统异常", null, null)); | ||
} | ||
} | ||
|
||
/** | ||
* 验证创建订单请求参数,参数通过返回JSONObject对象,否则返回错误文本信息 | ||
* @param params | ||
* @return | ||
*/ | ||
private String validateParams(JSONObject params, JSONObject payContext) { | ||
// 验证请求参数,参数有问题返回错误提示 | ||
String errorMessage; | ||
// 支付参数 | ||
String mchId = params.getString("mchId"); // 商户ID | ||
String mchOrderNo = params.getString("mchOrderNo"); // 商户订单号 | ||
String payOrderId = params.getString("payOrderId"); // 支付订单号 | ||
|
||
String sign = params.getString("sign"); // 签名 | ||
|
||
// 验证请求参数有效性(必选项) | ||
if(StringUtils.isBlank(mchId)) { | ||
errorMessage = "request params[mchId] error."; | ||
return errorMessage; | ||
} | ||
if(StringUtils.isBlank(mchOrderNo) && StringUtils.isBlank(payOrderId)) { | ||
errorMessage = "request params[mchOrderNo or payOrderId] error."; | ||
return errorMessage; | ||
} | ||
|
||
// 签名信息 | ||
if (StringUtils.isEmpty(sign)) { | ||
errorMessage = "request params[sign] error."; | ||
return errorMessage; | ||
} | ||
|
||
// 查询商户信息 | ||
JSONObject mchInfo; | ||
String retStr = mchInfoServiceClient.selectMchInfo(getJsonParam("mchId", mchId)); | ||
|
||
JSONObject retObj = JSON.parseObject(retStr); | ||
if("0000".equals(retObj.getString("code"))) { | ||
mchInfo = retObj.getJSONObject("result"); | ||
if (mchInfo == null) { | ||
errorMessage = "Can't found mchInfo[mchId="+mchId+"] record in db."; | ||
return errorMessage; | ||
} | ||
if(mchInfo.getByte("state") != 1) { | ||
errorMessage = "mchInfo not available [mchId="+mchId+"] record in db."; | ||
return errorMessage; | ||
} | ||
}else { | ||
errorMessage = "Can't found mchInfo[mchId="+mchId+"] record in db."; | ||
_log.info("查询商户没有正常返回数据,code={},msg={}", retObj.getString("code"), retObj.getString("msg")); | ||
return errorMessage; | ||
} | ||
|
||
String reqKey = mchInfo.getString("reqKey"); | ||
if (StringUtils.isBlank(reqKey)) { | ||
errorMessage = "reqKey is null[mchId="+mchId+"] record in db."; | ||
return errorMessage; | ||
} | ||
payContext.put("resKey", mchInfo.getString("resKey")); | ||
|
||
// 验证签名数据 | ||
boolean verifyFlag = XXPayUtil.verifyPaySign(params, reqKey); | ||
if(!verifyFlag) { | ||
errorMessage = "Verify XX pay sign failed."; | ||
return errorMessage; | ||
} | ||
|
||
return "success"; | ||
} | ||
|
||
String getJsonParam(String[] names, Object[] values) { | ||
JSONObject jsonParam = new JSONObject(); | ||
for (int i = 0; i < names.length; i++) { | ||
jsonParam.put(names[i], values[i]); | ||
} | ||
return jsonParam.toJSONString(); | ||
} | ||
|
||
String getJsonParam(String name, Object value) { | ||
JSONObject jsonParam = new JSONObject(); | ||
jsonParam.put(name, value); | ||
return jsonParam.toJSONString(); | ||
} | ||
|
||
} |
Oops, something went wrong.