All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.binarywang.wxpay.bean.result.WxWithholdNotifyResult Maven / Gradle / Ivy

The newest version!
package com.github.binarywang.wxpay.bean.result;

import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyCoupon;
import com.github.binarywang.wxpay.constant.WxPayConstants;
import com.github.binarywang.wxpay.converter.WxPayOrderNotifyResultConverter;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.util.SignUtils;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
import me.chanjar.weixin.common.util.xml.XStreamInitializer;
import org.w3c.dom.Document;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author chenliang
 * created on  2021-08-02 5:09 下午
 *
 * 
 *   微信代扣扣款回调结果
 * 
*/ @Data @EqualsAndHashCode(callSuper = true) @NoArgsConstructor @XStreamAlias("xml") public class WxWithholdNotifyResult extends BaseWxPayResult { private static final long serialVersionUID = 1L; /** * 设备号 * 非必传 */ @XStreamAlias("device_info") private String deviceInfo; /** * 用户标识 */ @XStreamAlias("openid") private String openId; /** * 用户子标识 * 非必传 */ @XStreamAlias("sub_openid") private String subOpenId; /** * 是否关注公众号 * 非必传 */ @XStreamAlias("is_subscribe") private String isSubscribe; /** * 是否关注子商户关联的公众号 * 非必传 */ @XStreamAlias("sub_is_subscribe") private String subIsSubscribe; /** * 付款银行 */ @XStreamAlias("bank_type") private String bankType; /** * 总金额 */ @XStreamAlias("total_fee") private Integer totalFee; /** * 货币类型 * 非必传 */ @XStreamAlias("fee_type") private String feeType; /** * 现金支付金额 */ @XStreamAlias("cash_fee") private Integer cashFee; /** * 现金支付货币类型 * 非必传 */ @XStreamAlias("cash_fee_type") private String cashFeeType; /** * 交易状态 * SUCCESS : 支付成功,REFUND:转入退款,NOTPAY:未支付,CLOSED:已关闭,ACCEPT:已接收,PAY_FAIL:支付失败 */ @XStreamAlias("trade_state") private String tradeState; /** * 代金券或立减优惠金额 * 非必传 */ @XStreamAlias("coupon_fee") private Integer couponFee; /** * 代金券或立减优惠使用数量 */ @XStreamAlias("coupon_count") private Integer couponCount; private List couponList; /** * 微信支付单号 */ @XStreamAlias("transaction_id") private String transactionId; /** * 商户订单号 */ @XStreamAlias("out_trade_no") private String outTradeNo; /** * 商家数据包 */ @XStreamAlias("attach") private String attach; /** * 支付完成时间 */ @XStreamAlias("time_end") private String timeEnd; /** * 委托代扣协议ID */ @XStreamAlias("contract_id") private String contractId; @Override public void checkResult(WxPayService wxPayService, String signType, boolean checkSuccess) throws WxPayException { //防止伪造成功通知 if (WxPayConstants.ResultCode.SUCCESS.equals(getReturnCode()) && getSign() == null) { throw new WxPayException("伪造的通知!"); } super.checkResult(wxPayService, signType, checkSuccess); } /** * From xml wx withhold notify result. * * @param xmlString the xml string * @return the wx withhold result */ public static WxWithholdNotifyResult fromXML(String xmlString) { XStream xstream = XStreamInitializer.getInstance(); xstream.processAnnotations(WxWithholdNotifyResult.class); xstream.registerConverter(new WxPayOrderNotifyResultConverter(xstream.getMapper(), xstream.getReflectionProvider())); WxWithholdNotifyResult result = (WxWithholdNotifyResult) xstream.fromXML(xmlString); result.setXmlString(xmlString); return result; } @Override public Map toMap() { Map resultMap = SignUtils.xmlBean2Map(this); if (this.getCouponCount() != null && this.getCouponCount() > 0) { for (int i = 0; i < this.getCouponCount(); i++) { WxPayOrderNotifyCoupon coupon = couponList.get(i); resultMap.putAll(coupon.toMap(i)); } } return resultMap; } @Override protected void loadXml(Document d) { deviceInfo = readXmlString(d, "device_info"); openId = readXmlString(d, "openid"); isSubscribe = readXmlString(d, "is_subscribe"); subIsSubscribe = readXmlString(d, "sub_is_subscribe"); subOpenId = readXmlString(d, "sub_openid"); bankType = readXmlString(d, "bank_type"); totalFee = readXmlInteger(d, "total_fee"); feeType = readXmlString(d, "fee_type"); cashFee = readXmlInteger(d, "cash_fee"); cashFeeType = readXmlString(d, "cash_fee_type"); couponFee = readXmlInteger(d, "coupon_fee"); couponCount = readXmlInteger(d, "coupon_count"); transactionId = readXmlString(d, "transaction_id"); outTradeNo = readXmlString(d, "out_trade_no"); attach = readXmlString(d, "attach"); timeEnd = readXmlString(d, "time_end"); tradeState = readXmlString(d, "trade_state"); contractId = readXmlString(d, "contract_id"); composeCoupons(); } /** * 通过xml组装couponList属性内容. */ protected void composeCoupons() { if (this.couponCount == null || this.couponCount == 0) { return; } this.couponList = new ArrayList(couponCount); for (int i = 0; i < this.couponCount; i++) { WxPayOrderNotifyCoupon coupon = new WxPayOrderNotifyCoupon(); coupon.setCouponId(this.getXmlValue("xml/coupon_id_" + i)); coupon.setCouponType(this.getXmlValue("xml/coupon_type_" + i)); coupon.setCouponFee(this.getXmlValueAsInt("xml/coupon_fee_" + i)); couponList.add(coupon); } } @Override public String toString() { return WxGsonBuilder.create().toJson(this); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy