ProgressMiniForm.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\client\models\v1\third\ali;
  8. use app\models\AggregateQrcode;
  9. use app\models\MerchantInfo;
  10. use app\models\Store;
  11. use app\models\StoreAliMini;
  12. use app\models\StoreAliMiniVersion;
  13. use app\models\StoreMiniToken;
  14. use app\models\StoreSchedule;
  15. class ProgressMiniForm extends BaseForm
  16. {
  17. public function inits()
  18. {
  19. try {
  20. $store_id = $this->store_id;
  21. if (!empty($store_id)) {
  22. $store_mini = StoreAliMini::find()->where(['store_id' => $store_id])->orderBy('id desc')->one();
  23. if (!empty($store_mini->id)) {
  24. $this->mini_id = $store_mini->id;
  25. }
  26. $this->store_mini = $store_mini;
  27. $this->mini_version = StoreAliMiniVersion::find()->where(['mini_id' => $store_mini->id])->orderBy('id desc')->one();
  28. }
  29. //获取二维码信息
  30. $qrcode_id = $this->qrcode_id;
  31. if (!empty($qrcode_id)) {
  32. $qrcode = AggregateQrcode::findOne($qrcode_id);
  33. if (empty($qrcode)) {
  34. return [
  35. 'code' => 1,
  36. 'msg' => "二维码不存在"
  37. ];
  38. }
  39. if ($qrcode->ali_status == 1) {
  40. return [
  41. 'code' => 1,
  42. 'msg' => "二维码已经被使用"
  43. ];
  44. }
  45. $this->qrcode = $qrcode;
  46. }
  47. } catch (\Exception $e) {
  48. return [
  49. 'code' => 1,
  50. 'msg' => $e->getMessage()
  51. ];
  52. }
  53. }
  54. public function registerMiniStatus()
  55. {
  56. try {
  57. $result = $this->inits();
  58. if ($result['code'] === 1) {
  59. return $result;
  60. }
  61. /**
  62. * 小程序注册
  63. * status = 0 没有注册小程序信息
  64. * status = 1 小程序注册待确认或签约审核中
  65. * status = 2 小程序注册已拒绝
  66. */
  67. //商城ID
  68. $store_id = $this->store_id;
  69. //小程序ID
  70. $mini_id = $this->mini_id;
  71. //小程序Model
  72. $store_mini = $this->store_mini;
  73. //小程序版本信息
  74. $mini_version = $this->mini_version;
  75. //获取店铺信息
  76. $store = Store::findOne($store_id);
  77. //申请店铺进件信息
  78. // $store_schedule = StoreSchedule::find()->where(['store_id' => $store_id])->asArray()->one();
  79. // //获取注册信息
  80. // $merchant_info = json_decode($store_schedule['merchant_info'], true);
  81. // //获取营业执照信息
  82. // $license_info = $merchant_info['subject_info']['business_license_info'];
  83. //注册小程序信息
  84. $data = [
  85. "license_name" => $store_mini->license_name ?: '',
  86. "license_no" => $store_mini->license_no ?: '',
  87. "app_name" => $store_mini->app_name ?: $store->name,
  88. "service_phone" => $store_mini->service_phone,
  89. "license_pic" => $store_mini->license_pic ?: '',
  90. "alipay_account" => $store_mini->alipay_account,
  91. "legal_personal_name" => $store_mini->legal_personal_name ?: '',
  92. "contact_name" => $store_mini->legal_personal_name ?: ''
  93. ];
  94. if (empty($store_mini->license_no) || ((int)$store_mini->order_cancel === 1)) {
  95. $token_log = StoreMiniToken::findOne(['store_id' => $store_id]);
  96. if (((int)$store_mini->is_merchant === 1) || ($token_log->id && ((int)$token_log->status === 1))) {
  97. return [
  98. 'code'=>0,
  99. 'msg'=>"需要注册小程序信息",
  100. 'data'=>[
  101. 'status' => 0,
  102. 'mini_info' => $data,
  103. 'bind_store_id' => $store_id,
  104. 'progress' => 0
  105. ],
  106. ];
  107. } elseif ($token_log->id && (int)$token_log->status === 0) {
  108. return [
  109. 'code'=>0,
  110. 'msg'=>"正在认证",
  111. 'data'=>[
  112. 'status' => -1,
  113. 'mini_info' => $data,
  114. 'bind_store_id' => $store_id,
  115. 'progress' => 0
  116. ],
  117. ];
  118. } elseif ((empty($store_mini->is_merchant)) && (empty($token_log->id) || (int)$token_log->status === 2)) {
  119. return [
  120. 'code'=>0,
  121. 'msg'=>"需要认证",
  122. 'data'=>[
  123. 'status' => -2,
  124. 'mini_info' => $data,
  125. 'bind_store_id' => $store_id,
  126. 'progress' => 0
  127. ],
  128. ];
  129. }
  130. }
  131. $form = new RegisterMiniForm();
  132. $form->mini_id = $mini_id;
  133. if (empty($store_mini->auth_app_id) && !empty($store_mini->order_no)) {
  134. $result = $form->getFastRegisterStatus();
  135. if ($result['code'] != 0) {
  136. throw new \Exception($result['msg']);
  137. }
  138. return [
  139. 'code'=>0,
  140. 'msg'=>"小程序注册待确认或签约审核中",
  141. 'data'=>[
  142. 'status' => 1,
  143. 'mini_info' => $data,
  144. 'bind_store_id' => $store_id,
  145. 'mini_id' => $mini_id,
  146. 'progress' => 0
  147. ],
  148. ];
  149. }
  150. if ($store_mini->order_cancel == 1) {
  151. return [
  152. 'code'=>0,
  153. 'msg'=>"小程序注册已拒绝",
  154. 'data'=>[
  155. 'status' => 2,
  156. 'mini_info' => $data,
  157. 'bind_store_id' => $store_id,
  158. 'mini_id' => $mini_id,
  159. 'progress' => 0
  160. ]
  161. ];
  162. }
  163. if ($store_mini->auth_app_id) {
  164. $result = $form->getAesKey();
  165. if ($result['code'] != 0) {
  166. throw new \Exception($result['msg']);
  167. }
  168. }
  169. return $this->perfectMiniStatus();
  170. } catch (\Exception $e) {
  171. return [
  172. 'code' => 0,
  173. 'msg' => $e->getMessage(),
  174. 'data'=>[
  175. 'status' => 1,
  176. 'progress' => 0
  177. ]
  178. ];
  179. }
  180. }
  181. /**
  182. * 完善信息
  183. */
  184. public function perfectMiniStatus()
  185. {
  186. try {
  187. /**
  188. * 小程序完善信息
  189. * status = 0 小程序资料需要完善
  190. */
  191. //商城ID
  192. $store_id = $this->store_id;
  193. //小程序ID
  194. $mini_id = $this->mini_id;
  195. //小程序Model
  196. $store_mini = $this->store_mini;
  197. //小程序版本信息
  198. $mini_version = $this->mini_version;
  199. $store = Store::findOne($store_id);
  200. //配置前端展示数据
  201. $form = new PerfectMiniForm();
  202. $all_categories = $form->getAllCategory();
  203. $all_category = [];
  204. $old_category = [];
  205. if ($all_categories['code'] === 0) {
  206. $all_category = $all_categories['data'];
  207. $old_category = $all_categories['old_data'];
  208. }
  209. $form->mini_id = $mini_id;
  210. $data = [
  211. "app_name" => $store_mini['app_name'] ?: $store->name,
  212. "app_english_name" => $store_mini['app_english_name'],
  213. "app_slogan" => $store_mini['app_slogan'],
  214. "license_no" => $store_mini['license_no'],
  215. "license_pic" => $store_mini['license_pic'],
  216. "license_name" => $store_mini['license_name'],
  217. "license_date" => $store_mini['license_date'],
  218. "is_long_effective" => $store_mini['is_long_effective'],
  219. "app_logo" => $store_mini['app_logo'] ?: $store->logo,
  220. "app_desc" => $store_mini['app_desc'],
  221. "service_phone" => $store_mini['service_phone'],
  222. "service_email" => $store_mini['service_email'],
  223. 'other_data' => json_decode($store_mini['other_data']) ?: []
  224. ];
  225. if ($mini_version->is_submit == 0 && (
  226. empty($store_mini['app_name']) ||
  227. empty($store_mini['app_english_name']) ||
  228. empty($store_mini['app_slogan']) ||
  229. empty($store_mini['app_logo']) ||
  230. empty($store_mini['app_desc']) ||
  231. empty($store_mini['service_phone']) ||
  232. empty($store_mini['service_email'])
  233. )) {
  234. return [
  235. 'code'=>0,
  236. 'msg'=>"小程序资料需要完善",
  237. 'data'=>[
  238. 'status' => 0,
  239. 'mini_info' => $data,
  240. 'bind_store_id' => $store_id,
  241. 'mini_id' => $mini_id,
  242. 'progress' => 1,
  243. 'all_categories' => $all_category,
  244. 'old_categories' => $old_category
  245. ]
  246. ];
  247. }
  248. return $this->submitMiniStatus($data);
  249. } catch (\Exception $e) {
  250. return [
  251. 'code' => 0,
  252. 'msg' => $e->getMessage(),
  253. 'data' => [
  254. 'progress' => 1,
  255. 'status' => 1,
  256. ]
  257. ];
  258. }
  259. }
  260. public function submitMiniStatus($data = [])
  261. {
  262. try {
  263. /**
  264. * 小程序提交审核资料、发布
  265. * status = 0 小程序待审核
  266. * status = 1 小程序审核中
  267. * status = 2 小程序审核失败
  268. * status = 3 小程序待发布
  269. */
  270. //小程序版本信息
  271. $mini_version = $this->mini_version;
  272. $store_id = $this->store_id;
  273. $mini_id = $this->mini_id;
  274. $form = new SubmitMiniForm();
  275. $form->mini_id = $mini_id;
  276. if ($mini_version->is_submit == 0 && $mini_version->is_back == 0 && $mini_version->create_time < strtotime(date("Y-m-d"))) {
  277. return [
  278. 'code' => 0,
  279. 'msg' => "小程序更新模板",//可以审核
  280. 'data' => [
  281. 'status' => 3,
  282. 'mini_info' => $data,
  283. 'bind_store_id' => $store_id,
  284. 'mini_id' => $mini_id,
  285. 'progress' => 2
  286. ]
  287. ];
  288. }
  289. if($mini_version->is_submit == 0) {
  290. return [
  291. 'code' => 0,
  292. 'msg' => $mini_version->is_back == 0 ? "小程序待审核" : $mini_version->fail_reason,//可以审核
  293. 'data' => [
  294. 'status' => 0,
  295. 'mini_info' => $data,
  296. 'bind_store_id' => $store_id,
  297. 'mini_id' => $mini_id,
  298. 'progress' => 2
  299. ]
  300. ];
  301. }
  302. if ($mini_version->is_submit == 1) {
  303. return [
  304. 'code'=>0,
  305. 'msg'=>"小程序审核中",
  306. 'data'=>[
  307. 'status'=>1,
  308. 'mini_info'=>$data,
  309. 'bind_store_id' => $store_id,
  310. 'mini_id' => $mini_id,
  311. 'progress' => 2
  312. ]
  313. ];
  314. }
  315. if ($mini_version->is_submit == 3) {
  316. $result = $form->backPerfect();
  317. if ($result != 0) {
  318. throw new \Exception($result['msg']);
  319. }
  320. return [
  321. 'code'=>0,
  322. 'msg'=>"小程序审核失败",
  323. 'data'=>[
  324. 'status' => 3,
  325. 'mini_info' => $data,
  326. 'bind_store_id' => $store_id,
  327. 'mini_id' => $mini_id,
  328. 'progress' => 2
  329. ]
  330. ];
  331. }
  332. if ($mini_version->is_submit == 2) {
  333. return [
  334. 'code'=>0,
  335. 'msg'=>"小程序待发布",//可以发布
  336. 'data'=>[
  337. 'status' => 2,
  338. 'mini_info' => $data,
  339. 'bind_store_id' => $store_id,
  340. 'mini_id' => $mini_id,
  341. 'progress' => 2
  342. ]
  343. ];
  344. }
  345. return $this->faceMiniStatus();
  346. } catch (\Exception $e) {
  347. return [
  348. 'code' => 0,
  349. 'msg' => $e->getMessage(),
  350. 'data' => [
  351. 'progress' => 2,
  352. 'status' => 3,
  353. ]
  354. ];
  355. }
  356. }
  357. //签约当面付
  358. public function faceMiniStatus()
  359. {
  360. try {
  361. /**
  362. * 签约当面付
  363. * status = 0 需要创建事务
  364. * status = 1 需要签约当面付
  365. * status = 2 审核当面付
  366. * status = 3 审核中
  367. * status = 4 等待商户确认
  368. * status = 5 审核失败
  369. */
  370. //商城ID
  371. $store_id = $this->store_id;
  372. //小程序ID
  373. $mini_id = $this->mini_id;
  374. //小程序Model
  375. $store_mini = $this->store_mini;
  376. //小程序版本信息
  377. $mini_version = $this->mini_version;
  378. $form = new FaceMiniForm();
  379. $form->mini_id = $mini_id;
  380. if (!empty($store_mini->batch_no) && $store_mini->batch_status != 6) {
  381. $result = $form->openAgentOrderStatus();
  382. if ($result['code'] != 0) {
  383. throw new \Exception($result['msg']);
  384. }
  385. $result = $result['data'];
  386. }
  387. if ($store_mini->batch_status == 0 || $store_mini->batch_status == 7 || empty($store_mini->batch_no)) {//没有创建事务
  388. return [
  389. 'code'=>0,
  390. 'msg'=>"需要创建事务",
  391. 'data'=>[
  392. 'status' => 0,
  393. 'bind_store_id' => $store_id,
  394. 'mini_id' => $mini_id,
  395. 'progress' => 3
  396. ]
  397. ];
  398. } elseif ($store_mini->batch_status == 1 || $store_mini->batch_status == 4) {//创建事务成功
  399. return [
  400. 'code'=>0,
  401. 'msg'=>"需要签约当面付",
  402. 'data'=>[
  403. 'status'=>1,
  404. 'bind_store_id' => $store_id,
  405. 'mini_id' => $mini_id,
  406. 'progress' => 3
  407. ]
  408. ];
  409. } elseif ($store_mini->batch_status == 2) {//签约当面付成功
  410. return [
  411. 'code'=>0,
  412. 'msg'=>"需要审核当面付",
  413. 'data'=>[
  414. 'status'=>2,
  415. 'bind_store_id' => $store_id,
  416. 'mini_id' => $mini_id,
  417. 'progress' => 3
  418. ]
  419. ];
  420. } elseif ($store_mini->batch_status == 3) {//审核中
  421. return [
  422. 'code'=>0,
  423. 'msg'=>"审核中",
  424. 'data'=>[
  425. 'status'=>3,
  426. 'bind_store_id' => $store_id,
  427. 'mini_id' => $mini_id,
  428. 'progress' => 3
  429. ]
  430. ];
  431. } elseif ($store_mini->batch_status == 5) {//等待商户确认
  432. return [
  433. 'code'=>0,
  434. 'msg'=>"等待商户确认",
  435. 'data'=>[
  436. 'status'=>5,
  437. 'bind_store_id' => $store_id,
  438. 'mini_id' => $mini_id,
  439. 'progress' => 3
  440. ]
  441. ];
  442. }
  443. if ($store_mini->batch_status == 8) {//审核失败
  444. return [
  445. 'code'=>0,
  446. 'msg'=>"审核失败",
  447. 'data'=>[
  448. 'status' => 6,
  449. 'reason' => $result->reject_reason,
  450. 'bind_store_id' => $store_id,
  451. 'mini_id' => $mini_id,
  452. 'progress' => 3
  453. ]
  454. ];
  455. }
  456. return $this->phoneMiniStatus();
  457. } catch (\Exception $e) {
  458. return [
  459. 'code' => 0,
  460. 'msg' => $e->getMessage(),
  461. 'data' => [
  462. 'progress' => 3,
  463. 'status' => 7,
  464. ]
  465. ];
  466. }
  467. }
  468. public function phoneMiniStatus()
  469. {
  470. try {
  471. /**
  472. * 手机号字段申请
  473. * status = 0 需要获取手机号权限
  474. * status = 1 手机号权限申请中
  475. * status = 2 申请失败
  476. */
  477. //商城ID
  478. $store_id = $this->store_id;
  479. //小程序ID
  480. $mini_id = $this->mini_id;
  481. //小程序Model
  482. $store_mini = $this->store_mini;
  483. //小程序版本信息
  484. $mini_version = $this->mini_version;
  485. $form = new PhoneMiniForm();
  486. $form->mini_id = $mini_id;
  487. $field = $form->getField();
  488. if ($field['code'] != 0) {
  489. throw new \Exception($field['msg']);
  490. }
  491. $result = $form->getPhoneStatus();
  492. if ($result['code'] != 0) {
  493. throw new \Exception($result['msg']);
  494. }
  495. //获取手机号申请资料
  496. $apply_phone_msg = json_decode($store_mini->apply_phone_msg ,true) ?: [];
  497. if ($store_mini->is_get_phone == 0) {
  498. return [
  499. 'code' => 0,
  500. 'msg' => "需要申请接入手机号权限",
  501. 'data' => [
  502. 'status' => 0,
  503. 'field' => $field['data'],
  504. 'bind_store_id' => $store_id,
  505. 'mini_id' => $mini_id,
  506. 'progress' => 4,
  507. 'data' => $apply_phone_msg
  508. ]
  509. ];
  510. }
  511. if ($result['status'] === "AUDIT") {
  512. return [
  513. 'code' => 0,
  514. 'msg' => "手机号权限申请中",
  515. 'data' => [
  516. 'status' => 1,
  517. 'field' => $field['data'],
  518. 'bind_store_id' => $store_id,
  519. 'mini_id' => $mini_id,
  520. 'progress' => 4,
  521. 'data' => $apply_phone_msg
  522. ]
  523. ];
  524. }
  525. if ($result['status'] === "REJECT" || $result['status'] === "INVALID") {
  526. return [
  527. 'code' => 0,
  528. 'msg' => "申请失败" . $store_mini->apply_phone_fail,
  529. 'data' => [
  530. 'status' => 2,
  531. 'reason' => $store_mini->apply_phone_fail,
  532. 'field' => $field['data'],
  533. 'bind_store_id' => $store_id,
  534. 'mini_id' => $mini_id,
  535. 'progress' => 4,
  536. 'data' => $apply_phone_msg
  537. ]
  538. ];
  539. }
  540. return $this->qrcodeMiniStatus();
  541. } catch (\Exception $e) {
  542. return [
  543. 'code' => 0,
  544. 'msg' => $e->getMessage(),
  545. 'data' => [
  546. 'progress' => 4,
  547. 'status' => 3,
  548. ]
  549. ];
  550. }
  551. }
  552. public function qrcodeMiniStatus()
  553. {
  554. try {
  555. /**
  556. * 二维码绑定
  557. * status = 0 未绑定聚合码
  558. * status = 1 已完成
  559. */
  560. //商城ID
  561. $store_id = $this->store_id;
  562. //小程序ID
  563. $mini_id = $this->mini_id;
  564. $AggregateQrcode = AggregateQrcode::find()->where(['or', ['ali_mini_id' => $mini_id], ['store_id' => $store_id]])->one();
  565. if (empty($AggregateQrcode->ali_status)) {
  566. return [
  567. 'code'=>0,
  568. 'msg'=>"未绑定聚合码",
  569. 'data'=>[
  570. 'status' => 0,
  571. 'bind_store_id' => $store_id,
  572. 'mini_id' => $mini_id,
  573. 'progress' => 5,
  574. 'qrcode_id' => $AggregateQrcode->id
  575. ]
  576. ];
  577. }
  578. if ($AggregateQrcode->ali_status == 1) {
  579. $merchant_info = MerchantInfo::findOne(['bind_store_id' => $store_id, 'is_delete' => 0]);
  580. if (!empty($merchant_info->app_status)) {
  581. $app_status = $merchant_info->app_status;
  582. $app_status = str_replace('2', '', $app_status);
  583. $merchant_info->app_status = $app_status;
  584. $merchant_info->save();
  585. }
  586. return [
  587. 'code'=>0,
  588. 'msg'=>"完成",
  589. 'data'=>[
  590. 'status' => 1,
  591. 'bind_store_id' => $store_id,
  592. 'mini_id' => $mini_id ?? 0,
  593. 'progress' => 6
  594. ]
  595. ];
  596. }
  597. throw new \Exception("参数错误");
  598. } catch (\Exception $e) {
  599. return [
  600. 'code' => 1,
  601. 'msg' => $e->getMessage(),
  602. 'data' => [
  603. 'progress' => 5,
  604. 'status' => 1,
  605. ]
  606. ];
  607. }
  608. }
  609. }