Skip to content

Commit

Permalink
🆕 Wechat-Group#2135 【小程序】实现获取 URL Link接口 以及微信电子发票报销方相关接口
Browse files Browse the repository at this point in the history
  • Loading branch information
mr-xiaoyu authored and hywr committed Jun 23, 2021
1 parent a736621 commit d1e8fe3
Show file tree
Hide file tree
Showing 18 changed files with 924 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package cn.binarywang.wx.miniapp.api;


import cn.binarywang.wx.miniapp.bean.urllink.GenerateUrlLinkRequest;
import me.chanjar.weixin.common.error.WxErrorException;

/**
* 获取小程序 URL Link接口
* 接口文档: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-link/urllink.generate.html
* @author <a href="https://github.com/mr-xiaoyu">xiaoyu</a>
* @since 2021-06-10
*/
public interface WxMaLinkService {

String generate(GenerateUrlLinkRequest request) throws WxErrorException;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package cn.binarywang.wx.miniapp.api;

import cn.binarywang.wx.miniapp.bean.invoice.reimburse.*;
import me.chanjar.weixin.common.error.WxErrorException;

import java.util.List;

/**
* 电子发票报销方相关接口
* 接口文档: https://developers.weixin.qq.com/doc/offiaccount/WeChat_Invoice/E_Invoice/Reimburser_API_List.html
* @author <a href="https://github.com/mr-xiaoyu">xiaoyu</a>
* @since 2021-06-10
*/
public interface WxMaReimburseInvoiceService {

/**
* 查询报销发票信息
* @param request {@link InvoiceInfoRequest} 查询报销发票信息参数
* @return {@link InvoiceInfoResponse} 查询结果
* @throws WxErrorException 查询失败时
*/
InvoiceInfoResponse getInvoiceInfo(InvoiceInfoRequest request) throws WxErrorException;


/**
* 批量查询报销发票信息
* @param request {@link InvoiceBatchRequest} 批量查询报销发票信息参数对象
* @return {@link InvoiceInfoResponse} 查询结果列表
* @throws WxErrorException 查询失败时
*/
List<InvoiceInfoResponse> getInvoiceBatch(InvoiceBatchRequest request) throws WxErrorException;


/**
* 更新发票状态
* @param request {@link UpdateInvoiceStatusRequest} 更新发票状态参数
* @throws WxErrorException 更新失败时
*/
void updateInvoiceStatus(UpdateInvoiceStatusRequest request) throws WxErrorException;


/**
* 批量更新发票状态
* @param request {@link UpdateStatusBatchRequest} 批量更新发票状态参数
* @throws WxErrorException 更新失败时
*/
void updateStatusBatch(UpdateStatusBatchRequest request) throws WxErrorException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -402,4 +402,16 @@ public interface WxMaService extends WxService {
* @return
*/
WxMaShopSpuService getShopSpuService();

/**
* 获取小程序 URL Link服务接口
* @return
*/
WxMaLinkService getLinkService();

/**
* 获取电子发票报销方服务接口
* @return
*/
WxMaReimburseInvoiceService getReimburseInvoiceService();
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ public abstract class BaseWxMaServiceImpl<H, P> implements WxMaService, RequestH
private final WxImgProcService imgProcService = new WxMaImgProcServiceImpl(this);
private final WxMaShopSpuService shopSpuService = new WxMaShopSpuServiceImpl(this);
private final WxMaShopOrderService shopOrderService = new WxMaShopOrderServiceImpl(this);
private final WxMaLinkService linkService = new WxMaLinkServiceImpl(this);
private final WxMaReimburseInvoiceService reimburseInvoiceService = new WxMaReimburseInvoiceServiceImpl(this);
private Map<String, WxMaConfig> configMap;
private int retrySleepMillis = 1000;
private int maxRetryTimes = 5;
Expand Down Expand Up @@ -512,4 +514,14 @@ public WxMaShopSpuService getShopSpuService() {
public WxMaShopOrderService getShopOrderService() {
return this.shopOrderService;
}

@Override
public WxMaLinkService getLinkService() {
return this.linkService;
}

@Override
public WxMaReimburseInvoiceService getReimburseInvoiceService() {
return this.reimburseInvoiceService;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package cn.binarywang.wx.miniapp.api.impl;

import cn.binarywang.wx.miniapp.api.WxMaLinkService;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.urllink.GenerateUrlLinkRequest;
import com.google.gson.JsonObject;
import lombok.AllArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.util.json.GsonParser;
import me.chanjar.weixin.common.util.json.WxGsonBuilder;

import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.Link.GENERATE_URLLINK_URL;

/**
* 获取小程序 URL Link接口实现
* 接口文档: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-link/urllink.generate.html
* @author <a href="https://github.com/mr-xiaoyu">xiaoyu</a>
* @since 2021-06-10
*/
@AllArgsConstructor
public class WxMaLinkServiceImpl implements WxMaLinkService {

private final WxMaService wxMaService;

@Override
public String generate(GenerateUrlLinkRequest request) throws WxErrorException {
String result = this.wxMaService.post(GENERATE_URLLINK_URL,request);
String linkField = "url_link";
JsonObject jsonObject = GsonParser.parse(result);
if(jsonObject.has(linkField)){
return jsonObject.get(linkField).toString();
}
throw new WxErrorException("无url_link");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package cn.binarywang.wx.miniapp.api.impl;

import cn.binarywang.wx.miniapp.api.WxMaReimburseInvoiceService;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.invoice.reimburse.*;
import lombok.AllArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException;

import java.util.List;

import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.Invoice.*;

/**
* 电子发票报销方相关接口实现
* 接口文档: https://developers.weixin.qq.com/doc/offiaccount/WeChat_Invoice/E_Invoice/Reimburser_API_List.html
* @author <a href="https://github.com/mr-xiaoyu">xiaoyu</a>
* @since 2021-06-10
*/
@AllArgsConstructor
public class WxMaReimburseInvoiceServiceImpl implements WxMaReimburseInvoiceService {

private final WxMaService wxMaService;

@Override
public InvoiceInfoResponse getInvoiceInfo(InvoiceInfoRequest request) throws WxErrorException {
return InvoiceInfoResponse.fromJson(this.wxMaService.post(GET_INVOICE_INFO,request.toJson()));
}

@Override
public List<InvoiceInfoResponse> getInvoiceBatch(InvoiceBatchRequest request) throws WxErrorException {
return InvoiceInfoResponse.toList(this.wxMaService.post(GET_INVOICE_BATCH,request.toJson()));
}

@Override
public void updateInvoiceStatus(UpdateInvoiceStatusRequest request) throws WxErrorException {
this.wxMaService.post(UPDATE_INVOICE_STATUS,request.toJson());
}

@Override
public void updateStatusBatch(UpdateStatusBatchRequest request) throws WxErrorException {
this.wxMaService.post(UPDATE_STATUS_BATCH,request.toJson());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package cn.binarywang.wx.miniapp.bean.invoice.reimburse;

import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

/**
* <pre>
* 批量查询报销发票信息参数对象
* </pre>
* @author <a href="https://github.com/mr-xiaoyu">xiaoyu</a>
* @since 2021-03-23
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class InvoiceBatchRequest implements Serializable {

private static final long serialVersionUID = -9121443117105107231L;

/**
* 发票卡券的card_id
* <pre>
* 是否必填: 是
* </pre>
*/
@SerializedName("item_list")
private List<InvoiceInfoRequest> itemList;


public String toJson() {
return WxMaGsonBuilder.create().toJson(this);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package cn.binarywang.wx.miniapp.bean.invoice.reimburse;

import lombok.Data;

/**
* <pre>
* 发票商品信息
* </pre>
* @author <a href="https://github.com/mr-xiaoyu">xiaoyu</a>
* @since 2021-03-23
*/
@Data
public class InvoiceCommodityInfo {

/**
* 项目(商品)名称
*/
private String name;

/**
* 项目数量
*/
private Integer num;

/**
* 项目单位
*/
private String unit;

/**
* 单价,以分为单位
*/
private Integer price;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package cn.binarywang.wx.miniapp.bean.invoice.reimburse;


import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
* <pre>
* 查询报销发票信息参数对象
* </pre>
* @author <a href="https://github.com/mr-xiaoyu">xiaoyu</a>
* @since 2021-03-23
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class InvoiceInfoRequest implements Serializable {

private static final long serialVersionUID = 7854633127026139444L;


/**
* 发票卡券的card_id
* <pre>
* 是否必填: 是
* </pre>
*/
@SerializedName("card_id")
private String cardId;


/**
* 发票卡券的加密code,和card_id共同构成一张发票卡券的唯一标识
* <pre>
* 是否必填: 是
* </pre>
*/
@SerializedName("encrypt_code")
private String encryptCode;



public String toJson() {
return WxMaGsonBuilder.create().toJson(this);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package cn.binarywang.wx.miniapp.bean.invoice.reimburse;

import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder;
import com.google.gson.JsonObject;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;
import lombok.Data;
import me.chanjar.weixin.common.util.json.GsonParser;

import java.util.List;

/**
* <pre>
* 查询报销发票信息响应对象
* </pre>
* @author <a href="https://github.com/mr-xiaoyu">xiaoyu</a>
* @since 2021-03-23
*/
@Data
public class InvoiceInfoResponse {

/**
* 发票ID
*/
@SerializedName("card_id")
private String cardId;


/**
* 发票的有效期起始时间
*/
@SerializedName("begin_time")
private Integer beginTime;

/**
* 发票的有效期截止时间
*/
@SerializedName("end_time")
private Integer endTime;

/**
* 用户标识
*/
private String openid;

/**
* 发票的类型
*/
private String type;

/**
* 发票的收款方
*/
private String payee;

/**
* 发票详情
*/
private String detail;

/**
* 用户可在发票票面看到的主要信息
*/
@SerializedName("user_info")
private InvoiceUserInfo userInfo;


public static InvoiceInfoResponse fromJson(String json) {
return WxMaGsonBuilder.create().fromJson(json, InvoiceInfoResponse.class);
}


public static List<InvoiceInfoResponse> toList(String json) {
JsonObject jsonObject = GsonParser.parse(json);
return WxMaGsonBuilder.create().fromJson(jsonObject.get("item_list").toString(),
new TypeToken<List<InvoiceInfoResponse>>() {
}.getType());
}
}
Loading

0 comments on commit d1e8fe3

Please sign in to comment.