IdnAuth.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. /**
  3. * 身份认证服务
  4. * @author wesmiler
  5. */
  6. namespace app\weixin\service;
  7. class IdnAuth
  8. {
  9. // 文档 https://market.aliyun.com/products/57000002/cmapi025518.html?spm=5176.2020520132.101.3.1cca7218tmS1IZ#sku=yuncode1951800000
  10. protected static $apiUrl = 'http://idenauthen.market.alicloudapi.com';
  11. protected static $appKey = '203953968';
  12. protected static $appSecret = 'nbP0eTttVbGFjXSI8GbY04tE89Mnw9ow';
  13. protected static $appCode = '689f5d471a2140ea8091c8f4e979f8dd';
  14. protected static $errors = [
  15. '0000'=> '身份证信息匹配',
  16. '0001'=> '开户名不能为空',
  17. '0002'=> '开户名不能包含特殊字符',
  18. '0003'=> '身份证号不能为空',
  19. '0004'=> '身份证号不匹配或格式错误',
  20. '0007'=> '该身份证号码不存在',
  21. '0008'=> '身份证信息不匹配',
  22. '0010'=> '系统维护,请稍后再试',
  23. ];
  24. /**
  25. * 发生短信验证码
  26. * @param $realname 姓名
  27. * @param $idcard 身份证号码
  28. * @return array|bool
  29. */
  30. public static function check($realname, $idcard)
  31. {
  32. if(empty($realname) || empty($idcard)){
  33. return 2012;
  34. }
  35. // 参数配置
  36. $smsConfig = cmf_get_option('idenauth_config');
  37. $appKey = isset($params['appKey']) && $params['appKey']?trim($params['appKey']) : self::$appKey;
  38. $appCode = isset($params['appCode'])&&$params['appCode']?trim($params['appCode']) : self::$appCode;
  39. $appSecret = isset($params['appSecret'])&&$params['appSecret']?trim($params['appSecret']) : self::$appSecret;
  40. // 构建请求参数
  41. $headers = [
  42. "Authorization:APPCODE {$appCode}",
  43. "Content-Type:application/x-www-form-urlencoded; charset=UTF-8",
  44. ];
  45. $url = self::$apiUrl.'/idenAuthentication';
  46. $query = "idNo={$idcard}&name={$realname}";
  47. PRedis::set("idAurh:{$idcard}:request", ['url'=> $url,'query'=> $query,'headers'=> $headers], 600);
  48. $result = httpHeaderRequest($url,$query,'post',$headers);
  49. $respCode = isset($result['respCode'])? $result['respCode'] : '';
  50. PRedis::set("idAurh:{$idcard}:result", $result, 600);
  51. if($respCode != '0000'){
  52. $msg = isset(self::$errors[$respCode])? self::$errors[$respCode] : '身份证在线校验失败,可继续上传图片进行认证';
  53. return ['code'=> 'error', 'msg'=> $msg, 'result'=> $result];
  54. }
  55. return ['code'=> 'success', 'msg'=> '身份证匹配成功', 'result'=> $result];
  56. }
  57. }