CertificationService.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace services\member;
  3. use linslin\yii2\curl\Curl;
  4. use common\enums\StatusEnum;
  5. use common\models\member\Certification;
  6. use yii\helpers\Json;
  7. use yii\web\UnprocessableEntityHttpException;
  8. /**
  9. * Class CertificationService
  10. * @package services\member
  11. * @author jianyan74 <751393839@qq.com>
  12. *
  13. * 购买地址:https://market.aliyun.com/products/57124001/cmapi010401.html?#sku=yuncode440100000
  14. *
  15. */
  16. class CertificationService
  17. {
  18. const CODE = '';
  19. /**
  20. * @param $member_id
  21. * @return array|\yii\db\ActiveRecord|null
  22. */
  23. public function findByMemberId($member_id)
  24. {
  25. return Certification::find()
  26. ->where(['member_id' => $member_id])
  27. ->andWhere(['status' => StatusEnum::ENABLED])
  28. ->one();
  29. }
  30. /**
  31. * 解析返回
  32. *
  33. * @param string $identity_card_front 人面
  34. * @param string $identity_card_back 国徽
  35. */
  36. public function authentication($identity_card_front, $identity_card_back)
  37. {
  38. $front = $this->analysis($identity_card_front);
  39. $back = $this->analysis($identity_card_back, 'back');
  40. $model = new Certification();
  41. $model->loadDefaultValues();
  42. $model->realname = $front['name'];
  43. $model->address = $front['address'];
  44. $model->gender = $front['sex'];
  45. $model->nationality = $front['nationality'];
  46. $model->identity_card = $front['num'];
  47. $model->birthday = date('Y-m-d', strtotime($front['birth']));
  48. $model->front_is_fake = !empty($front['is_fake']) ? StatusEnum::ENABLED : StatusEnum::DISABLED;
  49. // 国徽识别
  50. $model->issue = $back['issue'];
  51. $model->start_date = date('Y-m-d', strtotime($back['start_date']));
  52. $model->end_date = date('Y-m-d', strtotime($back['end_date']));
  53. $model->back_is_fake = !empty($back['is_fake']) ? StatusEnum::ENABLED : StatusEnum::DISABLED;
  54. $model->identity_card_front = $identity_card_front;
  55. $model->identity_card_back = $identity_card_back;
  56. return $model;
  57. }
  58. /**
  59. * @param $picture
  60. * @param string $side 身份证正反面类型:face(人面) / back(国徽)
  61. * @return mixed|null
  62. * @throws UnprocessableEntityHttpException
  63. */
  64. public function analysis($picture, $side = 'face')
  65. {
  66. $curl = new Curl();
  67. $result = $curl->setHeaders([
  68. 'Content-Type' => 'application/json; charset=UTF-8',
  69. 'Authorization' => 'APPCODE ' . self::CODE,
  70. ])->setRawPostData(Json::encode([
  71. 'image' => $picture,
  72. 'configure' => [
  73. 'side' => $side
  74. ],
  75. ]))->post('http://dm-51.data.aliyun.com/rest/160601/ocr/ocr_idcard.json');
  76. $result = Json::decode($result);
  77. if ($result['success'] == true) {
  78. if ($side == "face" && strlen($result['num']) < 15) {
  79. throw new UnprocessableEntityHttpException('认证失败.');
  80. }
  81. return $result;
  82. }
  83. throw new UnprocessableEntityHttpException('认证失败.');
  84. }
  85. }
粤ICP备19079148号