<?php

namespace alipay;

require_once APP_PATH . 'alipay/aop/AopCertClient.php';
require_once APP_PATH . 'alipay/aop/AopCertification.php';
require_once APP_PATH . 'alipay/aop/request/AlipayUserCertifyOpenInitializeRequest.php';
require_once APP_PATH . 'alipay/aop/request/AlipayUserCertifyOpenCertifyRequest.php';
require_once APP_PATH . 'alipay/aop/request/AlipayUserCertifyOpenQueryRequest.php';

require_once APP_PATH . 'alipay/aop/AopClient.php';
require_once APP_PATH . 'alipay/aop/request/AlipayOpenPublicTemplateMessageIndustryModifyRequest.php';


/**
 * 证书类型AopClient功能方法使用测试
 * 1、execute 调用示例
 * 2、sdkExecute 调用示例
 * 3、pageExecute 调用示例
 */

class Aliverify
{

    public static function initVerify($temp)
    {
        global $config;
        $aop = new \AopCertClient();
        $res = [];
        $res['name'] = $temp['name'];
        $res['id_code'] = $temp['id_code'];
        
        $appCertPath = $config['alipay']['app_crt'];
        $alipayCertPath = $config['alipay']['public_crt'];
        $rootCertPath = $config['alipay']['root_crt'];
        
        $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
        $aop->appId = $config['alipay']['app_id'];
        $aop->rsaPrivateKey = $config['alipay']['private_key'];
        $aop->alipayrsaPublicKey = $aop->getPublicKey($alipayCertPath);//调用getPublicKey从支付宝公钥证书中提取公钥
        $aop->apiVersion = '1.0';
        $aop->signType = 'RSA2';
        $aop->postCharset='utf-8';
        $aop->format='json';
        $aop->isCheckAlipayPublicCert = true;//是否校验自动下载的支付宝公钥证书，如果开启校验要保证支付宝根证书在有效期内
        $aop->appCertSN = $aop->getCertSN($appCertPath);//调用getCertSN获取证书序列号
        $aop->alipayRootCertSN = $aop->getRootCertSN($rootCertPath);//调用getRootCertSN获取支付宝根证书序列号

        $request = new \AlipayUserCertifyOpenInitializeRequest();
        //$request = new AlipayUserCertifyOpenInitializeRequest ();  //TODO 官方这个地方写错了，应该用下面的代码才能实现

        $newsigndata=array();
        $newsigndata['outer_order_no']=md5(time());
        $newsigndata['biz_code']="FACE";
        $newsigndata['identity_param']['identity_type']="CERT_INFO";
        $newsigndata['identity_param']['cert_type']="IDENTITY_CARD";
        $newsigndata['identity_param']['cert_name']=$res['name'];
        $newsigndata['identity_param']['cert_no']= $res['id_code'];
        $newsigndata['merchant_config']['return_url']="https://juip.com/User/Index?realname=true";
        $newsigndata['face_contrast_picture']="xydasf==";
        $tosign=json_encode($newsigndata);
        $request->setBizContent($tosign);

        $result = $aop->execute ( $request); 
        
        $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
        $resultCode = $result->$responseNode->code;
        $certify_id = $result->$responseNode->certify_id;
        if(!empty($resultCode)&&$resultCode == 10000){
            $request = new \AlipayUserCertifyOpenCertifyRequest ();
            $data['certify_id'] = $certify_id;
            $tosign=json_encode($data);
            $request->setBizContent($tosign);
            $result = $aop->pageExecute($request,"GET");

            $res['certifyId'] = $certify_id;
            $res['url'] = $result;
            return $res;
        } else {
           return false;
        }
    }


    public static function getResult($certify_id)
    {
        global $config;
        $aop = new \AopCertClient();
        
        $appCertPath = $config['alipay']['app_crt'];
        $alipayCertPath = $config['alipay']['public_crt'];
        $rootCertPath = $config['alipay']['root_crt'];
        
        $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
        $aop->appId = $config['alipay']['app_id'];
        $aop->rsaPrivateKey = $config['alipay']['private_key'];
        $aop->alipayrsaPublicKey = $aop->getPublicKey($alipayCertPath);//调用getPublicKey从支付宝公钥证书中提取公钥
        $aop->apiVersion = '1.0';
        $aop->signType = 'RSA2';
        $aop->postCharset='utf-8';
        $aop->format='json';
        $aop->isCheckAlipayPublicCert = true;//是否校验自动下载的支付宝公钥证书，如果开启校验要保证支付宝根证书在有效期内
        $aop->appCertSN = $aop->getCertSN($appCertPath);//调用getCertSN获取证书序列号
        $aop->alipayRootCertSN = $aop->getRootCertSN($rootCertPath);//调用getRootCertSN获取支付宝根证书序列号

        $request = new \AlipayUserCertifyOpenQueryRequest ();
        $data['certify_id'] = $certify_id;
        $tosign=json_encode($data);
        $request->setBizContent($tosign);
        $result = $aop->execute ( $request); 
        $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
        $resultCode = $result->$responseNode->passed;
        if($resultCode == 'T'){
            return true;
        } else {
            return false;
        }

    }

    
    public static function initVerify2($temp)
    {
        global $config;
        $res = [];
        $res['name'] = $temp['name'];
        $res['id_code'] = $temp['id_code'];
        $c = new \AopClient;
        $c->gatewayUrl = "https://openapi.alipay.com/gateway.do";
        $c->appId = $config['alipay2']['app_id'];
        $c->rsaPrivateKey = $config['alipay2']['private_key'] ;
        $c->format = "json";
        $c->charset= "utf-8";
        $c->signType= "RSA2";
        $c->alipayrsaPublicKey = $config['alipay2']['public_key'];
        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称：alipay.open.public.template.message.industry.modify
        
        $request = new \AlipayUserCertifyOpenInitializeRequest();
        //$request = new AlipayUserCertifyOpenInitializeRequest ();  //TODO 官方这个地方写错了，应该用下面的代码才能实现

        //SDK已经封装掉了公共参数，这里只需要传入业务参数
        //此次只是参数展示，未进行字符串转义，实际情况下请转义
       
        $newsigndata=array();
        $newsigndata['outer_order_no']=md5(time());
        $newsigndata['biz_code']="FACE";
        $newsigndata['identity_param']['identity_type']="CERT_INFO";
        $newsigndata['identity_param']['cert_type']="IDENTITY_CARD";
        $newsigndata['identity_param']['cert_name']=$res['name'];
        $newsigndata['identity_param']['cert_no']= $res['id_code'];
        $newsigndata['merchant_config']['return_url']="https://juip.com/User/Index?realname=true";
        $newsigndata['face_contrast_picture']="xydasf==";
        $tosign=json_encode($newsigndata);
        $request->setBizContent($tosign);

        $result= $c->execute($request);
        
        $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
        $resultCode = $result->$responseNode->code;
        $certify_id = $result->$responseNode->certify_id;
        if(!empty($resultCode)&&$resultCode == 10000){
            $request = new \AlipayUserCertifyOpenCertifyRequest ();
            $data['certify_id'] = $certify_id;
            $tosign=json_encode($data);
            $request->setBizContent($tosign);
            $result = $c->pageExecute($request,"GET");

            $res['certifyId'] = $certify_id;
            $res['url'] = $result;
            return $res;
        } else {
           return false;
        }
    }

    
    public static function getResult2($certify_id)
    {
        //--------------------------------
        global $config;
        $aop = new \AopClient ();
        $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
        $aop->appId = $config['alipay2']['app_id'];;
        $aop->rsaPrivateKey = $config['alipay2']['private_key'] ;
        $aop->apiVersion = '1.0';
        $aop->signType = 'RSA2';
        $aop->postCharset='utf-8';
        $aop->format='json';
        $aop->alipayrsaPublicKey = $config['alipay2']['public_key'];
        
        $request = new \AlipayUserCertifyOpenQueryRequest ();
        $data['certify_id'] = $certify_id;
        $tosign=json_encode($data);
        $request->setBizContent($tosign);
        $result = $aop->execute ( $request); 
        $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
        $resultCode = $result->$responseNode->passed;
        if($resultCode == 'T'){
            return true;
        } else {
            return false;
        }
        // $resultCode = $result->$responseNode->passed;
        // if($resultCode == 'T'){
        //     return true;
        // } else {
        //     return false;
        // }

    }

   
}
