Quellcode durchsuchen

[微信支付查询/关闭接口][新增]:微信支付查询支付订单接口及关闭支付订单接口添加

release_toaliyun_real
Stormeye.Wu vor 7 Jahren
Ursprung
Commit
58d862b629
3 geänderte Dateien mit 185 neuen und 6 gelöschten Zeilen
  1. +65
    -0
      mallinkService/src/main/java/com/simple/pay/WxPayOrderQ.java
  2. +14
    -0
      mallinkService/src/main/java/com/simple/service/WxPayOrderService.java
  3. +106
    -6
      mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java

+ 65
- 0
mallinkService/src/main/java/com/simple/pay/WxPayOrderQ.java Datei anzeigen

@@ -0,0 +1,65 @@
package com.simple.pay;

/**
* Created by Stormeye on 2018/8/10.
*/
public class WxPayOrderQ {
private String appid; // 公众账号ID
private String mch_id; // 商户号
private String nonce_str; // 随机字符串
private String sign; // 签名
private String out_trade_no; // 商户订单号


public String getAppid() {
return appid;
}

public void setAppid(String appid) {
this.appid = appid;
}

public String getMch_id() {
return mch_id;
}

public void setMch_id(String mch_id) {
this.mch_id = mch_id;
}

public String getNonce_str() {
return nonce_str;
}

public void setNonce_str(String nonce_str) {
this.nonce_str = nonce_str;
}

public String getSign() {
return sign;
}

public void setSign(String sign) {
this.sign = sign;
}

public String getOut_trade_no() {
return out_trade_no;
}

public void setOut_trade_no(String out_trade_no) {
this.out_trade_no = out_trade_no;
}

@Override
public String toString() {
final StringBuilder sb = new StringBuilder("WxPayOrder{");
sb.append("appid='").append(appid).append('\'');
sb.append(", mch_id='").append(mch_id).append('\'');
sb.append(", nonce_str='").append(nonce_str).append('\'');
sb.append(", sign='").append(sign).append('\'');
sb.append(", out_trade_no='").append(out_trade_no).append('\'');
sb.append('}');
return sb.toString();
}
}

+ 14
- 0
mallinkService/src/main/java/com/simple/service/WxPayOrderService.java Datei anzeigen

@@ -20,6 +20,20 @@ public interface WxPayOrderService {
*/
ResultData createPayOrder(boolean isReal, WxAppinfo appInfo, WxCUser user, WxPayOrder record, EnumPayWay payWay);

/**
* 微信支付订单查询
* @param appInfo 支付订单Appinfo
* @param record 支付订单
*/
ResultData payOrderQuery(WxAppinfo appInfo, WxPayOrder record);

/**
* 微信支付关闭订单
* @param appInfo 支付订单Appinfo
* @param record 支付订单
*/
ResultData payOrderClose(WxAppinfo appInfo, WxPayOrder record);

/**
* 异步通知
*


+ 106
- 6
mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java Datei anzeigen

@@ -17,9 +17,7 @@ import com.simple.enums.EnumPayType;
import com.simple.enums.EnumPayWay;
import com.simple.exception.MallinkException;
import com.simple.mapper.*;
import com.simple.pay.WxPay;
import com.simple.pay.WxPayOrderP;
import com.simple.pay.WxPayment;
import com.simple.pay.*;
import com.simple.service.WxOrderService;
import com.simple.service.WxPayOrderService;
import com.simple.utils.BeanUtils;
@@ -56,7 +54,8 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
@Autowired
WxOrderService wxOrderService;

JSONObject errorMap = JSON.parseObject("{\"NOAUTH\":{\"detail\":\"商户无此接口权限\",\"reason\":\"商户未开通此接口权限\",\"resolution\":\"请商户前往申请此接口权限\"}," +
JSONObject errorMap = JSON.parseObject("{" +
"\"NOAUTH\":{\"detail\":\"商户无此接口权限\",\"reason\":\"商户未开通此接口权限\",\"resolution\":\"请商户前往申请此接口权限\"}," +
"\"NOTENOUGH\":{\"detail\":\"余额不足\",\"reason\":\"用户帐号余额不足\",\"resolution\":\"用户帐号余额不足,请用户充值或更换支付卡后再支付\"}," +
"\"ORDERPAID\":{\"detail\":\"商户订单已支付\",\"reason\":\"商户订单已支付,无需重复操作\",\"resolution\":\"商户订单已支付,无需更多操作\"}," +
"\"ORDERCLOSED\":{\"detail\":\"订单已关闭\",\"reason\":\"当前订单已关闭,无法支付\",\"resolution\":\"当前订单已关闭,请重新下单\"}," +
@@ -72,6 +71,18 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
"\"POST_DATA_EMPTY\":{\"detail\":\"post数据为空\",\"reason\":\"post数据不能为空\",\"resolution\":\"请检查post数据是否为空\"}," +
"\"NOT_UTF8\":{\"detail\":\"编码格式错误\",\"reason\":\"未使用指定编码格式\",\"resolution\":\"请使用UTF-8编码格式\"}}");

JSONObject errorMapQuery = JSON.parseObject("{" +
"\"ORDERNOTEXIST\":{\"detail\":\"此交易订单号不存在\",\"reason\":\"查询系统中不存在此交易订单号\",\"resolution\":\"该API只能查提交支付交易返回成功的订单,请商户检查需要查询的订单号是否正确\"},\n" +
"\"SYSTEMERROR\":{\"detail\":\"系统错误\t\",\"reason\":\"后台系统返回错误\",\"resolution\":\"系统异常,请再调用发起查询\"}}");

JSONObject errorMapClose = JSON.parseObject("{" +
"\"ORDERPAID\":{\"detail\":\"订单已支付\",\"reason\":\"订单已支付,不能发起关单\",\"resolution\":\"订单已支付,不能发起关单,请当作已支付的正常交易\"}," +
"\"SYSTEMERROR\":{\"detail\":\"系统错误\",\"reason\":\"系统错误\",\"resolution\":\"系统异常,请重新调用该API\"}," +
"\"ORDERCLOSED\":{\"detail\":\"订单已关闭\",\"reason\":\"订单已关闭,无法重复关闭\",\"resolution\":\"订单已关闭,无需继续调用\"}" +
"\"SIGNERROR\":{\"detail\":\"签名错误\",\"reason\":\"参数签名结果不正确\",\"resolution\":\"请检查签名参数和方法是否都符合签名算法要求\"}," +
"\"REQUIRE_POST_METHOD\":{\"detail\":\"请使用post方法\",\"reason\":\"未使用post传递参数\",\"resolution\":\"请检查请求参数是否通过post方法提交\"}," +
"\"XML_FORMAT_ERROR\":{\"detail\":\"XML格式错误\t\",\"reason\":\"XML格式错误\",\"reason\":\"请检查XML参数格式是否正确\"}}");

@Override
public ResultData createPayOrder(boolean isReal, WxAppinfo appInfo, WxCUser user, WxPayOrder record, EnumPayWay payWay) {
final IdWorker idworker = IdWorker.get();
@@ -205,8 +216,97 @@ public class WxPayOrderServiceImpl implements WxPayOrderService {
}

// TODO
// 微信订单查询
// 微信关闭订单
/**
* 微信订单查询
*
*/
@Override
public ResultData payOrderQuery(WxAppinfo appInfo, WxPayOrder record) {
// get payAccount
WxPayAccount payAccount = wxPayAccountMapper.selectByPrimaryKey(appInfo.getPayId());
WxPayOrderQ payOrderQ = new WxPayOrderQ();
String noncestr = Utility.generate32UUID();
payOrderQ.setAppid(appInfo.getAppId());
payOrderQ.setMch_id(payAccount.getMchId());
payOrderQ.setNonce_str(noncestr);
payOrderQ.setOut_trade_no(record.getPayOrderNo());

try {
payOrderQ.setSign(WxPayment.createSign(BeanUtils.toStringMap(payOrderQ), payAccount.getApiKey()));

String response = WxPay.orderQuery(BeanUtils.toStringMap(payOrderQ));

logger.info("pay order query, " + payOrderQ.toString() + ", response: " + response);
Map<String, String> returnMap = WxPayment.xmlToMap(response);
String result_code = returnMap.get("result_code");
if ("SUCCESS".equals(result_code)) {
String trade_state = returnMap.get("trade_state");
//SUCCESS—支付成功
//REFUND—转入退款
//NOTPAY—未支付
//CLOSED—已关闭
//REVOKED—已撤销(刷卡支付)
//USERPAYING--用户支付中
//PAYERROR--支付失败(其他原因,如银行返回失败)
if ("SUCCESS".equals(trade_state)) {
record.setPayOrderStatus(EnumPayStatus.PAY_WAY_SUCCESS.getCode());
handlePayOrderStatusUpdate(record);
} else if ("USERPAYING".equals(trade_state)) {
//record.setPayOrderStatus(EnumPayStatus.PAY_WAY_WAIT.getCode());
//handlePayOrderStatusUpdate(record);
} else {
record.setPayOrderStatus(EnumPayStatus.PAY_WAY_FAIL.getCode());
handlePayOrderStatusUpdate(record);
}
return new ResultData(Result.SUCCESS, "订单查询成功", returnMap);
} else {
JSONObject errObj = errorMap.getJSONObject(result_code);
return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), errObj.toJSONString(), returnMap);
}
} catch (RuntimeException e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
} catch (Exception e){
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
}

}
/**
* 微信关闭订单
*/
@Override
public ResultData payOrderClose(WxAppinfo appInfo, WxPayOrder record) {
// get payAccount
WxPayAccount payAccount = wxPayAccountMapper.selectByPrimaryKey(appInfo.getPayId());
WxPayOrderQ payOrderC = new WxPayOrderQ();
String noncestr = Utility.generate32UUID();
payOrderC.setAppid(appInfo.getAppId());
payOrderC.setMch_id(payAccount.getMchId());
payOrderC.setNonce_str(noncestr);
payOrderC.setOut_trade_no(record.getPayOrderNo());

try {
payOrderC.setSign(WxPayment.createSign(BeanUtils.toStringMap(payOrderC), payAccount.getApiKey()));

String response = WxPay.closeOrder(BeanUtils.toStringMap(payOrderC));

logger.info("pay order close, " + payOrderC.toString() + ", response: " + response);
Map<String, String> returnMap = WxPayment.xmlToMap(response);
String result_code = returnMap.get("result_code");
if ("SUCCESS".equals(result_code)) {
record.setPayOrderStatus(EnumPayStatus.PAY_WAY_FAIL.getCode());
handlePayOrderStatusUpdate(record);
return new ResultData(Result.SUCCESS, "订单关闭成功", returnMap);
} else {
JSONObject errObj = errorMapClose.getJSONObject(result_code);
return new ResultData(ErrorCode.PAY_ORDER_ERROR.getCode(), errObj.toJSONString(), returnMap);
}
} catch (RuntimeException e) {
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
} catch (Exception e){
throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), e.getMessage());
}
}


/**
* 提供微信支付回调调用


Laden…
Abbrechen
Speichern