🆕 #1527 微信小程序增加OCR身份证识别和银行卡识别等接口

This commit is contained in:
Binary Wang
2020-07-05 21:32:50 +08:00
parent b75569498c
commit 978ada7373
25 changed files with 756 additions and 176 deletions

View File

@ -1,131 +0,0 @@
package me.chanjar.weixin.mp.api;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrBankCardResult;
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrBizLicenseResult;
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrCommResult;
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrDrivingLicenseResult;
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrDrivingResult;
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrIdCardResult;
import java.io.File;
/**
* 基于小程序或 H5 的身份证、银行卡、行驶证 OCR 识别.
* https://mp.weixin.qq.com/wiki?t=resource/res_main&id=21516712284rHWMX
*
* @author <a href="https://github.com/binarywang">Binary Wang</a>
* @date 2019-06-22
*/
public interface WxMpOcrService {
/**
* 身份证OCR识别接口.
*
* @param imgUrl 图片url地址
* @return WxMpOcrIdCardResult
* @throws WxErrorException .
*/
WxMpOcrIdCardResult idCard(String imgUrl) throws WxErrorException;
/**
* 身份证OCR识别接口.
*
* @param imgFile 图片文件对象
* @return WxMpOcrIdCardResult
* @throws WxErrorException .
*/
WxMpOcrIdCardResult idCard(File imgFile) throws WxErrorException;
/**
* 银行卡OCR识别接口
* 文件大小限制小于2M
* @param imgUrl 图片url地址
* @return WxMpOcrBankCardResult
* @throws WxErrorException .
*/
WxMpOcrBankCardResult bankCard(String imgUrl) throws WxErrorException;
/**
* 银行卡OCR识别接口
* 文件大小限制小于2M
* @param imgFile 图片文件对象
* @return WxMpOcrBankCardResult
* @throws WxErrorException .
*/
WxMpOcrBankCardResult bankCard(File imgFile) throws WxErrorException;
/**
* 行驶证OCR识别接口
* 文件大小限制小于2M
* @param imgUrl 图片url地址
* @return WxMpOcrDrivingResult
* @throws WxErrorException .
*/
WxMpOcrDrivingResult driving(String imgUrl) throws WxErrorException;
/**
* 行驶证OCR识别接口
* 文件大小限制小于2M
* @param imgFile 图片文件对象
* @return WxMpOcrDrivingResult
* @throws WxErrorException .
*/
WxMpOcrDrivingResult driving(File imgFile) throws WxErrorException;
/**
* 驾驶证OCR识别接口
* 文件大小限制小于2M
* @param imgUrl 图片url地址
* @return WxMpOcrDrivingLicenseResult
* @throws WxErrorException .
*/
WxMpOcrDrivingLicenseResult drivingLicense(String imgUrl) throws WxErrorException;
/**
* 驾驶证OCR识别接口
* 文件大小限制小于2M
* @param imgFile 图片文件对象
* @return WxMpOcrDrivingLicenseResult
* @throws WxErrorException .
*/
WxMpOcrDrivingLicenseResult drivingLicense(File imgFile) throws WxErrorException;
/**
* 营业执照OCR识别接口
* 文件大小限制小于2M
* @param imgUrl 图片url地址
* @return WxMpOcrBizLicenseResult
* @throws WxErrorException .
*/
WxMpOcrBizLicenseResult bizLicense(String imgUrl) throws WxErrorException;
/**
* 营业执照OCR识别接口
* 文件大小限制小于2M
* @param imgFile 图片文件对象
* @return WxMpOcrBizLicenseResult
* @throws WxErrorException .
*/
WxMpOcrBizLicenseResult bizLicense(File imgFile) throws WxErrorException;
/**
* 通用印刷体OCR识别接口
* 文件大小限制小于2M
* 适用于屏幕截图、印刷体照片等场景
* @param imgUrl 图片url地址
* @return WxMpOcrCommResult
* @throws WxErrorException .
*/
WxMpOcrCommResult comm(String imgUrl) throws WxErrorException;
/**
* 通用印刷体OCR识别接口
* 文件大小限制小于2M
* 适用于屏幕截图、印刷体照片等场景
* @param imgFile 图片文件对象
* @return WxMpOcrCommResult
* @throws WxErrorException .
*/
WxMpOcrCommResult comm(File imgFile) throws WxErrorException;
}

View File

@ -1,5 +1,6 @@
package me.chanjar.weixin.mp.api;
import me.chanjar.weixin.common.api.WxOcrService;
import me.chanjar.weixin.common.bean.WxJsapiSignature;
import me.chanjar.weixin.common.bean.WxNetCheckResult;
import me.chanjar.weixin.common.error.WxErrorException;
@ -555,7 +556,7 @@ public interface WxMpService extends WxService {
*
* @return WxMpWifiService
*/
WxMpOcrService getOcrService();
WxOcrService getOcrService();
/**
* 返回图像处理接口的实现类对象,以方便调用其各个接口.
@ -688,7 +689,7 @@ public interface WxMpService extends WxService {
*
* @param ocrService .
*/
void setOcrService(WxMpOcrService ocrService);
void setOcrService(WxOcrService ocrService);
/**
* .

View File

@ -10,6 +10,7 @@ import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.WxType;
import me.chanjar.weixin.common.api.WxOcrService;
import me.chanjar.weixin.common.bean.WxAccessToken;
import me.chanjar.weixin.common.bean.WxJsapiSignature;
import me.chanjar.weixin.common.bean.WxNetCheckResult;
@ -70,7 +71,7 @@ public abstract class BaseWxMpServiceImpl<H, P> implements WxMpService, RequestH
private final WxMpWifiService wifiService = new WxMpWifiServiceImpl(this);
private WxMpMarketingService marketingService = new WxMpMarketingServiceImpl(this);
private WxMpCommentService commentService = new WxMpCommentServiceImpl(this);
private WxMpOcrService ocrService = new WxMpOcrServiceImpl(this);
private WxOcrService ocrService = new WxMpOcrServiceImpl(this);
private WxMpImgProcService imgProcService = new WxMpImgProcServiceImpl(this);
@Getter
@ -663,7 +664,7 @@ public abstract class BaseWxMpServiceImpl<H, P> implements WxMpService, RequestH
}
@Override
public WxMpOcrService getOcrService() {
public WxOcrService getOcrService() {
return this.ocrService;
}
@ -678,7 +679,7 @@ public abstract class BaseWxMpServiceImpl<H, P> implements WxMpService, RequestH
}
@Override
public void setOcrService(WxMpOcrService ocrService) {
public void setOcrService(WxOcrService ocrService) {
this.ocrService = ocrService;
}

View File

@ -2,14 +2,14 @@ package me.chanjar.weixin.mp.api.impl;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpOcrService;
import me.chanjar.weixin.common.api.WxOcrService;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrBankCardResult;
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrBizLicenseResult;
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrCommResult;
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrDrivingLicenseResult;
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrDrivingResult;
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrIdCardResult;
import me.chanjar.weixin.common.bean.ocr.WxOcrBankCardResult;
import me.chanjar.weixin.common.bean.ocr.WxOcrBizLicenseResult;
import me.chanjar.weixin.common.bean.ocr.WxOcrCommResult;
import me.chanjar.weixin.common.bean.ocr.WxOcrDrivingLicenseResult;
import me.chanjar.weixin.common.bean.ocr.WxOcrDrivingResult;
import me.chanjar.weixin.common.bean.ocr.WxOcrIdCardResult;
import me.chanjar.weixin.mp.util.requestexecuter.ocr.OcrDiscernRequestExecutor;
import java.io.File;
@ -37,11 +37,11 @@ import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Ocr.IDCARD;
* @date 2019-06-22
*/
@RequiredArgsConstructor
public class WxMpOcrServiceImpl implements WxMpOcrService {
public class WxMpOcrServiceImpl implements WxOcrService {
private final WxMpService mainService;
@Override
public WxMpOcrIdCardResult idCard(String imgUrl) throws WxErrorException {
public WxOcrIdCardResult idCard(String imgUrl) throws WxErrorException {
try {
imgUrl = URLEncoder.encode(imgUrl, StandardCharsets.UTF_8.name());
} catch (UnsupportedEncodingException e) {
@ -50,18 +50,18 @@ public class WxMpOcrServiceImpl implements WxMpOcrService {
final String result = this.mainService.get(String.format(IDCARD.getUrl(this.mainService.getWxMpConfigStorage()),
imgUrl), null);
return WxMpOcrIdCardResult.fromJson(result);
return WxOcrIdCardResult.fromJson(result);
}
@Override
public WxMpOcrIdCardResult idCard(File imgFile) throws WxErrorException {
public WxOcrIdCardResult idCard(File imgFile) throws WxErrorException {
String result = this.mainService.execute(OcrDiscernRequestExecutor.create(this.mainService.getRequestHttp()),
FILEIDCARD.getUrl(this.mainService.getWxMpConfigStorage()), imgFile);
return WxMpOcrIdCardResult.fromJson(result);
return WxOcrIdCardResult.fromJson(result);
}
@Override
public WxMpOcrBankCardResult bankCard(String imgUrl) throws WxErrorException {
public WxOcrBankCardResult bankCard(String imgUrl) throws WxErrorException {
try {
imgUrl = URLEncoder.encode(imgUrl, StandardCharsets.UTF_8.name());
} catch (UnsupportedEncodingException e) {
@ -70,18 +70,18 @@ public class WxMpOcrServiceImpl implements WxMpOcrService {
final String result = this.mainService.get(String.format(BANK_CARD.getUrl(this.mainService.getWxMpConfigStorage()),
imgUrl), null);
return WxMpOcrBankCardResult.fromJson(result);
return WxOcrBankCardResult.fromJson(result);
}
@Override
public WxMpOcrBankCardResult bankCard(File imgFile) throws WxErrorException {
public WxOcrBankCardResult bankCard(File imgFile) throws WxErrorException {
String result = this.mainService.execute(OcrDiscernRequestExecutor.create(this.mainService.getRequestHttp()),
FILE_BANK_CARD.getUrl(this.mainService.getWxMpConfigStorage()), imgFile);
return WxMpOcrBankCardResult.fromJson(result);
return WxOcrBankCardResult.fromJson(result);
}
@Override
public WxMpOcrDrivingResult driving(String imgUrl) throws WxErrorException {
public WxOcrDrivingResult driving(String imgUrl) throws WxErrorException {
try {
imgUrl = URLEncoder.encode(imgUrl, StandardCharsets.UTF_8.name());
} catch (UnsupportedEncodingException e) {
@ -90,18 +90,18 @@ public class WxMpOcrServiceImpl implements WxMpOcrService {
final String result = this.mainService.get(String.format(DRIVING.getUrl(this.mainService.getWxMpConfigStorage()),
imgUrl), null);
return WxMpOcrDrivingResult.fromJson(result);
return WxOcrDrivingResult.fromJson(result);
}
@Override
public WxMpOcrDrivingResult driving(File imgFile) throws WxErrorException {
public WxOcrDrivingResult driving(File imgFile) throws WxErrorException {
String result = this.mainService.execute(OcrDiscernRequestExecutor.create(this.mainService.getRequestHttp()),
FILE_DRIVING.getUrl(this.mainService.getWxMpConfigStorage()), imgFile);
return WxMpOcrDrivingResult.fromJson(result);
return WxOcrDrivingResult.fromJson(result);
}
@Override
public WxMpOcrDrivingLicenseResult drivingLicense(String imgUrl) throws WxErrorException {
public WxOcrDrivingLicenseResult drivingLicense(String imgUrl) throws WxErrorException {
try {
imgUrl = URLEncoder.encode(imgUrl, StandardCharsets.UTF_8.name());
} catch (UnsupportedEncodingException e) {
@ -110,18 +110,18 @@ public class WxMpOcrServiceImpl implements WxMpOcrService {
final String result = this.mainService.get(String.format(DRIVING_LICENSE.getUrl(this.mainService.getWxMpConfigStorage()),
imgUrl), null);
return WxMpOcrDrivingLicenseResult.fromJson(result);
return WxOcrDrivingLicenseResult.fromJson(result);
}
@Override
public WxMpOcrDrivingLicenseResult drivingLicense(File imgFile) throws WxErrorException {
public WxOcrDrivingLicenseResult drivingLicense(File imgFile) throws WxErrorException {
String result = this.mainService.execute(OcrDiscernRequestExecutor.create(this.mainService.getRequestHttp()),
FILE_DRIVING_LICENSE.getUrl(this.mainService.getWxMpConfigStorage()), imgFile);
return WxMpOcrDrivingLicenseResult.fromJson(result);
return WxOcrDrivingLicenseResult.fromJson(result);
}
@Override
public WxMpOcrBizLicenseResult bizLicense(String imgUrl) throws WxErrorException {
public WxOcrBizLicenseResult bizLicense(String imgUrl) throws WxErrorException {
try {
imgUrl = URLEncoder.encode(imgUrl, StandardCharsets.UTF_8.name());
} catch (UnsupportedEncodingException e) {
@ -130,18 +130,18 @@ public class WxMpOcrServiceImpl implements WxMpOcrService {
final String result = this.mainService.get(String.format(BIZ_LICENSE.getUrl(this.mainService.getWxMpConfigStorage()),
imgUrl), null);
return WxMpOcrBizLicenseResult.fromJson(result);
return WxOcrBizLicenseResult.fromJson(result);
}
@Override
public WxMpOcrBizLicenseResult bizLicense(File imgFile) throws WxErrorException {
public WxOcrBizLicenseResult bizLicense(File imgFile) throws WxErrorException {
String result = this.mainService.execute(OcrDiscernRequestExecutor.create(this.mainService.getRequestHttp()),
FILE_BIZ_LICENSE.getUrl(this.mainService.getWxMpConfigStorage()), imgFile);
return WxMpOcrBizLicenseResult.fromJson(result);
return WxOcrBizLicenseResult.fromJson(result);
}
@Override
public WxMpOcrCommResult comm(String imgUrl) throws WxErrorException {
public WxOcrCommResult comm(String imgUrl) throws WxErrorException {
try {
imgUrl = URLEncoder.encode(imgUrl, StandardCharsets.UTF_8.name());
} catch (UnsupportedEncodingException e) {
@ -150,13 +150,13 @@ public class WxMpOcrServiceImpl implements WxMpOcrService {
final String result = this.mainService.get(String.format(COMM.getUrl(this.mainService.getWxMpConfigStorage()),
imgUrl), null);
return WxMpOcrCommResult.fromJson(result);
return WxOcrCommResult.fromJson(result);
}
@Override
public WxMpOcrCommResult comm(File imgFile) throws WxErrorException {
public WxOcrCommResult comm(File imgFile) throws WxErrorException {
String result = this.mainService.execute(OcrDiscernRequestExecutor.create(this.mainService.getRequestHttp()),
FILE_COMM.getUrl(this.mainService.getWxMpConfigStorage()), imgFile);
return WxMpOcrCommResult.fromJson(result);
return WxOcrCommResult.fromJson(result);
}
}

View File

@ -1,28 +0,0 @@
package me.chanjar.weixin.mp.bean.ocr;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
import java.io.Serializable;
/**
* 银行卡OCR识别结果
* @author Theo Nie
*/
@Data
public class WxMpOcrBankCardResult implements Serializable {
private static final long serialVersionUID = 554136620394204143L;
@SerializedName("number")
private String number;
@Override
public String toString() {
return WxMpGsonBuilder.create().toJson(this);
}
public static WxMpOcrBankCardResult fromJson(String json) {
return WxMpGsonBuilder.create().fromJson(json, WxMpOcrBankCardResult.class);
}
}

View File

@ -1,107 +0,0 @@
package me.chanjar.weixin.mp.bean.ocr;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
import java.io.Serializable;
/**
* @author Theo Nie
*/
@Data
public class WxMpOcrBizLicenseResult implements Serializable {
private static final long serialVersionUID = -5007671093920178291L;
/**
* 注册号
*/
@SerializedName("reg_num")
private String regNum;
/**
* 编号
*/
@SerializedName("serial")
private String serial;
/**
* 法定代表人姓名
*/
@SerializedName("legal_representative")
private String legalRepresentative;
/**
* 企业名称
*/
@SerializedName("enterprise_name")
private String enterpriseName;
/**
* 组成形式
*/
@SerializedName("type_of_organization")
private String typeOfOrganization;
/**
* 经营场所/企业住所
*/
@SerializedName("address")
private String address;
/**
* 公司类型
*/
@SerializedName("type_of_enterprise")
private String typeOfEnterprise;
/**
* 经营范围
*/
@SerializedName("business_scope")
private String businessScope;
/**
* 注册资本
*/
@SerializedName("registered_capital")
private String registeredCapital;
/**
* 实收资本
*/
@SerializedName("paid_in_capital")
private String paidInCapital;
/**
* 营业期限
*/
@SerializedName("valid_period")
private String validPeriod;
/**
* 注册日期/成立日期
*/
@SerializedName("registered_date")
private String registeredDate;
/**
* 营业执照位置
*/
@SerializedName("cert_position")
private CertPosition certPosition;
/**
* 图片大小
*/
@SerializedName("img_size")
private WxMpOcrImgSize imgSize;
public static WxMpOcrBizLicenseResult fromJson(String json) {
return WxMpGsonBuilder.create().fromJson(json, WxMpOcrBizLicenseResult.class);
}
@Override
public String toString() {
return WxMpGsonBuilder.create().toJson(this);
}
@Data
public static class CertPosition implements Serializable {
private static final long serialVersionUID = 290286813344131863L;
@SerializedName("pos")
private WxMpOcrPos pos;
@Override
public String toString() {
return WxMpGsonBuilder.create().toJson(this);
}
}
}

View File

@ -1,45 +0,0 @@
package me.chanjar.weixin.mp.bean.ocr;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
import java.io.Serializable;
import java.util.List;
/**
* @author Theo Nie
*/
@Data
public class WxMpOcrCommResult implements Serializable {
private static final long serialVersionUID = 455833771627756440L;
@SerializedName("img_size")
private WxMpOcrImgSize imgSize;
@SerializedName("items")
private List<Items> items;
public static WxMpOcrCommResult fromJson(String json) {
return WxMpGsonBuilder.create().fromJson(json, WxMpOcrCommResult.class);
}
@Override
public String toString() {
return WxMpGsonBuilder.create().toJson(this);
}
@Data
public static class Items implements Serializable {
private static final long serialVersionUID = 3066181677009102791L;
@SerializedName("text")
private String text;
@SerializedName("pos")
private WxMpOcrPos pos;
@Override
public String toString() {
return WxMpGsonBuilder.create().toJson(this);
}
}
}

View File

@ -1,80 +0,0 @@
package me.chanjar.weixin.mp.bean.ocr;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
import java.io.Serializable;
/**
* @author Theo Nie
*/
@Data
public class WxMpOcrDrivingLicenseResult implements Serializable {
private static final long serialVersionUID = -6984670645802585738L;
/**
* 证号
*/
@SerializedName("id_num")
private String idNum;
/**
* 姓名
*/
@SerializedName("name")
private String name;
/**
* 性别
*/
@SerializedName("sex")
private String sex;
/**
* 国籍
*/
@SerializedName("nationality")
private String nationality;
/**
* 住址
*/
@SerializedName("address")
private String address;
/**
* 出生日期
*/
@SerializedName("birth_date")
private String birthDate;
/**
* 初次领证日期
*/
@SerializedName("issue_date")
private String issueDate;
/**
* 准驾车型
*/
@SerializedName("car_class")
private String carClass;
/**
* 有效期限起始日
*/
@SerializedName("valid_from")
private String validFrom;
/**
* 有效期限终止日
*/
@SerializedName("valid_to")
private String validTo;
/**
* 印章文字
*/
@SerializedName("official_seal")
private String officialSeal;
@Override
public String toString() {
return WxMpGsonBuilder.create().toJson(this);
}
public static WxMpOcrDrivingLicenseResult fromJson(String json) {
return WxMpGsonBuilder.create().fromJson(json, WxMpOcrDrivingLicenseResult.class);
}
}

View File

@ -1,132 +0,0 @@
package me.chanjar.weixin.mp.bean.ocr;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
import java.io.Serializable;
/**
* @author Theo Nie
*/
@Data
public class WxMpOcrDrivingResult implements Serializable {
private static final long serialVersionUID = -7477484374200211303L;
/**
* 车牌号码
*/
@SerializedName("plate_num")
private String plateNum;
/**
* 车辆类型
*/
@SerializedName("vehicle_type")
private String vehicleType;
/**
* 所有人
*/
@SerializedName("owner")
private String owner;
/**
* 住址
*/
@SerializedName("addr")
private String addr;
/**
* 使用性质
*/
@SerializedName("use_character")
private String useCharacter;
/**
* 品牌型号
*/
@SerializedName("model")
private String model;
/**
* 车辆识别代码
*/
@SerializedName("vin")
private String vin;
/**
* 发动机号码
*/
@SerializedName("engine_num")
private String engineNum;
/**
* 注册日期
*/
@SerializedName("register_date")
private String registerDate;
/**
* 发证日期
*/
@SerializedName("issue_date")
private String issueDate;
/**
* 车牌号码
*/
@SerializedName("plate_num_b")
private String plateNumB;
/**
* 号牌
*/
@SerializedName("record")
private String record;
/**
* 核定载人数
*/
@SerializedName("passengers_num")
private String passengersNum;
/**
* 总质量
*/
@SerializedName("total_quality")
private String totalQuality;
/**
* 整备质量
*/
@SerializedName("prepare_quality")
private String prepareQuality;
/**
* 外廓尺寸
*/
@SerializedName("overall_size")
private String overallSize;
/**
* 卡片正面位置(检测到卡片正面才会返回)
*/
@SerializedName("card_position_front")
private CardPosition cardPositionFront;
/**
* 卡片反面位置(检测到卡片反面才会返回)
*/
@SerializedName("card_position_back")
private CardPosition cardPositionBack;
/**
* 图片大小
*/
@SerializedName("img_size")
private WxMpOcrImgSize imgSize;
@Data
public static class CardPosition implements Serializable {
private static final long serialVersionUID = 2884515165228160517L;
@SerializedName("pos")
private WxMpOcrPos pos;
@Override
public String toString() {
return WxMpGsonBuilder.create().toJson(this);
}
}
public static WxMpOcrDrivingResult fromJson(String json) {
return WxMpGsonBuilder.create().fromJson(json, WxMpOcrDrivingResult.class);
}
@Override
public String toString() {
return WxMpGsonBuilder.create().toJson(this);
}
}

View File

@ -1,33 +0,0 @@
package me.chanjar.weixin.mp.bean.ocr;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket;
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
import java.io.Serializable;
/**
* OCR身份证识别结果.
*
* @author <a href="https://github.com/binarywang">Binary Wang</a>
* @date 2019-06-23
*/
@Data
public class WxMpOcrIdCardResult implements Serializable {
private static final long serialVersionUID = 8184352486986729980L;
@SerializedName("type")
private String type;
@SerializedName("name")
private String name;
@SerializedName("id")
private String id;
@SerializedName("valid_date")
private String validDate;
public static WxMpOcrIdCardResult fromJson(String json) {
return WxMpGsonBuilder.create().fromJson(json, WxMpOcrIdCardResult.class);
}
}

View File

@ -1,25 +0,0 @@
package me.chanjar.weixin.mp.bean.ocr;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
import java.io.Serializable;
/**
* @author Theo Nie
*/
@Data
public class WxMpOcrImgSize implements Serializable {
private static final long serialVersionUID = 5234409123551074168L;
@SerializedName("w")
private int w;
@SerializedName("h")
private int h;
@Override
public String toString() {
return WxMpGsonBuilder.create().toJson(this);
}
}

View File

@ -1,43 +0,0 @@
package me.chanjar.weixin.mp.bean.ocr;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
import java.io.Serializable;
/**
* @author Theo Nie
*/
@Data
public class WxMpOcrPos implements Serializable {
private static final long serialVersionUID = 4204160206873907920L;
@SerializedName("left_top")
private Coordinate leftTop;
@SerializedName("right_top")
private Coordinate rightTop;
@SerializedName("right_bottom")
private Coordinate rightBottom;
@SerializedName("left_bottom")
private Coordinate leftBottom;
@Override
public String toString() {
return WxMpGsonBuilder.create().toJson(this);
}
@Data
public static class Coordinate implements Serializable{
private static final long serialVersionUID = 8675059935386304399L;
@SerializedName("x")
private int x;
@SerializedName("y")
private int y;
@Override
public String toString() {
return WxMpGsonBuilder.create().toJson(this);
}
}
}

View File

@ -199,8 +199,8 @@ public interface WxMpApiUrl {
*/
MENU_ADDCONDITIONAL(API_DEFAULT_HOST_URL, "/cgi-bin/menu/addconditional");
private String prefix;
private String path;
private final String prefix;
private final String path;
@Override
public String getUrl(WxMpConfigStorage config) {
@ -224,8 +224,8 @@ public interface WxMpApiUrl {
*/
SHOW_QRCODE_WITH_TICKET(MP_DEFAULT_HOST_URL, "/cgi-bin/showqrcode?ticket=%s");
private String prefix;
private String path;
private final String prefix;
private final String path;
@Override
public String getUrl(WxMpConfigStorage config) {
@ -252,8 +252,8 @@ public interface WxMpApiUrl {
*/
SHAKEAROUND_RELATION_SEARCH(API_DEFAULT_HOST_URL, "/shakearound/relation/search");
private String prefix;
private String path;
private final String prefix;
private final String path;
@Override
public String getUrl(WxMpConfigStorage config) {
@ -272,8 +272,8 @@ public interface WxMpApiUrl {
*/
SEND_MESSAGE_URL(API_DEFAULT_HOST_URL, "/cgi-bin/message/template/subscribe");
private String prefix;
private String path;
private final String prefix;
private final String path;
@Override
public String getUrl(WxMpConfigStorage config) {
@ -376,8 +376,8 @@ public interface WxMpApiUrl {
*/
TAGS_GETIDLIST(API_DEFAULT_HOST_URL, "/cgi-bin/tags/getidlist");
private String prefix;
private String path;
private final String prefix;
private final String path;
@Override
public String getUrl(WxMpConfigStorage config) {
@ -426,8 +426,8 @@ public interface WxMpApiUrl {
*/
VOICE_QUERY_RESULT_URL(API_DEFAULT_HOST_URL, "/cgi-bin/media/voice/queryrecoresultfortext");
private String prefix;
private String path;
private final String prefix;
private final String path;
@Override
public String getUrl(WxMpConfigStorage config) {

View File

@ -1,57 +0,0 @@
package me.chanjar.weixin.mp.util.requestexecuter.ocr;
import me.chanjar.weixin.common.WxType;
import me.chanjar.weixin.common.error.WxError;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.util.http.RequestHttp;
import me.chanjar.weixin.common.util.http.apache.Utf8ResponseHandler;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import java.io.File;
import java.io.IOException;
/**
* .
*
* @author : zhayueran
* @date 2019/6/27 14:06
*/
public class OcrDiscernApacheHttpRequestExecutor extends OcrDiscernRequestExecutor<CloseableHttpClient, HttpHost> {
public OcrDiscernApacheHttpRequestExecutor(RequestHttp requestHttp) {
super(requestHttp);
}
@Override
public String execute(String uri, File file, WxType wxType) throws WxErrorException, IOException {
HttpPost httpPost = new HttpPost(uri);
if (requestHttp.getRequestHttpProxy() != null) {
RequestConfig config = RequestConfig.custom().setProxy(requestHttp.getRequestHttpProxy()).build();
httpPost.setConfig(config);
}
if (file != null) {
HttpEntity entity = MultipartEntityBuilder
.create()
.addBinaryBody("file", file)
.setMode(HttpMultipartMode.RFC6532)
.build();
httpPost.setEntity(entity);
}
try (CloseableHttpResponse response = requestHttp.getRequestHttpClient().execute(httpPost)) {
String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response);
WxError error = WxError.fromJson(responseContent, wxType);
if (error.getErrorCode() != 0) {
throw new WxErrorException(error);
}
return responseContent;
} finally {
httpPost.releaseConnection();
}
}
}

View File

@ -1,38 +0,0 @@
package me.chanjar.weixin.mp.util.requestexecuter.ocr;
import me.chanjar.weixin.common.WxType;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.util.http.RequestExecutor;
import me.chanjar.weixin.common.util.http.RequestHttp;
import me.chanjar.weixin.common.util.http.ResponseHandler;
import java.io.File;
import java.io.IOException;
/**
* .
*
* @author zhayueran
* @date 2019/6/27 15:06
*/
public abstract class OcrDiscernRequestExecutor<H, P> implements RequestExecutor<String, File> {
protected RequestHttp<H, P> requestHttp;
public OcrDiscernRequestExecutor(RequestHttp requestHttp) {
this.requestHttp = requestHttp;
}
@Override
public void execute(String uri, File data, ResponseHandler<String> handler, WxType wxType) throws WxErrorException, IOException {
handler.handle(this.execute(uri, data, wxType));
}
public static RequestExecutor<String, File> create(RequestHttp requestHttp) {
switch (requestHttp.getRequestType()) {
case APACHE_HTTP:
return new OcrDiscernApacheHttpRequestExecutor(requestHttp);
default:
return null;
}
}
}

View File

@ -5,12 +5,12 @@ import me.chanjar.weixin.common.util.fs.FileUtils;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.test.ApiTestModule;
import me.chanjar.weixin.mp.api.test.TestConstants;
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrBankCardResult;
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrBizLicenseResult;
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrCommResult;
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrDrivingLicenseResult;
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrDrivingResult;
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrIdCardResult;
import me.chanjar.weixin.common.bean.ocr.WxOcrBankCardResult;
import me.chanjar.weixin.common.bean.ocr.WxOcrBizLicenseResult;
import me.chanjar.weixin.common.bean.ocr.WxOcrCommResult;
import me.chanjar.weixin.common.bean.ocr.WxOcrDrivingLicenseResult;
import me.chanjar.weixin.common.bean.ocr.WxOcrDrivingResult;
import me.chanjar.weixin.common.bean.ocr.WxOcrIdCardResult;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
@ -38,11 +38,11 @@ import static org.mockito.Mockito.when;
@Guice(modules = ApiTestModule.class)
public class WxMpOcrServiceImplTest {
@Inject
private WxMpService mpService;
private WxMpService service;
@Test
public void testIdCard() throws WxErrorException {
final WxMpOcrIdCardResult result = this.mpService.getOcrService().idCard(
final WxOcrIdCardResult result = this.service.getOcrService().idCard(
"https://res.wx.qq.com/op_res/E_oqdHqP4ETOJsT46sQnXz1HbeHOpqDQTuhkYeaLaJTf-JKld7de3091dwxCQwa6");
assertThat(result).isNotNull();
System.out.println(result);
@ -52,14 +52,14 @@ public class WxMpOcrServiceImplTest {
public void testIdCard2() throws Exception {
InputStream inputStream = this.getImageStream("https://res.wx.qq.com/op_res/E_oqdHqP4ETOJsT46sQnXz1HbeHOpqDQTuhkYeaLaJTf-JKld7de3091dwxCQwa6");
File tempFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), TestConstants.FILE_JPG);
final WxMpOcrIdCardResult result = this.mpService.getOcrService().idCard(tempFile);
final WxOcrIdCardResult result = this.service.getOcrService().idCard(tempFile);
assertThat(result).isNotNull();
System.out.println(result);
}
@Test
public void testBankCard() throws WxErrorException {
final WxMpOcrBankCardResult result = this.mpService.getOcrService().bankCard("https://res.wx.qq.com/op_res/eP7PObYbBJj-_19EbGBL4PWe_zQ1NwET5NXSugjEWc-4ayns4Q-HFJrp-AOog8ih");
final WxOcrBankCardResult result = this.service.getOcrService().bankCard("https://res.wx.qq.com/op_res/eP7PObYbBJj-_19EbGBL4PWe_zQ1NwET5NXSugjEWc-4ayns4Q-HFJrp-AOog8ih");
assertThat(result).isNotNull();
System.out.println(result);
}
@ -68,14 +68,14 @@ public class WxMpOcrServiceImplTest {
public void testBankCard2() throws Exception {
InputStream inputStream = this.getImageStream("https://res.wx.qq.com/op_res/eP7PObYbBJj-_19EbGBL4PWe_zQ1NwET5NXSugjEWc-4ayns4Q-HFJrp-AOog8ih");
File tempFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), TestConstants.FILE_JPG);
final WxMpOcrBankCardResult result = this.mpService.getOcrService().bankCard(tempFile);
final WxOcrBankCardResult result = this.service.getOcrService().bankCard(tempFile);
assertThat(result).isNotNull();
System.out.println(result);
}
@Test
public void testDriving() throws WxErrorException {
final WxMpOcrDrivingResult result = this.mpService.getOcrService().driving("https://res.wx.qq.com/op_res/T051P5uWvh9gSJ9j78tWib53WiNi2pHSSZhoO8wnY3Av-djpsA4kA9whbtt6_Tb6");
final WxOcrDrivingResult result = this.service.getOcrService().driving("https://res.wx.qq.com/op_res/T051P5uWvh9gSJ9j78tWib53WiNi2pHSSZhoO8wnY3Av-djpsA4kA9whbtt6_Tb6");
assertThat(result).isNotNull();
System.out.println(result);
}
@ -84,14 +84,14 @@ public class WxMpOcrServiceImplTest {
public void testDriving2() throws Exception {
InputStream inputStream = ClassLoader.getSystemResourceAsStream("mm.jpeg");
File tempFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), TestConstants.FILE_JPG);
final WxMpOcrDrivingResult result = this.mpService.getOcrService().driving(tempFile);
final WxOcrDrivingResult result = this.service.getOcrService().driving(tempFile);
assertThat(result).isNotNull();
System.out.println(result);
}
@Test
public void testDrivingLicense() throws WxErrorException {
final WxMpOcrDrivingLicenseResult result = this.mpService.getOcrService().drivingLicense("https://res.wx.qq.com/op_res/kD4YXjYVAW1eaQqn9uTA0rrOFoZRvVINitNDSGo5gJ7SzTCezNq_ZDDmU1I08kGn");
final WxOcrDrivingLicenseResult result = this.service.getOcrService().drivingLicense("https://res.wx.qq.com/op_res/kD4YXjYVAW1eaQqn9uTA0rrOFoZRvVINitNDSGo5gJ7SzTCezNq_ZDDmU1I08kGn");
assertThat(result).isNotNull();
System.out.println(result);
}
@ -100,14 +100,14 @@ public class WxMpOcrServiceImplTest {
public void testDrivingLicense2() throws Exception {
InputStream inputStream = this.getImageStream("https://res.wx.qq.com/op_res/kD4YXjYVAW1eaQqn9uTA0rrOFoZRvVINitNDSGo5gJ7SzTCezNq_ZDDmU1I08kGn");
File tempFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), TestConstants.FILE_JPG);
final WxMpOcrDrivingLicenseResult result = this.mpService.getOcrService().drivingLicense(tempFile);
final WxOcrDrivingLicenseResult result = this.service.getOcrService().drivingLicense(tempFile);
assertThat(result).isNotNull();
System.out.println(result);
}
@Test
public void testBizLicense() throws WxErrorException {
final WxMpOcrBizLicenseResult result = this.mpService.getOcrService().bizLicense("https://res.wx.qq.com/op_res/apCy0YbnEdjYsa_cjW6x3FlpCc20uQ-2BYE7aXnFsrB-ALHZNgdKXhzIUcrRnDoL");
final WxOcrBizLicenseResult result = this.service.getOcrService().bizLicense("https://res.wx.qq.com/op_res/apCy0YbnEdjYsa_cjW6x3FlpCc20uQ-2BYE7aXnFsrB-ALHZNgdKXhzIUcrRnDoL");
assertThat(result).isNotNull();
System.out.println(result);
}
@ -116,14 +116,14 @@ public class WxMpOcrServiceImplTest {
public void testBizLicense2() throws Exception {
InputStream inputStream = ClassLoader.getSystemResourceAsStream("mm.jpeg");
File tempFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), TestConstants.FILE_JPG);
final WxMpOcrBizLicenseResult result = this.mpService.getOcrService().bizLicense(tempFile);
final WxOcrBizLicenseResult result = this.service.getOcrService().bizLicense(tempFile);
assertThat(result).isNotNull();
System.out.println(result);
}
@Test
public void testComm() throws WxErrorException {
final WxMpOcrCommResult result = this.mpService.getOcrService().comm("https://res.wx.qq.com/op_res/apCy0YbnEdjYsa_cjW6x3FlpCc20uQ-2BYE7aXnFsrB-ALHZNgdKXhzIUcrRnDoL");
final WxOcrCommResult result = this.service.getOcrService().comm("https://res.wx.qq.com/op_res/apCy0YbnEdjYsa_cjW6x3FlpCc20uQ-2BYE7aXnFsrB-ALHZNgdKXhzIUcrRnDoL");
assertThat(result).isNotNull();
System.out.println(result);
}
@ -132,7 +132,7 @@ public class WxMpOcrServiceImplTest {
public void testComm2() throws Exception {
InputStream inputStream = ClassLoader.getSystemResourceAsStream("mm.jpeg");
File tempFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), TestConstants.FILE_JPG);
final WxMpOcrCommResult result = this.mpService.getOcrService().comm(tempFile);
final WxOcrCommResult result = this.service.getOcrService().comm(tempFile);
assertThat(result).isNotNull();
System.out.println(result);
}
@ -162,7 +162,7 @@ public class WxMpOcrServiceImplTest {
when(wxService.get(anyString(), anyString())).thenReturn(returnJson);
final WxMpOcrServiceImpl wxMpOcrService = new WxMpOcrServiceImpl(wxService);
final WxMpOcrIdCardResult result = wxMpOcrService.idCard("abc");
final WxOcrIdCardResult result = wxMpOcrService.idCard("abc");
assertThat(result).isNotNull();
System.out.println(result);
}
@ -174,7 +174,7 @@ public class WxMpOcrServiceImplTest {
when(wxService.get(anyString(), anyString())).thenReturn(returnJson);
final WxMpOcrServiceImpl wxMpOcrService = new WxMpOcrServiceImpl(wxService);
final WxMpOcrBankCardResult result = wxMpOcrService.bankCard("abc");
final WxOcrBankCardResult result = wxMpOcrService.bankCard("abc");
assertThat(result).isNotNull();
System.out.println(result);
}
@ -249,7 +249,7 @@ public class WxMpOcrServiceImplTest {
when(wxService.get(anyString(), anyString())).thenReturn(returnJson);
final WxMpOcrServiceImpl wxMpOcrService = new WxMpOcrServiceImpl(wxService);
final WxMpOcrDrivingResult result = wxMpOcrService.driving("abc");
final WxOcrDrivingResult result = wxMpOcrService.driving("abc");
assertThat(result).isNotNull();
System.out.println(result);
}
@ -274,7 +274,7 @@ public class WxMpOcrServiceImplTest {
when(wxService.get(anyString(), anyString())).thenReturn(returnJson);
final WxMpOcrServiceImpl wxMpOcrService = new WxMpOcrServiceImpl(wxService);
final WxMpOcrDrivingLicenseResult result = wxMpOcrService.drivingLicense("abc");
final WxOcrDrivingLicenseResult result = wxMpOcrService.drivingLicense("abc");
assertThat(result).isNotNull();
System.out.println(result);
}
@ -324,7 +324,7 @@ public class WxMpOcrServiceImplTest {
when(wxService.get(anyString(), anyString())).thenReturn(returnJson);
final WxMpOcrServiceImpl wxMpOcrService = new WxMpOcrServiceImpl(wxService);
final WxMpOcrBizLicenseResult result = wxMpOcrService.bizLicense("abc");
final WxOcrBizLicenseResult result = wxMpOcrService.bizLicense("abc");
assertThat(result).isNotNull();
System.out.println(result);
}
@ -386,7 +386,7 @@ public class WxMpOcrServiceImplTest {
when(wxService.get(anyString(), anyString())).thenReturn(returnJson);
final WxMpOcrServiceImpl wxMpOcrService = new WxMpOcrServiceImpl(wxService);
final WxMpOcrCommResult result = wxMpOcrService.comm("abc");
final WxOcrCommResult result = wxMpOcrService.comm("abc");
assertThat(result).isNotNull();
System.out.println(result);
}