PHP 调用微信小程序 OCR 接口

MaxSky
• 阅读 1753

添加插件

在小程序后台 设置 - 第三方设置 - 插件管理 中添加 OCR支持 插件。

服务购买

微信OCR识别 | 微信服务平台 中购买接口配额。

免费版本目前配额为 100 次/日,可用 36500 天。

接入

如果是小程序前端接入,参考上方网页“接入文档”即可。

定义接口常量

const OCR_BANKCARD = 'https://api.weixin.qq.com/cv/ocr/bankcard';
const OCR_BIZ_LICENSE = 'https://api.weixin.qq.com/cv/ocr/bizlicense';
const OCR_DRIVER_LICENSE = 'https://api.weixin.qq.com/cv/ocr/drivinglicense';
const OCR_ID_CARD = 'https://api.weixin.qq.com/cv/ocr/idcard';
const OCR_PRINTED_TEXT = 'https://api.weixin.qq.com/cv/ocr/comm';
const OCR_VEHICLE_LICENSE = 'https://api.weixin.qq.com/cv/ocr/driving';

CURL 接入

/**
 * @param string            $api
 * @param string            $access_token
 * @param UploadedFile|null $image UploadedFile 强制数据类型可删除或替换,该参数为已上传文件对象
 * @param string|null       $image_url
 *
 * @return array|null
 */
public function imageOcr(string $api, string $access_token, ?UploadedFile $image = null, ?string $image_url = null): ?array {
    if ((!$image && !$image_url)) {
        return null;
    }

    $cFile = curl_file_create(
        $image->getPathname(),
        mime_content_type($image->getPathname()),
        $image->getFilename()
    );

    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $api . '?' . http_build_query([
                'access_token' => $access_token,
                'img_url' => $image_url
            ]),
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => [
            'img' => $cFile
        ],
        CURLOPT_RETURNTRANSFER => true
    ]);

    $response = curl_exec($ch);
    curl_close($ch);

    return json_decode($response, true);
}

GuzzleHttp 客户端接入

/**
 * @param string            $api
 * @param string            $access_token
 * @param UploadedFile|null $image UploadedFile 强制数据类型可删除或替换,该参数为已上传文件对象
 * @param string|null       $image_url
 *
 * @return array|null
 */
public function imageOcr(string $api, string $access_token, ?UploadedFile $image = null, ?string $image_url = null): ?array {
    if ((!$image && !$image_url)) {
        return null;
    }

    $response = (new \GuzzleHttp\Client())->post($api, [
        'query' => [
            'access_token' => $access_token,
            'img_url' => $image_url
        ],
        'multipart' => [
            [
                'name' => 'img',
                'contents' => file_get_contents($image->getPathname()),
                'filename' => $image->getFilename()
            ]
        ]
    ])->getBody();

    return json_decode($response, true);
}

使用

假定 imageOcr 方法位于 WeChatOCR 类:

$ocr = new WeChatOCR();

// 大多数框架中可以通过 $request->file('image') 的方式获得上传文件对象
$ocr->imageOcr(WeChatOCR::OCR_PRINTED_TEXT, $request->file('image'));

// Image URL 方式
$ocr->imageOcr(WeChatOCR::OCR_ID_CARD, null, 'https://example.com/id_card.jpg');
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
梦
3年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Easter79 Easter79
3年前
SpringBoot自定义序列化的使用方式
场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
SpringBoot自定义序列化的使用方式
场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这