mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-09-20 18:48:13 +08:00
🆕 #1527 微信小程序增加OCR身份证识别和银行卡识别等接口
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
package me.chanjar.weixin.common.api;
|
||||
|
||||
import me.chanjar.weixin.common.error.WxErrorException;
|
||||
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 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 WxOcrService {
|
||||
|
||||
/**
|
||||
* 身份证OCR识别接口.
|
||||
*
|
||||
* @param imgUrl 图片url地址
|
||||
* @return WxMpOcrIdCardResult
|
||||
* @throws WxErrorException .
|
||||
*/
|
||||
WxOcrIdCardResult idCard(String imgUrl) throws WxErrorException;
|
||||
|
||||
/**
|
||||
* 身份证OCR识别接口.
|
||||
*
|
||||
* @param imgFile 图片文件对象
|
||||
* @return WxMpOcrIdCardResult
|
||||
* @throws WxErrorException .
|
||||
*/
|
||||
WxOcrIdCardResult idCard(File imgFile) throws WxErrorException;
|
||||
|
||||
/**
|
||||
* 银行卡OCR识别接口
|
||||
* 文件大小限制:小于2M
|
||||
* @param imgUrl 图片url地址
|
||||
* @return WxMpOcrBankCardResult
|
||||
* @throws WxErrorException .
|
||||
*/
|
||||
WxOcrBankCardResult bankCard(String imgUrl) throws WxErrorException;
|
||||
|
||||
/**
|
||||
* 银行卡OCR识别接口
|
||||
* 文件大小限制:小于2M
|
||||
* @param imgFile 图片文件对象
|
||||
* @return WxMpOcrBankCardResult
|
||||
* @throws WxErrorException .
|
||||
*/
|
||||
WxOcrBankCardResult bankCard(File imgFile) throws WxErrorException;
|
||||
|
||||
/**
|
||||
* 行驶证OCR识别接口
|
||||
* 文件大小限制:小于2M
|
||||
* @param imgUrl 图片url地址
|
||||
* @return WxMpOcrDrivingResult
|
||||
* @throws WxErrorException .
|
||||
*/
|
||||
WxOcrDrivingResult driving(String imgUrl) throws WxErrorException;
|
||||
|
||||
/**
|
||||
* 行驶证OCR识别接口
|
||||
* 文件大小限制:小于2M
|
||||
* @param imgFile 图片文件对象
|
||||
* @return WxMpOcrDrivingResult
|
||||
* @throws WxErrorException .
|
||||
*/
|
||||
WxOcrDrivingResult driving(File imgFile) throws WxErrorException;
|
||||
|
||||
/**
|
||||
* 驾驶证OCR识别接口
|
||||
* 文件大小限制:小于2M
|
||||
* @param imgUrl 图片url地址
|
||||
* @return WxMpOcrDrivingLicenseResult
|
||||
* @throws WxErrorException .
|
||||
*/
|
||||
WxOcrDrivingLicenseResult drivingLicense(String imgUrl) throws WxErrorException;
|
||||
|
||||
/**
|
||||
* 驾驶证OCR识别接口
|
||||
* 文件大小限制:小于2M
|
||||
* @param imgFile 图片文件对象
|
||||
* @return WxMpOcrDrivingLicenseResult
|
||||
* @throws WxErrorException .
|
||||
*/
|
||||
WxOcrDrivingLicenseResult drivingLicense(File imgFile) throws WxErrorException;
|
||||
|
||||
/**
|
||||
* 营业执照OCR识别接口
|
||||
* 文件大小限制:小于2M
|
||||
* @param imgUrl 图片url地址
|
||||
* @return WxMpOcrBizLicenseResult
|
||||
* @throws WxErrorException .
|
||||
*/
|
||||
WxOcrBizLicenseResult bizLicense(String imgUrl) throws WxErrorException;
|
||||
|
||||
/**
|
||||
* 营业执照OCR识别接口
|
||||
* 文件大小限制:小于2M
|
||||
* @param imgFile 图片文件对象
|
||||
* @return WxMpOcrBizLicenseResult
|
||||
* @throws WxErrorException .
|
||||
*/
|
||||
WxOcrBizLicenseResult bizLicense(File imgFile) throws WxErrorException;
|
||||
|
||||
/**
|
||||
* 通用印刷体OCR识别接口
|
||||
* 文件大小限制:小于2M
|
||||
* 适用于屏幕截图、印刷体照片等场景
|
||||
* @param imgUrl 图片url地址
|
||||
* @return WxMpOcrCommResult
|
||||
* @throws WxErrorException .
|
||||
*/
|
||||
WxOcrCommResult comm(String imgUrl) throws WxErrorException;
|
||||
|
||||
/**
|
||||
* 通用印刷体OCR识别接口
|
||||
* 文件大小限制:小于2M
|
||||
* 适用于屏幕截图、印刷体照片等场景
|
||||
* @param imgFile 图片文件对象
|
||||
* @return WxMpOcrCommResult
|
||||
* @throws WxErrorException .
|
||||
*/
|
||||
WxOcrCommResult comm(File imgFile) throws WxErrorException;
|
||||
}
|
@@ -0,0 +1,29 @@
|
||||
package me.chanjar.weixin.common.bean.ocr;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import lombok.Data;
|
||||
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 银行卡OCR识别结果
|
||||
*
|
||||
* @author Theo Nie
|
||||
*/
|
||||
@Data
|
||||
public class WxOcrBankCardResult implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 554136620394204143L;
|
||||
@SerializedName("number")
|
||||
private String number;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return WxGsonBuilder.create().toJson(this);
|
||||
}
|
||||
|
||||
public static WxOcrBankCardResult fromJson(String json) {
|
||||
return WxGsonBuilder.create().fromJson(json, WxOcrBankCardResult.class);
|
||||
}
|
||||
}
|
@@ -0,0 +1,108 @@
|
||||
package me.chanjar.weixin.common.bean.ocr;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import lombok.Data;
|
||||
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author Theo Nie
|
||||
*/
|
||||
@Data
|
||||
public class WxOcrBizLicenseResult 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 WxOcrImgSize imgSize;
|
||||
|
||||
public static WxOcrBizLicenseResult fromJson(String json) {
|
||||
return WxGsonBuilder.create().fromJson(json, WxOcrBizLicenseResult.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return WxGsonBuilder.create().toJson(this);
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class CertPosition implements Serializable {
|
||||
private static final long serialVersionUID = 290286813344131863L;
|
||||
|
||||
@SerializedName("pos")
|
||||
private WxOcrPos pos;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return WxGsonBuilder.create().toJson(this);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,45 @@
|
||||
package me.chanjar.weixin.common.bean.ocr;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import lombok.Data;
|
||||
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Theo Nie
|
||||
*/
|
||||
@Data
|
||||
public class WxOcrCommResult implements Serializable {
|
||||
private static final long serialVersionUID = 455833771627756440L;
|
||||
|
||||
@SerializedName("img_size")
|
||||
private WxOcrImgSize imgSize;
|
||||
@SerializedName("items")
|
||||
private List<Items> items;
|
||||
|
||||
public static WxOcrCommResult fromJson(String json) {
|
||||
return WxGsonBuilder.create().fromJson(json, WxOcrCommResult.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return WxGsonBuilder.create().toJson(this);
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class Items implements Serializable {
|
||||
private static final long serialVersionUID = 3066181677009102791L;
|
||||
|
||||
@SerializedName("text")
|
||||
private String text;
|
||||
@SerializedName("pos")
|
||||
private WxOcrPos pos;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return WxGsonBuilder.create().toJson(this);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,80 @@
|
||||
package me.chanjar.weixin.common.bean.ocr;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import lombok.Data;
|
||||
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author Theo Nie
|
||||
*/
|
||||
@Data
|
||||
public class WxOcrDrivingLicenseResult 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 WxGsonBuilder.create().toJson(this);
|
||||
}
|
||||
|
||||
public static WxOcrDrivingLicenseResult fromJson(String json) {
|
||||
return WxGsonBuilder.create().fromJson(json, WxOcrDrivingLicenseResult.class);
|
||||
}
|
||||
}
|
@@ -0,0 +1,133 @@
|
||||
package me.chanjar.weixin.common.bean.ocr;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import lombok.Data;
|
||||
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author Theo Nie
|
||||
*/
|
||||
@Data
|
||||
public class WxOcrDrivingResult 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 WxOcrImgSize imgSize;
|
||||
|
||||
@Data
|
||||
public static class CardPosition implements Serializable {
|
||||
private static final long serialVersionUID = 2884515165228160517L;
|
||||
|
||||
@SerializedName("pos")
|
||||
private WxOcrPos pos;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return WxGsonBuilder.create().toJson(this);
|
||||
}
|
||||
}
|
||||
|
||||
public static WxOcrDrivingResult fromJson(String json) {
|
||||
return WxGsonBuilder.create().fromJson(json, WxOcrDrivingResult.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return WxGsonBuilder.create().toJson(this);
|
||||
}
|
||||
}
|
@@ -0,0 +1,32 @@
|
||||
package me.chanjar.weixin.common.bean.ocr;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import lombok.Data;
|
||||
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* OCR身份证识别结果.
|
||||
*
|
||||
* @author <a href="https://github.com/binarywang">Binary Wang</a>
|
||||
* @date 2019-06-23
|
||||
*/
|
||||
@Data
|
||||
public class WxOcrIdCardResult 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 WxOcrIdCardResult fromJson(String json) {
|
||||
return WxGsonBuilder.create().fromJson(json, WxOcrIdCardResult.class);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,25 @@
|
||||
package me.chanjar.weixin.common.bean.ocr;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import lombok.Data;
|
||||
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author Theo Nie
|
||||
*/
|
||||
@Data
|
||||
public class WxOcrImgSize implements Serializable {
|
||||
private static final long serialVersionUID = 5234409123551074168L;
|
||||
|
||||
@SerializedName("w")
|
||||
private int w;
|
||||
@SerializedName("h")
|
||||
private int h;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return WxGsonBuilder.create().toJson(this);
|
||||
}
|
||||
}
|
@@ -0,0 +1,43 @@
|
||||
package me.chanjar.weixin.common.bean.ocr;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import lombok.Data;
|
||||
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author Theo Nie
|
||||
*/
|
||||
@Data
|
||||
public class WxOcrPos 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 WxGsonBuilder.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 WxGsonBuilder.create().toJson(this);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,57 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,38 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user