StoreMiniAuthIcp.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  1. <?php
  2. namespace app\models;
  3. use yii\behaviors\TimestampBehavior;
  4. use yii\db\ActiveRecord;
  5. /**
  6. * Class StoreMedia
  7. * @package app\models
  8. * @property integer $id
  9. * @property integer $store_id
  10. * @property integer $mini_id
  11. * @property integer $face_is_finish
  12. * @property integer $face_status
  13. * @property integer $face_along_with_auth_result
  14. * @property string $face_verify_url
  15. * @property string $face_verify_qrcode_url
  16. * @property string $task_id
  17. * @property string $data
  18. * @property string $hints
  19. * @property string $procedure_id
  20. * @property string $pay_url
  21. * @property string $pay_qrcode_url
  22. * @property string $ocr_data
  23. * @property integer $procedure_status
  24. * @property string $orderid
  25. * @property string $refill_reason
  26. * @property string $fail_reason
  27. * @property string $icp_audit
  28. * @property integer $sms_verify_status
  29. * @property integer $is_use_service
  30. * @property integer $is_delete
  31. * @property integer $created_at
  32. * @property integer $updated_at
  33. **/
  34. class StoreMiniAuthIcp extends \yii\db\ActiveRecord
  35. {
  36. /**
  37. * @inheritdoc
  38. */
  39. public static function tableName()
  40. {
  41. return '{{%store_mini_auth_icp}}';
  42. }
  43. /**
  44. * @inheritdoc
  45. */
  46. public function rules()
  47. {
  48. return [
  49. [["id", "store_id", "mini_id", 'procedure_status', 'sms_verify_status', 'created_at', 'updated_at', 'is_delete',
  50. 'face_is_finish', 'face_status', 'face_along_with_auth_result', 'is_use_service'], 'integer'],
  51. [['task_id', 'data', 'hints', 'procedure_id', 'pay_url', 'orderid', 'refill_reason', 'fail_reason', 'icp_audit',
  52. 'pay_qrcode_url', 'face_verify_url', 'face_verify_qrcode_url', 'ocr_data'], 'string'],
  53. [['created_at', 'updated_at'], 'safe']
  54. ];
  55. }
  56. public function behaviors()
  57. {
  58. return [
  59. [
  60. 'class' => TimestampBehavior::class
  61. ]
  62. ];
  63. }
  64. // 人脸核身任务是否已完成
  65. /**
  66. * 人脸核身任务是否已完成:未完成
  67. */
  68. const FACE_NO_FINISH = 0;
  69. /**
  70. * 人脸核身任务是否已完成:完成
  71. */
  72. const FACE_FINISH = 1;
  73. //0. 未开始;1. 等待中;2. 失败;3. 成功。返回的 is_finish 字段为 true 时,face_status 才是最终状态。
  74. /**
  75. * 人脸核身任务状态枚举:未完成
  76. */
  77. const FACE_STATUS_INIT = 0;
  78. /**
  79. * 人脸核身任务状态枚举:等待中
  80. */
  81. const FACE_STATUS_WAITING = 1;
  82. /**
  83. * 人脸核身任务状态枚举:失败
  84. */
  85. const FACE_STATUS_FAIL = 2;
  86. /**
  87. * 人脸核身任务状态枚举:成功
  88. */
  89. const FACE_STATUS_SUCCESS = 3;
  90. const FACE_STATUS_NAME = [
  91. self::FACE_STATUS_INIT => '人脸核身任务状态:未开始',
  92. self::FACE_STATUS_WAITING => '人脸核身任务状态:等待中',
  93. self::FACE_STATUS_FAIL => '人脸核身任务状态:失败',
  94. self::FACE_STATUS_SUCCESS => '人脸核身任务状态:成功',
  95. ];
  96. // 发起时 along_with_auth 填 true 时有效:9. 认证短信核验通过
  97. // 9. 认证短信核验通过
  98. const ALONG_WITH_AUTH_SUCCESS = 9;
  99. //未短信核验
  100. const ALONG_WITH_AUTH_NO = 0;
  101. /**
  102. * 获取任务流程状态名称:未开启任务流程
  103. */
  104. const PROCEDURE_STATUS_NOT_START = 0;
  105. /**
  106. * 获取任务流程状态名称:等待支付认证审核费用
  107. */
  108. const PROCEDURE_STATUS_AUTH_PAY_LOADING = 15;
  109. /**
  110. * 获取任务流程状态名称:认证审核费用支付成功
  111. */
  112. const PROCEDURE_STATUS_AUTH_PAY_SUCCESS = 16;
  113. /**
  114. * 获取任务流程状态名称:认证审核中
  115. */
  116. const PROCEDURE_STATUS_AUTH_AUDIT = 17;
  117. /**
  118. * 获取任务流程状态名称:认证审核驳回
  119. */
  120. const PROCEDURE_STATUS_AUTH_AUDIT_REJECT = 18;
  121. /**
  122. * 获取任务流程状态名称:认证审核通过
  123. */
  124. const PROCEDURE_STATUS_AUTH_AUDIT_SUCCESS = 19;
  125. /**
  126. * 获取任务流程状态名称:认证审核最终失败(不能再修改)
  127. */
  128. const PROCEDURE_STATUS_AUTH_AUDIT_FINAL_FAIL = 20;
  129. /**
  130. * 获取任务流程状态名称:创建备案审核单失败
  131. */
  132. const PROCEDURE_STATUS_ICP_AUDIT_FAIL = 21;
  133. /**
  134. * 获取任务流程状态名称:备案平台审核中
  135. */
  136. const PROCEDURE_STATUS_ICP_PLATFORM_AUDIT = 22;
  137. /**
  138. * 获取任务流程状态名称:备案平台审核驳回
  139. */
  140. const PROCEDURE_STATUS_ICP_PLATFORM_AUDIT_REJECT = 23;
  141. /**
  142. * 获取任务流程状态名称:备案管局审核中
  143. */
  144. const PROCEDURE_STATUS_ICP_GOVERNMENT_AUDIT = 24;
  145. /**
  146. * 获取任务流程状态名称:管局审核驳回
  147. */
  148. const PROCEDURE_STATUS_ICP_GOVERNMENT_AUDIT_REJECT = 25;
  149. /**
  150. * 获取任务流程状态名称:认证及备案完成
  151. */
  152. const PROCEDURE_STATUS_SUCCESS = 26;
  153. /**
  154. * 获取任务流程状态名称
  155. * @param $status
  156. * @return string[]
  157. */
  158. const PROCEDURE_STATUS_NAME = [
  159. self::PROCEDURE_STATUS_NOT_START => '人身核验通过 认证资料未填写或提交',
  160. self::PROCEDURE_STATUS_AUTH_PAY_LOADING => '等待支付认证审核费用',
  161. self::PROCEDURE_STATUS_AUTH_PAY_SUCCESS => '认证审核费用支付成功',
  162. self::PROCEDURE_STATUS_AUTH_AUDIT => '认证审核中',
  163. self::PROCEDURE_STATUS_AUTH_AUDIT_REJECT => '认证审核驳回',
  164. self::PROCEDURE_STATUS_AUTH_AUDIT_SUCCESS => '认证审核通过',
  165. self::PROCEDURE_STATUS_AUTH_AUDIT_FINAL_FAIL => '认证审核最终失败(不能再修改)',
  166. self::PROCEDURE_STATUS_ICP_AUDIT_FAIL => '创建备案审核单失败',
  167. self::PROCEDURE_STATUS_ICP_PLATFORM_AUDIT => '备案平台审核中',
  168. self::PROCEDURE_STATUS_ICP_PLATFORM_AUDIT_REJECT => '备案平台审核驳回',
  169. self::PROCEDURE_STATUS_ICP_GOVERNMENT_AUDIT => '管局审核中',
  170. self::PROCEDURE_STATUS_ICP_GOVERNMENT_AUDIT_REJECT => '管局审核驳回',
  171. self::PROCEDURE_STATUS_SUCCESS => '认证及备案完成',
  172. ];
  173. //,仅当任务流程状态为 24(备案管局审核中)的时候才有效。1:等待核验中,2:核验完成,3:核验超时。
  174. const SMS_VERIFY_STATUS_VERIFY_INIT = 0;
  175. const SMS_VERIFY_STATUS_VERIFY = 1;
  176. const SMS_VERIFY_STATUS_SUCCESS = 2;
  177. const SMS_VERIFY_STATUS_TIMEOUT = 3;
  178. /**
  179. * 获取短信核验状态名称 仅当任务流程状态为 24(备案管局审核中)
  180. * @param $status
  181. * @return string[]
  182. */
  183. const SMS_VERIFY_STATUS_NAME = [
  184. self::SMS_VERIFY_STATUS_VERIFY_INIT => '未开始管局备案',
  185. self::SMS_VERIFY_STATUS_VERIFY => '等待核验中',
  186. self::SMS_VERIFY_STATUS_SUCCESS => '核验完成',
  187. self::SMS_VERIFY_STATUS_TIMEOUT => '核验超时',
  188. ];
  189. /**
  190. * @inheritdoc
  191. */
  192. public function attributeLabels()
  193. {
  194. return [
  195. 'id' => 'ID',
  196. 'store_id' => '商城ID',
  197. 'mini_id' => '小程序ID',
  198. 'task_id' => '人脸核身任务id',
  199. 'face_is_finish' => '人脸核身任务是否已完成',
  200. 'face_status' => '人脸核身任务状态枚举',
  201. 'face_along_with_auth_result' => '人脸核身任务',
  202. 'face_verify_url' => '人脸核身任务Url',
  203. 'face_verify_qrcode_url' => '人脸核身任务本地二维码Url',
  204. 'data' => '表单数据',
  205. 'hints' => '表单提交后错误提示',
  206. 'procedure_id' => '小程序认证及备案任务流程 id',
  207. 'pay_url' => '小程序认证认证审核费用付费链接',
  208. 'pay_qrcode_url' => '小程序认证认证审核费用付费链接二维码地址',
  209. 'ocr_data' => '营业执照身份证正反面数据 用作ocr识别使用',
  210. 'procedure_status' => '任务流程状态枚举',
  211. 'orderid' => '小程序后台展示的认证订单号',
  212. 'refill_reason' => '小程序认证审核单被驳回(procedure_status 为 18)时有效',
  213. 'fail_reason' => '小程序认证审核最终失败的原因(procedure_status 为 20)时有效',
  214. 'icp_audit' => '小程序备案相关信息错误原因',
  215. 'sms_verify_status' => '管局短信核验状态',
  216. 'is_use_service' => '是否使用服务商代缴模式',
  217. 'is_delete' => '',
  218. 'created_at' => '',
  219. 'updated_at' => '',
  220. ];
  221. }
  222. public function afterSave($insert, $changedAttributes)
  223. {
  224. parent::afterSave($insert, $changedAttributes); // TODO: Change the autogenerated stub
  225. //扣减商城认证次数
  226. if (isset($changedAttributes['is_use_service']) && intval($changedAttributes['is_use_service'])) {
  227. $store = Store::findOne($this->store_id);
  228. $store->mini_auth_num -= 1;
  229. if (!$store->save()) {
  230. debug_log(['errors' => $store->errors], 'wechatAuth.log');
  231. }
  232. }
  233. //如果失败就增加商城认证次数
  234. if (intval($this->procedure_status) === self::PROCEDURE_STATUS_AUTH_AUDIT_FINAL_FAIL && intval($this->is_use_service)) {
  235. $store = Store::findOne($this->store_id);
  236. $store->mini_auth_num += 1;
  237. if (!$store->save()) {
  238. debug_log(['errors' => $store->errors], 'wechatAuth.log');
  239. }
  240. }
  241. //如果是新增的话 就给原认证以及备案表增加认证以及备案数据
  242. if ($changedAttributes['procedure_status'] && intval($this->procedure_status)) {
  243. $miniAuth = StoreMiniAuth::findOne(['store_id' => $this->store_id, 'mini_id' => $this->mini_id]);
  244. if (!$miniAuth) {
  245. $miniAuth = new StoreMiniAuth();
  246. $miniAuth->store_id = $this->store_id;
  247. $miniAuth->mini_id = $this->mini_id;
  248. }
  249. $data = [];
  250. if ($this->data) {
  251. $data = json_decode($this->data, true);
  252. }
  253. if (!empty($data['auth_data'])) {
  254. $data['auth_data']['qualification'] = [
  255. 'media_id' => '',
  256. 'url' => ''
  257. ];
  258. $miniAuth->auth_form = json_encode($data['auth_data'], JSON_UNESCAPED_UNICODE);
  259. }
  260. //认证未成功 开始修改值
  261. if ($miniAuth->apply_status != 4) {
  262. //用大于等于是觉得哪个状态可能没及时处理到
  263. if ($this->procedure_status >= self::PROCEDURE_STATUS_AUTH_PAY_LOADING) {
  264. $miniAuth->task_status = 15;
  265. $miniAuth->apply_status = 1;
  266. }
  267. if ($this->procedure_status >= self::PROCEDURE_STATUS_AUTH_AUDIT) {
  268. $miniAuth->task_status = 12;
  269. $miniAuth->apply_status = 2;
  270. }
  271. if ($this->procedure_status >= self::PROCEDURE_STATUS_AUTH_AUDIT_REJECT) {
  272. $miniAuth->task_status = 12;
  273. $miniAuth->apply_status = 3;
  274. }
  275. if ($this->procedure_status >= self::PROCEDURE_STATUS_AUTH_AUDIT_SUCCESS && $this->procedure_status != self::PROCEDURE_STATUS_AUTH_AUDIT_FINAL_FAIL) {
  276. $miniAuth->task_status = 12;
  277. $miniAuth->apply_status = 4;
  278. }
  279. if ($this->procedure_status == self::PROCEDURE_STATUS_AUTH_AUDIT_FINAL_FAIL) {
  280. $miniAuth->task_status = 12;
  281. $miniAuth->apply_status = 5;
  282. }
  283. }
  284. $miniAuth->save();
  285. if ($this->procedure_status > self::PROCEDURE_STATUS_AUTH_AUDIT_FINAL_FAIL) {
  286. $miniIcp = StoreMiniIcp::findOne(['store_id' => $this->store_id, 'mini_id' => $this->mini_id]);
  287. if (!$miniIcp) {
  288. $miniIcp = new StoreMiniIcp();
  289. $miniIcp->store_id = $this->store_id;
  290. $miniIcp->mini_id = $this->mini_id;
  291. }
  292. $miniIcp->face_status = 3;
  293. $miniIcp->is_finish = 1;
  294. if (!empty($data['auth_data'])) {
  295. unset($data['auth_data'], $data['mini_id']);
  296. $data['icp_subject']['personal_info'] = [
  297. 'residence_permit' => [
  298. 'url' => '',
  299. 'media_id' => ''
  300. ]
  301. ];
  302. $miniIcp->icp_form = json_encode($data, JSON_UNESCAPED_UNICODE);
  303. }
  304. if ($miniIcp->icp_audit_status != 6) {
  305. if ($this->procedure_status >= self::PROCEDURE_STATUS_ICP_AUDIT_FAIL) {
  306. $miniIcp->icp_audit_status = -1;
  307. }
  308. if ($this->procedure_status >= self::PROCEDURE_STATUS_ICP_PLATFORM_AUDIT) {
  309. $miniIcp->icp_audit_status = 2;
  310. }
  311. if ($this->procedure_status >= self::PROCEDURE_STATUS_ICP_PLATFORM_AUDIT_REJECT) {
  312. $miniIcp->icp_audit_status = 3;
  313. }
  314. if ($this->procedure_status >= self::PROCEDURE_STATUS_ICP_GOVERNMENT_AUDIT) {
  315. $miniIcp->icp_audit_status = 4;
  316. }
  317. if ($this->procedure_status >= self::PROCEDURE_STATUS_ICP_GOVERNMENT_AUDIT_REJECT) {
  318. $miniIcp->icp_audit_status = 5;
  319. }
  320. if ($this->procedure_status >= self::PROCEDURE_STATUS_SUCCESS) {
  321. $miniIcp->icp_audit_status = 6;
  322. }
  323. }
  324. $miniIcp->save();
  325. }
  326. }
  327. }
  328. }