微信开发身份识别接口_java 微信身份证ocr识别接口 开发 - CSDN
  • OAuth验证接口作用是当微信中的页面访问后台时,能够使后台知道是不是企业内部人员访问,是哪个员工访问,从而可以做相应的处理 -------------------------------------------------------------------------------...
           OAuth验证接口作用是当微信中的页面访问后台时,能够使后台知道是不是企业内部人员访问,是哪个员工访问,从而可以做相应的处理

    ---------------------------------------------------------------------------------------------------------------

    ---------------------------------------------------------------------------------------------------------------

    1、处理页面链接,使后台能获得微信提供的code

          对我们自己的链接进行urlencode处理,处理方法

         

    var changeurl=getUrl.replace(/[:]/g,"%3a").replace(/[/]/g,"%2f").replace(/[\?]/g,"%3f").replace(/[=]/g,"%3d").replace(/[&]/g,"%26");
    var tourl="https://open.weixin.qq.com/connect/oauth2/authorize?appid=自己的appid&redirect_uri="+changeurl+"&response_type=code&scope=snsapi_base&state=location#wechat_redirect";

    企业获取code

    企业如果需要员工在跳转到企业网页时带上员工的身份信息,需构造如下的链接:

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

    • 参数说明
    参数 必须 说明
    appid 企业的CorpID
    redirect_uri 授权后重定向的回调链接地址,请使用urlencode对链接进行处理
    response_type 返回类型,此时固定为:code
    scope 应用授权作用域,此时固定为:snsapi_base
    state 重定向后会带上state参数,企业可以填写a-zA-Z0-9的参数值,长度不可超过128个字节
    #wechat_redirect 微信终端使用此参数判断是否需要带上身份信息

    员工点击后,页面将跳转至 redirect_uri?code=CODE&state=STATE,企业可根据code参数获得员工的userid。

    ---------------------------------------------------------------------------------------------------------------

    ---------------------------------------------------------------------------------------------------------------


    2、后台根据code获得获得uesid

    /**
      	 * 根据code获得人员
      	 */
      	public String getUserIdByCode(String code){
      	//获取微信号
        	String token=getTokenFromWx();
    		 try {
    			 CloseableHttpClient httpclient = HttpClients.createDefault();
    			 HttpPost httpPost= new HttpPost("https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token="+token+"&code="+code+"&agentid="+AGENT_ID_REGISTER);
    			 // Create a custom response handler
    			 ResponseHandler<JSONObject> responseHandler = new ResponseHandler<JSONObject>() {
    
                    public JSONObject handleResponse(
                            final HttpResponse response) throws ClientProtocolException, IOException {
                        int status = response.getStatusLine().getStatusCode();
                        if (status >= 200 && status < 300) {
                            HttpEntity entity = response.getEntity();
                            if(null!=entity){
                            	String result= EntityUtils.toString(entity);
                                //根据字符串生成JSON对象
                       		 	JSONObject resultObj = JSONObject.fromObject(result);
                       		 	return resultObj;
                            }else{
                            	return null;
                            }
                        } else {
                            throw new ClientProtocolException("Unexpected response status: " + status);
                        }
                    }
    
                };
              //返回的json对象
                JSONObject responseBody = httpclient.execute(httpPost, responseHandler);
                //AppLogUtil.getAppLoger().info(responseBody.toString());
                if(null==responseBody.getString("UserId")){
                	return null;
                }else{
                	return responseBody.getString("UserId"); 
                }
    		 }catch (Exception e) {
    			//e.printStackTrace();
    			return null;
    		}
      	}

    官网API:http://qydev.weixin.qq.com/wiki/index.php?title=OAuth验证接口


    展开全文
  • 微信公众平台开发模式 微信 公众平台 图片识别 人脸识别  作者:方倍工作室[QQ:1354386063] 原文:http://www.cnblogs.com/txw1958/archive/2013/02/05/weixin-if20-face-recognition.html    一、前言 ...

    微信公众平台开发模式 微信 公众平台 图片识别 人脸识别 
    作者:方倍工作室[QQ:1354386063]
    原文:http://www.cnblogs.com/txw1958/archive/2013/02/05/weixin-if20-face-recognition.html 

     

    一、前言

    前几个小应用似乎不给力,反应不冷不热,似乎大家不感兴趣,今天给大家推出一个亮眼一点的:微信公众平台上的人脸识别。

    前段时间看到网上有个报道  四川大学计算机科学系主任、副教授 魏骁勇 开发了 基于图像的课堂考勤系统, 上课点名用人脸识别来‘刷脸’,看下图

    在点名时,只需多角度对教室内的学生分区域拍照,然后将照片上传到服务器,自动拼接成一张整图,系统再对照片里的学生头像自动编号和识别,最后出现学生的个人信息,旁边则有“It’sme(是我)”和“notme(不是我)”两个选项。这样马上就能知道谁在上课、谁在逃课了

    更神的是,这东西在统计学上的意义:它甚至可以分析出学生的人际关系甚至性格兴趣,比如它根据学生在课堂上喜欢坐在哪些位置,喜欢坐在谁的旁边,得出原始数据,经过一段时间之后,再来分析,就可以谁和谁在谈恋爱,谁和谁分手后又和谁在一起了。谁老是喜欢自己一个人独自坐在角落(自闭症),某个男生和某个男生半年下来每次都坐在一起(基友???),瞬间感觉这玩意给人的想象空间无限大。。。。。。

     

    下面开始言归正传了:

    首先看一下什么是人脸识别,看一下百度百科的定义:人脸识别特指利用分析比较人脸视觉特征信息进行身份鉴别的计算机技术。人脸识别是一项热门的计算机技术研究领域,可以将人脸明暗侦测,自动调整动态曝光补偿,人脸追踪侦测,自动调整影像放大;它属于生物特征识别技术,是对生物体(一般特指人)本身的生物特征来区分生物体个体。原文:http://www.cnblogs.com/txw1958/archive/2013/02/04/weixin-if20-face-recognition.html 

    人脸识别的技术过程(来自百度百科)

    一般分三步:
    (1)首先建立人脸的面像档案。即用摄像机采集单位人员的人脸的面像文件或取他们的照片形成面像文件,并将这些面像文件生成面纹(Faceprint)编码贮存起来。
    (2)获取当前的人体面像。即用摄像机捕捉的当前出入人员的面像,或取照片输入,并将当前的面像文件生成面纹编码。
    (3)用当前的面纹编码与档案库存的比对。即将当前的面像的面纹编码与档案库存中的面纹编码进行检索比对。上述的“面纹编码”方式是根据人脸脸部的本质特征和开头来工作的。这种面纹编码可以抵抗光线、皮肤色调、面部毛发、发型、眼镜、表情和姿态的变化,具有强大的可靠性,从而使它可以从百万人中精确地辩认出某个人。人脸的识别过程,利用普通的图像处理设备就能自动、连续、实时地完成。

     

    二、在微信公众平台上做人脸识别

    1. 图片获取

    首先要获得用户发过来的图片,微信公众平台支持接收图片,

    用户发送的一个图片如下:

    其图片消息的格式如下:

    复制代码
    <xml>
        <ToUserName><![CDATA[gh_13d1a3a7x46a]]></ToUserName>
        <FromUserName><![CDATA[oKaHDjt60aAyPvQmUX3ddyix_zG8]]></FromUserName>
        <CreateTime>1357543196</CreateTime>
        <MsgType><![CDATA[image]]></MsgType>
        <PicUrl><![CDATA[http://mmsns.qpic.cn/mmsns/L4qjYtOibummV7J7pbpWKZTiaRoeicicD151CGsQ5AW761Kmn5Hk83r5lQ/0]]></PicUrl>
        <MsgId>5830603629728080261</MsgId>
    </xml>
    复制代码

    XML格式讲解 原文:http://www.cnblogs.com/txw1958/archive/2013/02/04/weixin-if20-face-recognition.html 
    ToUserName 消息接收方微信号,一般为公众平台账号微信号
    FromUserName 消息发送方微信号
    CreateTime 消息创建时间
    MsgType 消息类型;图片消息为image
    PicUrl 图片链接地址
    MsgId 消息ID号

     

    2. 接口

    Face++提供人脸识别接口,

    检测给定图片(Image)中的所有人脸(Face)的位置和相应的面部属性接口地址如下:
    http://apicn.faceplusplus.com/v2/detection/detect

    参数

    是否必须

    含义

    api_key

    必须

    App的Face++ API Key

    api_secret

    必须

    APP的Face++ API Secret

    url 或 img[POST]

    必须

    待检测图片的URL 或者 通过POST方法上传的二进制数据,原始图片大小需要小于3M

    mode

    可选

    检测模式可以是normal(默认) 或者 oneface 。在oneface模式中,检测器仅找出图片中最大的一张脸。

    attribute

    可选

    可以是none或者由逗号分割的属性列表。默认为gender, age, race, smiling。目前支持的属性包括:gender, age, race, smiling, glass, pose

    tag

    可选

    可以为图片中检测出的每一张Face指定一个不包含^@,&=*'"等非法字符且不超过255字节的字符串作为tag,tag信息可以通过 /info/get_face 查询

    async

    可选

    如果置为true,该API将会以异步方式被调用;也就是立即返回一个session id,稍后可通过/info/get_session查询结果。默认值为false。


    返回如下

    复制代码
    {
        "face": [
            {
                "attribute": {
                    "age": {
                        "range": 5,
                        "value": 17
                    },
                    "gender": {
                        "confidence": 99.9781,
                        "value": "Female"
                    },
                    "glass": {
                        "confidence": 99.9815,
                        "value": "None"
                    },
                    "pose": {
                        "pitch_angle": {
                            "value": 0.000019753399999999996
                        },
                        "roll_angle": {
                            "value": 1.75177
                        },
                        "yaw_angle": {
                            "value": 4
                        }
                    },
                    "race": {
                        "confidence": 99.471,
                        "value": "Asian"
                    },
                    "smiling": {
                        "value": 87.1365
                    }
                },
                "face_id": "c772b4b66c00d46b15344eff74b56e48"
            }
        ],
        "img_height": 293,
        "img_id": "3005132383841edd08c9b500fb1fe2c4",
        "img_width": 440,
        "session_id": "4e64c73fec19442cbefde3cf9bd6b53d",
        "url": ""
    }
    复制代码

    参数:

    gender

    object

    包含性别分析结果,value的值为Male/Female, confidence表示置信度

    age

    object

    包含年龄分析结果,value的值为一个非负整数表示估计的年龄, range表示估计年龄的正负区间

    race

    object

    包含人种分析结果,value的值为Asian/White/Black, confidence表示置信度

    smiling

    object

    包含微笑程度分析结果,value的值为0-100的实数,越大表示微笑程度越高

    实现方法

    取结果参数中的gender,age,race,smiling等参数 ,如

    复制代码
                "attribute": {
                    "age": {
                        "range": 5,
                        "value": 17
                    },
                    "gender": {
                        "confidence": 99.9781,
                        "value": "Female"
                    },
                    "glass": {
                        "confidence": 99.9815,
                        "value": "None"
                    },
                    "pose": {
                        "pitch_angle": {
                            "value": 0.000019753399999999996
                        },
                        "roll_angle": {
                            "value": 1.75177
                        },
                        "yaw_angle": {
                            "value": 4
                        }
                    },
                    "race": {
                        "confidence": 99.471,
                        "value": "Asian"
                    },
                    "smiling": {
                        "value": 87.1365
                    }
    复制代码

    上述结果中,

    年龄age为17,误差在5岁
    性别为female,表示女,置信度为99%
    种族为亚洲Asian,
    微笑度 87%

    和图片比较一下,还是比较一致的

     

    3. 程序实现

    SDK如下:

    复制代码
    <?PHP
    /**
    * Face++ PHP SDK
    * author: Tianye
    * since:  2013-12-11
    **/
    class Facepp{
        ######################################################
        ### If you choose Amazon(US) server,please use the ###
        ### http://apius.faceplusplus.com/v2               ###
        ### or                                             ###
        ### https://apius.faceplusplus.com/v2              ###
        ######################################################
        var $server = 'http://apicn.faceplusplus.com/v2';
        #var $server = 'https://apicn.faceplusplus.com/v2';
        #var $server = 'http://apius.faceplusplus.com/v2';
        #var $server = 'https://apius.faceplusplus.com/v2';
    
        #############################################
        ### set your api key and api secret here. ###
        #############################################
        var $api_key = '{your API KEY}';
        var $api_secret = '{your API SECRET}';
    
        public function __construct($api_key=NULL, $api_secret=NULL, $server=NULL){
            if($api_key){
                $this->api_key = $api_key;
            }
            if($api_secret){
                $this->api_secret = $api_secret;
            }
            if($server){
                $this->server = $server;
            }
        }
    
        /**
        * @param $method : The Face++ API 
        * @param $params : Request Parameters
        * @return : Array {'http_code':'Http Status Code', 'request_url':'Http Request URL','body':' JSON Response'}
        **/
        public function execute($method,$params){
            if(empty($params)){
                $params=array();
            }
            $params['api_key'] = $this->api_key;
            $params['api_secret'] = $this->api_secret;
    
            return $this->request("{$this->server}{$method}",$params);
        }
    
        private function request($request_url , $request_body){
            $useragent = 'Faceplusplus PHP SDK/1.0';
            $curl_handle = curl_init();
            curl_setopt($curl_handle, CURLOPT_URL, $request_url);
            curl_setopt($curl_handle, CURLOPT_FILETIME, TRUE);
            curl_setopt($curl_handle, CURLOPT_FRESH_CONNECT, FALSE);
            curl_setopt($curl_handle, CURLOPT_CLOSEPOLICY, CURLCLOSEPOLICY_LEAST_RECENTLY_USED);
            curl_setopt($curl_handle, CURLOPT_MAXREDIRS, 5);
            curl_setopt($curl_handle, CURLOPT_HEADER, FALSE);
            curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
            curl_setopt($curl_handle, CURLOPT_TIMEOUT, 5184000);
            curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 120);
            curl_setopt($curl_handle, CURLOPT_NOSIGNAL, TRUE);
            curl_setopt($curl_handle, CURLOPT_REFERER, $request_url);
            curl_setopt($curl_handle, CURLOPT_USERAGENT, $useragent);
            if (extension_loaded('zlib')){
                curl_setopt($curl_handle, CURLOPT_ENCODING, '');
            }
            curl_setopt($curl_handle, CURLOPT_POST, TRUE);
            if(array_key_exists('img',$request_body)){
                $request_body['img'] = '@'.$request_body['img'];
            }else{
                $request_body=http_build_query($request_body);
            }
            curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $request_body);
            $response_text = curl_exec($curl_handle);
            $reponse_header = curl_getinfo($curl_handle);
            curl_close($curl_handle);
            return array('http_code'=>$reponse_header['http_code'],'request_url'=>$request_url,'body'=>$response_text);
        }
    }
    复制代码

    调用方式如下:

    复制代码
    <?PHP
    require_once 'facepp_sdk.php';
    ########################
    ###     example      ###
    ########################
    $facepp = new Facepp();
    
    #detect local image 
    $params=array('img'=>'{image file path}');
    $params['attribute'] = 'gender,age,race,smiling,glass,pose';
    $response = $facepp->execute('/detection/detect',$params);
    print_r($response);
    
    #detect image by url
    $params=array('url'=>'http://www.faceplusplus.com.cn/wp-content/themes/faceplusplus/assets/img/demo/1.jpg');
    $response = $facepp->execute('/detection/detect',$params);
    print_r($response);
    
    if($response['http_code']==200){
        #json decode 
        $data = json_decode($response['body'],1);
        #get face landmark
        foreach ($data['face'] as $face) {
            $response = $facepp->execute('/detection/landmark',array('face_id'=>$face['face_id']));
            print_r($response);
        }
        #create person 
        $response = $facepp->execute('/person/create',array('person_name'=>'unique_person_name'));
        print_r($response);
    
        #delete person
        $response = $facepp->execute('/person/delete',array('person_name'=>'unique_person_name'));
        print_r($response);
    
    }
    复制代码

    在微信中再将结果整理成文本消息就可以了。

     

    4. 效果展示

    下面是实际使用结果:

    漂亮/帅气指数鉴定技术

    近亲及亲子鉴定技术

    男人味/女人味鉴定技术

     原文:http://www.cnblogs.com/txw1958/archive/2013/02/04/weixin-if20-face-recognition.html 

     

    5.账号体验

    方倍工作室微信公众平台账号关注方法:
    1. 微信通讯录-添加朋友-查找公众号-搜索“方倍工作室”
    2. 微信通讯录-添加朋友-搜号码-输入“pondbaystudio”
    3. 使用微信扫描下面的二维码

     

     

     

    原文:http://www.cnblogs.com/txw1958/archive/2013/02/04/weixin-if20-face-recognition.html 

     

     

     

    人脸识别

    这个怎么说,就是用户通过微信发送照片,照片是存到微信服务器的,微信给我发一个图片url,我再把这个url转给face++,face++将分析结果给我发回来,我再把这些数据简单处理下,反馈给微信用户(当然,中间还隔了层微信服务器)。

    整个过程中,我所做的就是简单的json数据处理,什么高端的图像处理什么的都跟我不沾边,哈哈~

    首先当然是到http://cn.faceplusplus.com/注册,获取API_SECRET、API_KEY。

    而后推荐看文档,http://cn.faceplusplus.com/dev/getting-started/api2info/,当然直接跟着我来一遍也行。

    先来个人脸检测吧,检测出性别、年龄、种族。

    看了示例文档后,发现detect调用后返回的json的结构表示出来大概是这样:

    复制代码
    复制代码
    type Faceslice struct{
         Face []struct{
             Attribute struct{
                 Age struct{
                     Range float64
                     Value float64
                 }
                 Gender struct{
                     Confidence float64
                     Value string
                 }
                 Race struct{
                     Confidence float64
                     Vaule string
                 }
             }
             Face_id string
             Position struct{
                 Center struct{
                     X float64
                     Y float64
                 }
                 Eye_left struct{
                     X float64
                     Y float64
                 }
                 Eye_right struct{
                     X float64
                     Y float64
                 }
                 Height float64
                 Mouth_left struct{
                     X float64
                     Y float64
                 }
                 Mouth_right struct{
                     X float64
                     Y float64
                 }
                 Nose struct{
                     X float64
                     Y float64
                 }
                 Width float64
             }
             Tag string
         }
         Img_height int
         Img_id string
         Img_width int
         Session_id string
         url string
     }
    复制代码
    复制代码

    解析json数据:

    复制代码
    func DecodeDetect(data []byte) Faceslice{
         var f Faceslice
         json.Unmarshal(data,&f)
         return f
    }
    复制代码

    接着还是来写个get函数吧:

    复制代码
    复制代码
    func get(url string)(b []byte,err error){
         res,e:=http.Get(url)
         if e!=nil{
             err=e
             return
         }
         data,e:=ioutil.ReadAll(res.Body)
         if e!=nil{
             err=e
             return
         }
         res.Body.Close()
         return data,nil
    }
    复制代码
    复制代码

    调用face++接口并返回相应的数据:

    复制代码
    复制代码
    const apiurl="https://apicn.faceplusplus.com"
    
    func DetectionDetect(picurl string)detection.Faceslice{
         url:=apiurl+"/v2/detection/detect?url="+picurl+"&api_secret="+apisecret+"&api_key="+apikey
         tmp,_:=get(url)
         return detection.DecodeDetect(tmp)
    }
    复制代码
    复制代码

    刚刚上面的示例只是简单考虑了文本信息,现在要传递的是图片信息,所以做个简单的修改:

    复制代码
    复制代码
    type Request struct{
         ToUserName string
          FromUserName string
          CreateTime time.Duration
          MsgType string
          Content string
          PicUrl string
          MsgId int
    }
    复制代码
    复制代码

    Action函数里也该有所修改,判定下msg.MsgType,如果是text,则跟刚才一样处理,如果是image,则有新的处理方法。

    我一个就做了两个简单的处理,一个是年龄、性别、种族,还有就是如果照片里是两个人,则给出五官及整体的相似度值。

    相似度的代码直接放下面吧:

    复制代码
    复制代码
    package recognition
    
     import(
         "encoding/json"
     )
    
     type Compare struct{
         Component_similarity struct{
             Eye float64
             Mouth float64
             Nose float64
             Eyebrow float64
         }
         Session_id string
         Similarity float64
    }
    
     func DecodeCompare(data []byte)Compare{
         var c Compare
         json.Unmarshal(data,&c)
         return c
    }
    复制代码
    复制代码
    复制代码
    复制代码
    func RecognitionCompare(face1id,face2id string)recognition.Compare{
         url:=apiurl+"/v2/recognition/compare?api_secret="+apisecret+"&api_key="+ apikey+"&face_id2="+face2id+"&face_id1="+face1id
         tmp,_:= get(url)
         return recognition.DecodeCompare(tmp)
    }
    复制代码
    复制代码

     

    判定图片里有几个人,一个人输出性别、年龄,两个人输出相似度,三个及以上,暂未判定:

    复制代码
    复制代码
    if msg.MsgType=="image"{
             var faceslice detection.Faceslice
             faceslice=facepp.DetectionDetect(msg.PicUrl)
             switch len(faceslice.Face){
             case 0:
                 resp.Content="请上传有脸的人物照片!"
             case 1:
                 attribute:=faceslice.Face[0].Attribute
                 age:=attribute.Age
                 gender:=attribute.Gender
                 var faceGender string
                 if gender.Value=="Male"{
                     faceGender=""
                 }else{
                     faceGender=""
                 }
                 faceAgeValue:=fmt.Sprintf("%d",int(age.Value))
                 faceAgeRange:=fmt.Sprintf("%d",int(age.Range))
                 resp.Content="性别:"+faceGender+"\n"+"年龄:"+faceAgeValue+""+faceAgeRange+")"
             case 2:
                 face1id:=faceslice.Face[0].Face_id
                 face2id:=faceslice.Face[1].Face_id
                 var compare recognition.Compare
                 compare=facepp.RecognitionCompare(face1id,face2id)
                 resp.Content="眼睛相似度:"+fmt.Sprintf("%f",compare.Component_similarity.Eye)+"\n"+"嘴巴相似度:"+fmt.Sprintf("%f",compare.Component_similarity.Mouth)+"\n"+"鼻子相似度:"+fmt.Sprintf("%f",compare.Component_similarity.Nos    e)+"\n"+"眉毛相似度:"+fmt.Sprintf("%f",compare.Component_similarity.Eyebrow)+"\n"+"整体相似度:"+fmt.Sprintf("%f",compare.Similarity)
             default:
                 resp.Content="照片里人物太多了,暂不分析!"
             }
     }

     

    展开全文
  • 微信公众号身份证OCR识别的技术 一、微信公众号身份证OCR识别的技术应用背景 在实名认证的大环境下,为了提高在移动终端上进行身份证信息识别和验真的速度和准确率,我司研发了一款应用于微信公众号的身份证OCR...

    微信公众号身份证OCR识别的技术

    一、微信公众号身份证OCR识别的技术应用背景

    在实名认证的大环境下,为了提高在移动终端上进行身份证信息识别和验真的速度和准确率,我司研发了一款应用于微信公众号的身份证OCR识别的SDK,推向市场一段时间后,反应普遍很好。

    二、通过微信公众号进行身份证拍照的技术简介

    微信公众号上的身份证OCR识别的SDK可支持Android、iOS主流移动操作系统,android平台提供jar包,ios提供静态库.a文件。APP直接调用微信公众号的身份证OCR识别的技术的SDK后,用户可通过手机、平板电脑等移动端设备对身份证进行拍摄识别即可自动识别身份证信息(如图-1所示);

    如图-1所示

    微信公众号上的身份证OCR识别技术可部署在识别服务器上,可支持Linux 32/64位操作系统、Windows 32位/64位操作系统。用户还可部署到自有服务器上,APP可直接调用微信公众号上身份证OCR识别的技术服务识别身份证信息。

    使用微信公众号的身份证OCR识别技术后,大大地提升了APP的用户体验。

    三、微信公众号的身份证OCR识别的技术功能特点

    1.识别身份证种类多:可识别二代身份证(包含汉族身份证和少数民族身份证)、香港身份证、澳门身份证、台湾身份证及部分国外身份证;

    2.识别速度快:单张微信公众号上拍照识别身份证的技术速度小于2 秒;

    3.通过调用识别功能Activity,实现APP应用程序接口调用,支持JAVA、Object-C等多种语言开发调用。

    四、微信公众号的身份证OCR识别技术主要应用领域

    1.金融保险:移动展业、移动查勘录入身份证信息;

    2.金融P2P:实名认证;

    3.银行:直销银行、手机银行实名认证;

    4.移动支付:实名认证;

    展开全文
  • 我们前一篇已经讲了,微信平台(不管是订阅号还是服务号)和我们的网站进行交互时,都是通过微信平台开放给外部系统的接口调用来实现的,也就是说,粉丝向公众号发送一次交互(文字,图片,声音或者菜单点击都算交互...
    我们前一篇已经讲了,微信平台(不管是订阅号还是服务号)和我们的网站进行交互时,都是通过微信平台开放给外部系统的接口调用来实现的,也就是说,粉丝向公众号发送一次交互(文字,图片,声音或者菜单点击都算交互)后,微信平台会向你配置的url所对应的网站发出调用请求,来执行你的网站的代码,在代码中你进行各种处理后返回一个处理结果。
    

               你的网站具体使用什么语言来开发取决于你自己的爱好,不过我建议大家使用php来做,因为目前做web开发php是最方便的,当然你也可以用java写,没关系的,我们以php为例说明。

             微信平台在配置url时会验证一下你对应的这个url的网站是否真实存在,是否是你自己的网站。验证的原理很简单,你首先填写一个Token(你不用管这个是什么,只要记住它其实就是一个字符串符号,用来生成一个代表你自己身份的签名),然后填写你的网站的url,点击提交,如下图。


                平台就会向这个url所对应的网站发送一个GET请求,同时携带4个参数。参数参考图2的说明。如下图。



           其中timestamp是一个时间戳。时间戳其实就是从 1970年 1月1日至当前时间的总秒数。你就数吧,从1970年 1月 1日到我们现在这个时刻一共流逝了多少秒那么这个时间戳就是多少。所以时间戳任何时刻都是不同的。Nonce和echostr都是平台产生的随机数。Signature也就是签名,它是经过如下计算得到的:

           将当前时间戳(timestamp),nonce以及你输入的TOKEN按照字母顺序排序后拼接在一起形成一个字符串。例如: timestamp是345632,nonce是132a,TOKEN是123,那么我们先按照字母顺序排列,得到这样的顺序:123,132a,345632.然后拼接得到:123132a345632.最后经过SHA1加密运算得到签名Signature:E69E5E13D8B045923EF1BE38DF938F5621CA3004。SHA1是一个加密算法,细节这里就不讲了。这些参数一会都会通过查询参数的形式发送给我们网站的。

    为了能够接受这些参数我们需要一个自己的php网站。Ok,我们现在就开始搭建这样的一个网站。

           1. 先下载WAMP集成安装套件,这个很简单,大家一路点击“下一步”,最后点击一下“完成”就可以了,我是直接安装在C盘根目录的,安装好了以后的目录结构 如下图. 安装完成后我们可以看到,我们需要的apache,mysql和php都已经安装好了,而且默认帮你安装了一个管理工具,非常方便。最重要的就是www这个目录,这个是就我们即将要创建的网站的根目录。



    2. 进入www目录,新建一个index.php的文件,在里面只写入一行代码,如下图所示。




                  然后在浏览器里面输入localhost,如果出现上图的页面,说明我们的服务器环境是已经ok,我们就可以继续下一步了。

     3.      接下来,我们开始代码处理。我们首先获取平台传过来的4个参数,

     

    具体的代码见下面,里面已经有很详细的说明了哦。这里再说一下,为什么使用php,大家看到没有,用php 代码只有不到100行,而我之前用java实现过同样的功能,却花了500多行,这得益于php的很多函数以及帮我们做好了,我们可以直接使用。所以,php特别适合中小型网站的哦开发哦。大家也可以用其他语言换个方式实现一下试试。






            这里再补充解释一下上面的代码:代码的处理过程是这样的,将传过来的时间戳timestamp,随机数nonce和你自己输入的TOKEN(你自己输入的,所以当然知道TOKEN是多少)排序,拼接,SHA1处理,最后得到一个签名。

     

            因为我们得到这个签名的过程和平台处理的过程是一模一样的,所以我们得到的签名和平台发送给我们的签名Signature的值应该是一模一样的。

            将得到的结果和传过来的签名Signature比较,如果相等,就返回echostr(echostr也是平台发给我们的参数哦)给平台,告诉平台我已经接受到了你的请求,而且这个请求在网络传输的过程中没有被篡改(因为签名相等)。这样验证就通过了,相当于和平台和我们的网站之间建立了一个可信的通信通道。

         如果你看到平台显示下面的信息,说明验证通过了,你就可以正式开始你的微信开发了。





    .2. 使用php开发微信服务器端


              我们的微信商城其实就是一个web程序,只不过这个web程序的客户端不再是浏览器而是微信平台了,所以,任何支持web服务器端开发的语言都可以作为我们微信商城的开发语言,例如Java、php等。为什么这里我选择php呢,因为php是目前为止最适合web开发的语言,而且随着我们的深入,你会发现php在web开发上的强大之处,很多java要很多行代码才能够实现的功能,php只要一句代码就可以很好的实现了。所以,我们选择php作为我们的示例开发语言。

            那么,大家在使用php开发时,我相信一提到调试,很多人还是会觉得很头疼,特别是新手更加是这样。我见过很多人抱怨php调试非常不方便,只能使用一些echo,print等输出语句输出变量值来进行调试,这样的确是非常麻烦的,因为这些输出语句无法设置断点。所以,我这里首先帮大家解决php断点调试的问题,因为没有这个断点调试的“利器”,以后的开发中出现问题,你想解决是很痛苦的。

           说起php的断点调试,我相信很多同学首先想到的就是zend studio+zend debugger,没错,你可以这么做,但是,这么做就意味着你需要手动配置很多东西,而且还不一样能保证停留在断点处。这里,我就不饶湾子了,我教大家一个很方便的工具,直接安装一下就可以原来调试php了。

           这个工具就是XAMPP+PhpEclipse的组合,其中XAMPP是一个集成安装包,里面包括了:Apache, MySQL、PHP和Perl。XAMPP其中的A代表Apache,M代表MySQL,第一个P代表PHP,第2个P代表Perl.这个工具自身携带了php调试功能xdbug,大家安装以后几乎不需要特意配置就可以用来调试php了。

     

     

    下面请跟着我一步步来操作:

    1.打开http://www.apachefriends.org/zh_cn/download.html,下载XAMPP for Windows1.8.2 & 1.8.3


    2.     解压该压缩包,并双击    xampp-win32-1.8.0-VC9-installer.exe

    3.       一路点Next,在选择文件安装位置时,选择安装在C:\盘根目录。




    4.  等待安装



    5. 完成。



    6.     完成后会自动打开控制面板。其中1处是启动各种服务的按钮,2 是配置各种服务的按钮,3是查看各种服务的日志的按钮。

    7.    点击Apache,MySql   的Start按钮,启动apache web服务器和mysql 数据库服务器,如下图,能看到Pid和ports的下方出现了 值 时表示服务启动成功 。

         如果出现启动报错时,检查一下是否 相关的端口被占用了,修改配置文件里面的相关端口的配置后再重新启动试试。




         下载并解压phpeclipse,点击运行,你会发现聪明的phpeclipse已经自动发现了xampp,并且已经自动帮你配置好了。




            接下来很重要的一步,我们将创建一个php网站项目,并且验证一下我们的xampp是否能对我们的php网站进行调试。只有我们的调试能正常进行,以后的课程中我才能一步步的帮大家分析微信平台和我们的网站的交互过程的细节,大家才能真正明白原理,然后大家在实际中遇到问题时也可以使用调试来分析解决。

     

           1.    首先,新建一个php项目 。增加一个php文件,里面随便加一些最简单的代码。并设置几个断点。这里注意:设置断点时一定不要双击来设置,一定要通过在左侧右键,然后在弹出的右键菜单里面选择:“Toggle Xdebug BreakPoint”来设置。这是因为双击设置的是java的断点,而我们是需要对php设置断点,必须通过右键的方式来设置,这样设置的才是php的断点,这样的断点XDebug才可以识别。否则,你很容易会出现莫名其妙的无法在断点处停住的问题。







    2.   接下来,打开我们的xampp的安装目录,我的是:C:\xampp\php,用记事本打开里面的php.ini配置文件。我们要把里面的最后一部分关于xdebug的配置前的注释打开。修改好之后的截图如下:







           这样,我们就打开了xampp的xdebug调试功能。如果你不是很肯定是否已经打开了该调试功能,可以自己创建任意一个php项目,在里面写上一个文件,在该文件里面写上:phpinfo();然后执行以下,看看是否有如下输出:





    3.      这样,我们已经完成了服务器端的配置。接下来需要在我们的phpeclipse里面设置一下,让我们的ide能够和我们服务器端的xdebug通信。跟我来。打开windows-prefrences下面的phpeclipse,按照如下图所示 检查是否配置正确。




    4.       接下来就可以测试一下我们的调试功能是否能正常调试了。一起来。在file.php上右击,选择debug as->debugconfiguration   




    5.   配置 完保存后,以后调试时,只需要在工具栏的那个debug图标下选择我们刚才的配置就可以进行调试了,如下图。







    6.      这时,我们在phpeclipse里面自带的浏览器或者在ie浏览器里面输入:http://localhost:8080/phpTest/file.php?XDEBUG_SESSION_START=testID
    注意后面的参数:XDEBUG_SESSION_START=testID这里的testID 就是我们之前在debug配置里面设置的标识字符串。如图。




    7. 最后,停在断点的效果如下图所示。





         有了断点单步调试的功能,接下来我们不管做什么php网站,都方便很多了。在下一讲,我将结合php单步调试给大家深入分析微信商城开发的原理。

    展开全文
  • 实人认证:是指依托活体检测、人脸比对等生物识别技术、证件OCR识别技术等进行的自然人真实身份的校验服务。...我们知道,微信公众号开发中,jssdk中只有图片相关的接口方案,并没有捕获人脸相关的接口服务,...
  • 过年前后做了个微信公众号项目,已经过去一段时间了,抽空回忆总结下基本流程吧,不然很快估计自己就忘了。。 微信公众平台官网:https://mp.weixin.qq.com 文章目录一、注册公众号二、了解公众号管理页面三、必备...
  • 微信小程序-OCR信息识别 相关代码,github: ... 一、环境的搭建 微信开发工具下载地址: https://dldir1.qq.com/WechatWebDev/1.0.0/201806120/wechat_devtools_1.02.1806120_x64.exe   ...
  • 人脸识别特指利用分析比较人脸视觉特征信息进行身份鉴别的计算机技术。人脸识别是一项热门的计算机技术研究领域,可以将人脸明暗侦测,自动调整动态曝光补偿,人脸追踪侦测,自动调整影像放大;它属于生物特征识别...
  • 由于客户的需求,需将
  • 现在关于人脸识别的SDK其实有很多,诸如face++、百度大脑之类的,他们都能为开发者免费提供人脸识别接口。阿里也和face++合作,实现了支付宝的刷脸支付。但是很遗憾,网上关于识别一段视频中的用户行为(诸如摇...
  • 前言 ...。。2333 ...于是,需要考虑的是,如何获取微信企业号中用户的身份,以及将用户身份与自有系统进行关联。 一、建立企业应用并配置可信域名 在微信的管理界面里面,建立一个企业应用...
  • 公众号信息 appid:是公众号开发识别码,配合开发者密码可调用公众号的接口能力...该URL是开发者用来接收和响应微信消息和事件的接口URL (必须以http://或https://开头,分别支持80端口和443端口) Token:可任意...
  • 微信公众号开发教程(一)验证接入本篇文章主要介绍了微信公众号开发接入详细流程,希望对刚接触公众号开发的同学有所帮助,有兴趣的同学可多多关注叩丁狼公众号,后续会更新不同的公众号小案例。公众号的分类我们平常...
  • 此小程序主要调用了百度AI菜品识别接口,项目可根据用户上传的图片来判断图片中菜品的名称/菜品的热量,并获取百度百科中关于菜品的详细说明。在wxml页面中,为了使得菜品图片呈现的更鲜艳,加了一个具有小圆点...
  • 先说一下需求吧,小程序微信登录,用户授权获取个人信息。...之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。 用户授权获取个人信息: wx.getUserInfo(...
  • C#微信开发

    2017-12-24 10:35:37
    C#开发微信门户及应用教程   作者:伍华聪   C#开发微信门户及应用(1)--开始使用微信接口 6 1、微信账号 6 2、微信菜单定义 7 3、接入微信的链接处理 8 4、使用开发方式创建菜单 14 5、我创建的菜单案例 17 C#...
  • 微信商城开发系列教程第二讲》 公众号平台接口配置及调试 [本系列文章转载自:walkingmanc(作者:陈伟)] 在上一篇中,我们讲解了如何申请微信公众号,公众平台开发的基本原理以及服务器环境的...
  • 你的服务器没有正确响应Token验证,请阅读消息接口使用指南 微信 微信公众平台开发模式 平台 消息 接口 启用 URL Token作者:http://txw1958.cnblogs.com/ 本系统教程以微信公众平台应用天气神(账号...
1 2 3 4 5 ... 20
收藏数 3,132
精华内容 1,252
关键字:

微信开发身份识别接口