SubmitMiniForm.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\alliance\models\third\wechat;
  8. use app\models\Option;
  9. use app\models\StoreMini;
  10. use yii\base\Model;
  11. class SubmitMiniForm extends Model
  12. {
  13. /**
  14. * 上传代码/提交审核
  15. */
  16. //easyWechat配置
  17. public $openPlatform;
  18. //商城ID
  19. public $store_id;
  20. //小程序ID
  21. public $mini_id;
  22. //easyWechat接口配置
  23. public $miniProgram;
  24. //获取小程序
  25. public $store_mini;
  26. //小程序信息
  27. public $mini_info;
  28. public function rules()
  29. {
  30. return [
  31. [['store_id', 'mini_id'], 'integer'],
  32. [['name_data', 'mini_info'], 'array']
  33. ];
  34. }
  35. public function inits()
  36. {
  37. try {
  38. //商城ID
  39. $store_id = $this->store_id;
  40. //小程序ID
  41. $mini_id = $this->mini_id;
  42. //获取配置信息
  43. $form = new BaseForm();
  44. $form->store_id = $store_id;
  45. $form->mini_id = $mini_id;
  46. //获取easyWechat配置信息
  47. $this->openPlatform = $form->openPlatform;
  48. //判断商城ID 或 小程序ID是否不为空,不为空则获取请求微信的配置信息
  49. if (!empty($store_id) || !empty($mini_id)) {
  50. //获取请求微信的配置信息
  51. $result = $form->miniProgram();
  52. //获取小程序信息
  53. $this->store_mini = StoreMini::find()->where(['or', ['id' => $mini_id], ['store_id' => $store_id]])->andWhere(['is_cancle' => 0])->orderBy('id desc')->one();
  54. if (empty($this->store_mini)) {
  55. return [
  56. 'code' => 1,
  57. 'msg' => "查找小程序失败"
  58. ];
  59. }
  60. if ($result['code'] === 1) {
  61. return $result;
  62. }
  63. $this->miniProgram = $result;
  64. }
  65. } catch (\Exception $e) {
  66. return [
  67. 'code' => 1,
  68. 'msg' => $e->getMessage()
  69. ];
  70. }
  71. }
  72. //更新代码模板
  73. public function upgradeTemplate()
  74. {
  75. try {
  76. $result = $this->inits();
  77. if ($result['code'] === 1) {
  78. return $result;
  79. }
  80. //获取微信配置信息
  81. $miniProgram = $this->miniProgram;
  82. //获取小程序model数据
  83. $store_mini = $this->store_mini;
  84. //判断关键数据是否为空
  85. if (empty($store_mini->appid) || empty($store_mini->store_id) || empty($store_mini->id)) {
  86. throw new \Exception("参数错误,数据不全");
  87. }
  88. //生成ext文件
  89. $ext = json_encode([
  90. //是否使用ext
  91. 'extEnable' => true,
  92. //商家小程序Appid
  93. 'extAppid' => $store_mini->appid,
  94. //ext.json文件配置信息
  95. 'ext' => [
  96. //访问链接
  97. "apiurl" => "https://" . \Yii::$app->request->hostName,
  98. //商城ID
  99. "store_id" => $store_mini->store_id,
  100. //小程序ID
  101. "mini_id" => $store_mini->id
  102. ],
  103. "window" => [
  104. "navigationBarTitleText" => "0000"
  105. ]
  106. ]);
  107. //选择后台模板
  108. $template_id = Option::get("platform_template_id", 0, 'saas')['value'];
  109. if ($template_id === "-1") {
  110. throw new \Exception("未选择模板");
  111. }
  112. //请求微信接口
  113. $result = $miniProgram->code->commit($template_id, $ext, cyy_version(), "小程序新版本上传");
  114. //如果请求成功则保存信息
  115. if ($result['errcode'] === 0) {
  116. //是否上传模版
  117. $store_mini->mini_up = -1;
  118. //上传的模板ID
  119. $store_mini->template_id = $template_id;
  120. //上传的小程序版本信息
  121. $store_mini->user_version = cyy_version();
  122. //版本描述
  123. $store_mini->user_desc = "小程序新版本上传";
  124. //ext文件信息
  125. $store_mini->ext = $ext;
  126. //判断是否保存成功
  127. if (!$store_mini->save()) {
  128. throw new \Exception(json_encode($store_mini->errors));
  129. }
  130. return [
  131. 'code' => 0,
  132. 'msg' => "更新成功"
  133. ];
  134. } elseif ($result['errcode'] != 0) {
  135. //获取中文错误信息(微信返回为英文信息)
  136. $msg = (new BaseForm())->getZnMsg($result);
  137. throw new \Exception($msg);
  138. } else {
  139. throw new \Exception("数据错误");
  140. }
  141. } catch (\Exception $e) {
  142. return [
  143. 'code' => 1,
  144. 'msg' => $e->getMessage()
  145. ];
  146. }
  147. }
  148. //提交审核 获取申请单ID
  149. public function submitAudit()
  150. {
  151. try {
  152. $result = $this->inits();
  153. if ($result['code'] === 1) {
  154. return $result;
  155. }
  156. //获取微信配置信息
  157. $miniProgram = $this->miniProgram;
  158. //获取小程序model数据
  159. $store_mini = $this->store_mini;
  160. //获取小程序信息
  161. $mini_info = $this->mini_info;
  162. $is_fast_audit = empty($mini_info['is_fast_audit']) ? 0 : 1;
  163. $data = [
  164. 'item_list' => [],
  165. 'order_path' => 'order/order/order',
  166. ];
  167. //请求微信接口
  168. $result = $miniProgram->code->submitAudit($data, '', '');
  169. //如果不为空则保存信息
  170. if ($result['errcode'] === 0) {
  171. //状态进入审核状态
  172. $store_mini->mini_up = 1;
  173. //保存申请单ID
  174. $store_mini->audit_id = (string)$result['auditid'];
  175. //保存状态信息
  176. if (!$store_mini->save()) {
  177. throw new \Exception(json_encode($store_mini->errors));
  178. }
  179. //如果为空则判断是否加急
  180. if ($is_fast_audit === 1) {
  181. //加急请求
  182. $result = $miniProgram->code->speedupAudit($result['auditid']);
  183. //判断加急请求是否完成
  184. if ($result['errcode'] === 0) {
  185. return [
  186. 'code' => 0,
  187. 'msg' => "成功"
  188. ];
  189. } elseif ($result['errcode'] != 0) {
  190. //获取中文错误信息(微信返回为英文信息)
  191. $msg = (new BaseForm())->getZnMsg($result);
  192. return [
  193. 'code' => 0,
  194. 'msg' => "加急审核处理失败," . $msg
  195. ];
  196. } else {
  197. return [
  198. 'code' => 0,
  199. 'msg' => "加急审核处理错误"
  200. ];
  201. }
  202. }
  203. return [
  204. 'code' => 0,
  205. 'msg' => "成功"
  206. ];
  207. //请求失败处理
  208. } elseif ($result['errcode'] != 0) {
  209. //获取中文错误信息(微信返回为英文信息)
  210. $msg = (new BaseForm())->getZnMsg($result);
  211. throw new \Exception($msg);
  212. } else {
  213. throw new \Exception("数据错误");
  214. }
  215. } catch (\Exception $e) {
  216. return [
  217. 'code' => 1,
  218. 'msg' => $e->getMessage()
  219. ];
  220. }
  221. }
  222. //根据申请单ID查询审核状态
  223. public function getSubmitAuditStatus()
  224. {
  225. try {
  226. $result = $this->inits();
  227. if ($result['code'] === 1) {
  228. return $result;
  229. }
  230. //小程序model信息
  231. $store_mini = $this->store_mini;
  232. //微信请求配置信息
  233. $miniProgram = $this->miniProgram;
  234. //判断audit_id是否存在
  235. if (empty($store_mini->audit_id)) {
  236. throw new \Exception("申请单ID不存在");
  237. }
  238. //申请单ID
  239. $audit_id = $store_mini->audit_id;
  240. //使用申请单ID查询小程序审核状态
  241. $result = $miniProgram->code->getAuditStatus($audit_id);
  242. if ($result['errcode'] === 0) {
  243. switch ($result['status']) {
  244. //审核拒绝
  245. case 1:
  246. $store_mini->mini_up = 3;
  247. break;
  248. case 2:
  249. //审核中
  250. $store_mini->mini_up = 1;
  251. break;
  252. case 3:
  253. //已经撤回
  254. $store_mini->mini_up = -1;
  255. break;
  256. case 4:
  257. //审核延期
  258. $store_mini->mini_up = 4;
  259. break;
  260. default:
  261. //审核通过
  262. $store_mini->mini_up = 2;
  263. break;
  264. }
  265. //如果status = 1(审核失败),则开始处理审核失败的错误信息截图
  266. $media_arr = [];
  267. if ($result['status'] == 1 && !empty($result['screenshot'])) {
  268. //将字符串转数组
  269. $media_arr = explode('|', $result['screenshot']);
  270. //遍历返回图片信息
  271. foreach ($media_arr as &$item) {
  272. $item = $miniProgram->material->get($item);
  273. }
  274. }
  275. return [
  276. 'code' => 0,
  277. 'msg' => "获取成功",
  278. 'data' => [
  279. 'status' => $result['status'],//返回状态
  280. 'screenshot' => $media_arr, //失败截图
  281. 'reason' => $result['reason'] //返回错误原因
  282. ]
  283. ];
  284. //请求失败处理
  285. } elseif ($result['errcode'] != 0) {
  286. //获取中文错误信息(微信返回为英文信息)
  287. $msg = (new BaseForm())->getZnMsg($result);
  288. throw new \Exception($msg);
  289. } else {
  290. throw new \Exception("数据错误");
  291. }
  292. } catch (\Exception $e) {
  293. return [
  294. 'code' => 1,
  295. 'msg' => $e->getMessage()
  296. ];
  297. }
  298. }
  299. //发布小程序
  300. public function release()
  301. {
  302. try {
  303. $result = $this->inits();
  304. if ($result['code'] === 1) {
  305. return $result;
  306. }
  307. //小程序model信息
  308. $store_mini = $this->store_mini;
  309. //微信请求配置信息
  310. $miniProgram = $this->miniProgram;
  311. $store_mini->mini_up = 5;
  312. //请求接口
  313. $result = $miniProgram->code->release();
  314. //如果状态为0 或者 提示应用已经上架 则完成发布
  315. if ($result['errcode'] === 0 || $result['errcode'] === 85052) {
  316. //保存信息
  317. if (!$store_mini->save()) {
  318. throw new \Exception(json_encode($store_mini->errors));
  319. }
  320. return [
  321. 'code' => 0,
  322. 'msg' => "发布完成"
  323. ];
  324. } elseif ($result['errcode'] != 0) {
  325. //获取中文错误信息(微信返回为英文信息)
  326. $msg = (new BaseForm())->getZnMsg($result);
  327. throw new \Exception($msg);
  328. } else {
  329. throw new \Exception("数据错误");
  330. }
  331. } catch (\Exception $e) {
  332. return [
  333. 'code' => 1,
  334. 'msg' => $e->getMessage()
  335. ];
  336. }
  337. }
  338. }