Skip to content

Commit

Permalink
🎨 🐛 #1898 【公众号】微信商户电子发票代码规范化及优化,并修复设置商户联系方式参数问题
Browse files Browse the repository at this point in the history
  • Loading branch information
binarywang committed Dec 20, 2020
1 parent 06d45dc commit 1555011
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,26 @@
* <p>
* 流程文档: https://developers.weixin.qq.com/doc/offiaccount/WeChat_Invoice/E_Invoice/Vendor_and_Invoicing_Platform_Mode_Instruction.html
* 接口文档: https://developers.weixin.qq.com/doc/offiaccount/WeChat_Invoice/E_Invoice/Vendor_API_List.html
*
* @author Mario Luo
*/
public interface WxMpMerchantInvoiceService {

/**
* 获取开票授权页链接
*
* @param params the params
* @return the auth page url
* @throws WxErrorException the wx error exception
*/
InvoiceAuthPageResult getAuthPageUrl(InvoiceAuthPageRequest params) throws WxErrorException;

/**
* 获得用户授权数据
*
* @param params the params
* @return the auth data
* @throws WxErrorException the wx error exception
*/
InvoiceAuthDataResult getAuthData(InvoiceAuthDataRequest params) throws WxErrorException;

Expand All @@ -32,16 +42,25 @@ public interface WxMpMerchantInvoiceService {
* <p>
* 场景: 用户授权填写数据无效
* 结果: 用户会收到一条开票失败提示
*
* @param params the params
* @throws WxErrorException the wx error exception
*/
void rejectInvoice(InvoiceRejectRequest params) throws WxErrorException;

/**
* 开具电子发票
*
* @param params the params
* @throws WxErrorException the wx error exception
*/
void makeOutInvoice(MakeOutInvoiceRequest params) throws WxErrorException;

/**
* 发票冲红
*
* @param params the params
* @throws WxErrorException the wx error exception
*/
void clearOutInvoice(ClearOutInvoiceRequest params) throws WxErrorException;

Expand All @@ -50,36 +69,57 @@ public interface WxMpMerchantInvoiceService {
*
* @param fpqqlsh 发票请求流水号
* @param nsrsbh 纳税人识别号
* @return the invoice result
* @throws WxErrorException the wx error exception
*/
InvoiceResult queryInvoiceInfo(String fpqqlsh, String nsrsbh) throws WxErrorException;

/**
* 设置商户联系方式, 获取授权链接前需要设置商户联系信息
*
* @param contact the contact
* @throws WxErrorException the wx error exception
*/
void setMerchantContactInfo(MerchantContactInfo contact) throws WxErrorException;

/**
* 获取商户联系方式
*
* @return the merchant contact info
* @throws WxErrorException the wx error exception
*/
MerchantContactInfo getMerchantContactInfo() throws WxErrorException;

/**
* 配置授权页面字段
*
* @param authPageSetting the auth page setting
* @throws WxErrorException the wx error exception
*/
void setAuthPageSetting(InvoiceAuthPageSetting authPageSetting) throws WxErrorException;

/**
* 获取授权页面配置
*
* @return the auth page setting
* @throws WxErrorException the wx error exception
*/
InvoiceAuthPageSetting getAuthPageSetting() throws WxErrorException;

/**
* 设置商户开票平台信息
*
* @param merchantInvoicePlatformInfo the merchant invoice platform info
* @throws WxErrorException the wx error exception
*/
void setMerchantInvoicePlatform(MerchantInvoicePlatformInfo merchantInvoicePlatformInfo) throws WxErrorException;

/**
* 获取商户开票平台信息
*
* @param merchantInvoicePlatformInfo the merchant invoice platform info
* @return the merchant invoice platform
* @throws WxErrorException the wx error exception
*/
MerchantInvoicePlatformInfo getMerchantInvoicePlatform(MerchantInvoicePlatformInfo merchantInvoicePlatformInfo) throws WxErrorException;
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package me.chanjar.weixin.mp.api.impl;

import com.google.gson.FieldNamingPolicy;
import com.google.common.collect.ImmutableMap;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import lombok.AllArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException;
Expand All @@ -11,96 +10,85 @@
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.invoice.merchant.*;
import me.chanjar.weixin.mp.enums.WxMpApiUrl;
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;

import java.util.HashMap;
import java.util.Map;

import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Invoice.*;


/**
* @author Mario Luo
*/
@AllArgsConstructor
public class WxMpMerchantInvoiceServiceImpl implements WxMpMerchantInvoiceService {

private WxMpService wxMpService;
private WxMpCardService wxMpCardService;

private final static Gson gson;

static {
gson = new GsonBuilder()
.disableHtmlEscaping()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create();
}
private final WxMpService wxMpService;
private final WxMpCardService wxMpCardService;

@Override
public InvoiceAuthPageResult getAuthPageUrl(InvoiceAuthPageRequest params) throws WxErrorException {
String ticket = wxMpCardService.getCardApiTicket();
params.setTicket(ticket);
return doCommonInvoiceHttpPost(GET_AUTH_URL, params, InvoiceAuthPageResult.class);
return this.doCommonInvoiceHttpPost(GET_AUTH_URL, params, InvoiceAuthPageResult.class);
}

@Override
public InvoiceAuthDataResult getAuthData(InvoiceAuthDataRequest params) throws WxErrorException {
return doCommonInvoiceHttpPost(GET_AUTH_DATA, params, InvoiceAuthDataResult.class);
return this.doCommonInvoiceHttpPost(GET_AUTH_DATA, params, InvoiceAuthDataResult.class);
}

@Override
public void rejectInvoice(InvoiceRejectRequest params) throws WxErrorException {
doCommonInvoiceHttpPost(REJECT_INSERT, params, null);
this.doCommonInvoiceHttpPost(REJECT_INSERT, params, null);
}

@Override
public void makeOutInvoice(MakeOutInvoiceRequest params) throws WxErrorException {
doCommonInvoiceHttpPost(MAKE_OUT_INVOICE, params, null);
this.doCommonInvoiceHttpPost(MAKE_OUT_INVOICE, params, null);
}

@Override
public void clearOutInvoice(ClearOutInvoiceRequest params) throws WxErrorException {
doCommonInvoiceHttpPost(CLEAR_OUT_INVOICE, params, null);
this.doCommonInvoiceHttpPost(CLEAR_OUT_INVOICE, params, null);
}

@Override
public InvoiceResult queryInvoiceInfo(String fpqqlsh, String nsrsbh) throws WxErrorException {
Map data = new HashMap();
data.put("fpqqlsh", fpqqlsh);
data.put("nsrsbh", nsrsbh);
return doCommonInvoiceHttpPost(QUERY_INVOICE_INFO, data, InvoiceResult.class);
Map<String, String> data = ImmutableMap.of("fpqqlsh", fpqqlsh, "nsrsbh", nsrsbh);
return this.doCommonInvoiceHttpPost(QUERY_INVOICE_INFO, data, InvoiceResult.class);
}

@Override
public void setMerchantContactInfo(MerchantContactInfo contact) throws WxErrorException {
MerchantContactInfoWrapper data = new MerchantContactInfoWrapper();
data.setContact(contact);
doCommonInvoiceHttpPost(SET_CONTACT_SET_BIZ_ATTR, data, null);
this.doCommonInvoiceHttpPost(SET_CONTACT_SET_BIZ_ATTR, new MerchantContactInfoWrapper(contact), null);
}

@Override
public MerchantContactInfo getMerchantContactInfo() throws WxErrorException {
MerchantContactInfoWrapper merchantContactInfoWrapper = doCommonInvoiceHttpPost(GET_CONTACT_SET_BIZ_ATTR, null, MerchantContactInfoWrapper.class);
MerchantContactInfoWrapper merchantContactInfoWrapper = this.doCommonInvoiceHttpPost(GET_CONTACT_SET_BIZ_ATTR, null, MerchantContactInfoWrapper.class);
return merchantContactInfoWrapper == null ? null : merchantContactInfoWrapper.getContact();
}

@Override
public void setAuthPageSetting(InvoiceAuthPageSetting authPageSetting) throws WxErrorException {
doCommonInvoiceHttpPost(SET_AUTH_FIELD_SET_BIZ_ATTR, authPageSetting, null);
this.doCommonInvoiceHttpPost(SET_AUTH_FIELD_SET_BIZ_ATTR, authPageSetting, null);
}

@Override
public InvoiceAuthPageSetting getAuthPageSetting() throws WxErrorException {
return doCommonInvoiceHttpPost(GET_AUTH_FIELD_SET_BIZ_ATTR, new JsonObject(), InvoiceAuthPageSetting.class);
return this.doCommonInvoiceHttpPost(GET_AUTH_FIELD_SET_BIZ_ATTR, new JsonObject(), InvoiceAuthPageSetting.class);
}

@Override
public void setMerchantInvoicePlatform(MerchantInvoicePlatformInfo paymchInfo) throws WxErrorException {
MerchantInvoicePlatformInfoWrapper data = new MerchantInvoicePlatformInfoWrapper();
data.setPaymchInfo(paymchInfo);
doCommonInvoiceHttpPost(SET_PAY_MCH_SET_BIZ_ATTR, data, null);
this.doCommonInvoiceHttpPost(SET_PAY_MCH_SET_BIZ_ATTR, data, null);
}

@Override
public MerchantInvoicePlatformInfo getMerchantInvoicePlatform(MerchantInvoicePlatformInfo merchantInvoicePlatformInfo) throws WxErrorException {
MerchantInvoicePlatformInfoWrapper result = doCommonInvoiceHttpPost(GET_PAY_MCH_SET_BIZ_ATTR, new JsonObject(), MerchantInvoicePlatformInfoWrapper.class);
MerchantInvoicePlatformInfoWrapper result = this.doCommonInvoiceHttpPost(GET_PAY_MCH_SET_BIZ_ATTR, new JsonObject(), MerchantInvoicePlatformInfoWrapper.class);
return result == null ? null : result.getPaymchInfo();
}

Expand All @@ -109,11 +97,15 @@ public MerchantInvoicePlatformInfo getMerchantInvoicePlatform(MerchantInvoicePla
*/
private <T> T doCommonInvoiceHttpPost(WxMpApiUrl url, Object data, Class<T> resultClass) throws WxErrorException {
String json = "";
final Gson gson = WxMpGsonBuilder.create();
if (data != null) {
json = gson.toJson(data);
}
String responseText = wxMpService.post(url, json);
if (resultClass == null) return null;
if (resultClass == null) {
return null;
}

return gson.fromJson(responseText, resultClass);
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
package me.chanjar.weixin.mp.bean.invoice.merchant;

import com.google.gson.annotations.SerializedName;
import lombok.Data;

import java.io.Serializable;

/**
* 商户联系信息
*
* @author Mario Luo
*/
@Data
public class MerchantContactInfo implements Serializable {
private static final long serialVersionUID = -2008465944249686100L;

/**
* 联系电话
*/
Expand All @@ -17,6 +22,7 @@ public class MerchantContactInfo implements Serializable {
/**
* 开票超时时间
*/
@SerializedName("time_out")
private Integer timeout;

}
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
package me.chanjar.weixin.mp.bean.invoice.merchant;

import lombok.AllArgsConstructor;
import lombok.Data;

import java.io.Serializable;

/**
* 设置商户联系信息和发票过时时间参数
*
* @author Mario Luo
*/
@Data
@AllArgsConstructor
public class MerchantContactInfoWrapper implements Serializable {
private static final long serialVersionUID = -5377979396495452212L;

private MerchantContactInfo contact;


}

0 comments on commit 1555011

Please sign in to comment.