@@ -5,12 +5,14 @@ import me.chanjar.weixin.common.error.WxErrorException; | |||||
import me.chanjar.weixin.mp.api.WxMpOcrService; | import me.chanjar.weixin.mp.api.WxMpOcrService; | ||||
import me.chanjar.weixin.mp.api.WxMpService; | import me.chanjar.weixin.mp.api.WxMpService; | ||||
import me.chanjar.weixin.mp.bean.ocr.WxMpOcrIdCardResult; | import me.chanjar.weixin.mp.bean.ocr.WxMpOcrIdCardResult; | ||||
import me.chanjar.weixin.mp.util.requestexecuter.ocr.OcrDiscernRequestExecutor; | |||||
import java.io.File; | import java.io.File; | ||||
import java.io.UnsupportedEncodingException; | import java.io.UnsupportedEncodingException; | ||||
import java.net.URLEncoder; | import java.net.URLEncoder; | ||||
import java.nio.charset.StandardCharsets; | import java.nio.charset.StandardCharsets; | ||||
import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Ocr.FILEIDCARD; | |||||
import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Ocr.IDCARD; | import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Ocr.IDCARD; | ||||
/** | /** | ||||
@@ -37,7 +39,9 @@ public class WxMpOcrServiceImpl implements WxMpOcrService { | |||||
} | } | ||||
@Override | @Override | ||||
public WxMpOcrIdCardResult idCard(ImageType imgType, File imgFile) { | |||||
return null; | |||||
public WxMpOcrIdCardResult idCard(ImageType imgType, File imgFile) throws WxErrorException { | |||||
String result = this.wxMpService.execute(OcrDiscernRequestExecutor.create(this.wxMpService.getRequestHttp()), String.format(FILEIDCARD.getUrl(this.wxMpService.getWxMpConfigStorage()), | |||||
imgType.getType()), imgFile); | |||||
return WxMpOcrIdCardResult.fromJson(result); | |||||
} | } | ||||
} | } |
@@ -440,7 +440,9 @@ public interface WxMpApiUrl { | |||||
/** | /** | ||||
* 身份证识别. | * 身份证识别. | ||||
*/ | */ | ||||
IDCARD(API_DEFAULT_HOST_URL, "/cv/ocr/idcard?type=%s&img_url=%s"); | |||||
IDCARD(API_DEFAULT_HOST_URL, "/cv/ocr/idcard?type=%s&img_url=%s"), | |||||
FILEIDCARD(API_DEFAULT_HOST_URL, "/cv/ocr/idcard?type=%s"); | |||||
private String prefix; | private String prefix; | ||||
private String path; | private String path; | ||||
@@ -0,0 +1,57 @@ | |||||
package me.chanjar.weixin.mp.util.requestexecuter.ocr; | |||||
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 | |||||
* @Description: | |||||
*/ | |||||
public class OcrDiscernApacheHttpRequestExecutor extends OcrDiscernRequestExecutor<CloseableHttpClient, HttpHost> { | |||||
public OcrDiscernApacheHttpRequestExecutor(RequestHttp requestHttp) { | |||||
super(requestHttp); | |||||
} | |||||
@Override | |||||
public String execute(String uri, File file) 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); | |||||
if (error.getErrorCode() != 0) { | |||||
throw new WxErrorException(error); | |||||
} | |||||
return responseContent; | |||||
} finally { | |||||
httpPost.releaseConnection(); | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,36 @@ | |||||
package me.chanjar.weixin.mp.util.requestexecuter.ocr; | |||||
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 | |||||
* @Description: | |||||
*/ | |||||
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) throws WxErrorException, IOException { | |||||
handler.handle(this.execute(uri, data)); | |||||
} | |||||
public static RequestExecutor<String, File> create(RequestHttp requestHttp) { | |||||
switch (requestHttp.getRequestType()) { | |||||
case APACHE_HTTP: | |||||
return new OcrDiscernApacheHttpRequestExecutor(requestHttp); | |||||
default: | |||||
return null; | |||||
} | |||||
} | |||||
} |