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

[分账完结][新增]

release_toaliyun_real
Stormeye Wu 7 лет назад
Родитель
Сommit
6f82e4bfde
3 измененных файлов: 162 добавлений и 6 удалений
  1. +114
    -0
      mallinkService/src/main/java/com/iformall/pay/WxProfitSharingFinishP.java
  2. +1
    -1
      mallinkService/src/main/java/com/iformall/pay/WxProfitSharingP.java
  3. +47
    -5
      mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java

+ 114
- 0
mallinkService/src/main/java/com/iformall/pay/WxProfitSharingFinishP.java Просмотреть файл

@@ -0,0 +1,114 @@
package com.iformall.pay;

import java.io.Serializable;

/**
* Created by Peng on 2018/8/10.
*/
public class WxProfitSharingFinishP implements Serializable {
private static final long serialVersionUID = 1L;

private String mch_id; // 商户号
private String sub_mch_id; // 子商户号
private String appid; // 公众账号ID
private String nonce_str; // 随机字符串
private String sign; // 签名
private String sign_type; // 签名方法
private String transaction_id ; // 支付订单号
private String out_order_no; // 商户订单号
private Integer amount; // 商户分账金额
private String description; // 分账完结的原因描述

public String getMch_id() {
return mch_id;
}

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

public String getSub_mch_id() { return sub_mch_id; }

public void setSub_mch_id(String sub_mch_id) {
this.sub_mch_id = sub_mch_id;
}

public String getAppid() {
return appid;
}

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

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 getSign_type() {
return sign_type;
}

public void setSign_type(String sign_type) {
this.sign_type = sign_type;
}
public String getTransaction_id() {
return transaction_id;
}

public void setTransaction_id(String transaction_id) {
this.transaction_id = transaction_id;
}

public String getOut_order_no() { return out_order_no; }

public void setOut_order_no(String out_order_no) {
this.out_order_no = out_order_no;
}

public Integer getAmount() {
return amount;
}

public void setAmount(Integer amount) {
this.amount = amount;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

@Override
public String toString() {
final StringBuilder sb = new StringBuilder("WxProfitSharingFinishP{");
sb.append("mch_id='").append(mch_id).append('\'');
sb.append(", sub_mch_id='").append(sub_mch_id).append('\'');
sb.append(", appid='").append(appid).append('\'');
sb.append(", nonce_str='").append(nonce_str).append('\'');
sb.append(", sign='").append(sign).append('\'');
sb.append(", sign_type='").append(sign_type).append('\'');
sb.append(", transaction_id='").append(transaction_id).append('\'');
sb.append(", out_order_no='").append(out_order_no).append('\'');
sb.append(", amount='").append(amount).append('\'');
sb.append(", description='").append(description).append('\'');
sb.append('}');
return sb.toString();
}

}

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

@@ -96,7 +96,7 @@ public class WxProfitSharingP implements Serializable {

@Override
public String toString() {
final StringBuilder sb = new StringBuilder("WxPayOrderSQ{");
final StringBuilder sb = new StringBuilder("WxProfitSharingP{");
sb.append("appid='").append(appid).append('\'');
sb.append(", sub_appid='").append(sub_appid).append('\'');
sb.append(", mch_id='").append(mch_id).append('\'');


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

@@ -13,10 +13,7 @@ import com.iformall.domain.po.*;
import com.iformall.enums.*;
import com.iformall.exception.MallinkException;
import com.iformall.mapper.*;
import com.iformall.pay.WxPayment;
import com.iformall.pay.WxProfitSharing;
import com.iformall.pay.WxProfitSharingP;
import com.iformall.pay.WxProfitSharingQueryP;
import com.iformall.pay.*;
import com.iformall.service.WxProfitSharingOrderService;
import com.iformall.utils.BeanUtils;
import com.iformall.utils.Utility;
@@ -137,6 +134,7 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
}

@Override
@Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class})
public ResultData createSharingOrder(WxPayOrder wxPayOrder, Long merchantId) {
//添加分账接受方
WxProfitSharingReceiver psReceiverQ = new WxProfitSharingReceiver();
@@ -152,7 +150,6 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
return createPSOrder(wxPayOrder, merchantId, psReceiverList, false);
}

@Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class})
private ResultData createPSOrder(WxPayOrder wxPayOrder, Long merchantId, List<WxProfitSharingReceiver> psReceiverList, boolean multiCmd) {
final IdWorker idworker = IdWorker.get();

@@ -416,4 +413,49 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
}
return new ResultData(returnMap);
}

// 分账完结
private ResultData finishPSOrder(WxPayOrder wxPayOrder) {
WxAppinfo appInfo = getAppinfo(wxPayOrder);
WxPayAccount payAccount = wxPayAccountMapper.selectByPrimaryKey(appInfo.getPayId());

WxOrder wxOrder = wxOrderMapper.selectByPrimaryKey(wxPayOrder.getOrderId());

//分账提交
WxProfitSharingFinishP psFCmd = new WxProfitSharingFinishP();
psFCmd.setMch_id(payAccount.getMchId());
psFCmd.setSub_mch_id(payAccount.getSubMchId());
psFCmd.setAppid(appInfo.getParentAppId());
psFCmd.setNonce_str(Utility.generate32UUID());
psFCmd.setTransaction_id(wxPayOrder.getTransactionId());
psFCmd.setOut_order_no(wxPayOrder.getId().toString());
psFCmd.setSign_type("HMAC-SHA256");

String response;
try {
psFCmd.setSign(WxPayment.createSignHMAC(BeanUtils.toStringMap(psFCmd), payAccount.getApiKey()));
response = WxProfitSharing.finishOrder(BeanUtils.toStringMap(psFCmd), payAccount.getCertPath(), payAccount.getMchId());
} catch (Exception e) {
return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED);
}

logger.info("response: " + response);
Map<String, String> returnMap = WxPayment.xmlToMap(response);
String return_code = returnMap.get("return_code");

if (!"SUCCESS".equals(return_code)) {
return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(), returnMap.get("return_msg"));
}

if (!WxPayment.verifyNotifyHMAC(returnMap,payAccount.getApiKey())){
return new ResultData(ErrorCode.PROFIT_SHARING_RETURN_INVALID.getCode());
}

String result_code = returnMap.get("result_code");
if (!"SUCCESS".equals(result_code)) {
return new ResultData(ErrorCode.PROFIT_SHARING_APPLY_FAILED.getCode(), returnMap.get("err_code_des"));
}

return new ResultData(returnMap);
}
}

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