SubmitMiniForm.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  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\StoreAliMini;
  10. use app\models\StoreAliMiniVersion;
  11. use app\utils\Alipay\alipaySdk\aop\request\AlipayOpenMiniVersionAuditApplyRequest;
  12. use app\utils\Alipay\alipaySdk\aop\request\AlipayOpenMiniVersionAuditedCancelRequest;
  13. use app\utils\Alipay\alipaySdk\aop\request\AlipayOpenMiniVersionOnlineRequest;
  14. use app\utils\Alipay\alipaySdk\aop\request\AlipayOpenMiniVersionUploadRequest;
  15. class SubmitMiniForm extends BaseForm
  16. {
  17. /**
  18. * 提交小程序form
  19. */
  20. public function inits()
  21. {
  22. try {
  23. $mini_id = $this->mini_id;
  24. if (!empty($mini_id)) {
  25. $store_mini = StoreAliMini::findOne($mini_id);
  26. if (empty($store_mini)) {
  27. return [
  28. 'code' => 1,
  29. 'msg' => "查找不到小程序信息"
  30. ];
  31. }
  32. $this->store_mini = $store_mini;
  33. $this->mini_version = StoreAliMiniVersion::find()->where(['mini_id' => $mini_id])->orderBy('id desc')->one();
  34. }
  35. //获取二维码信息
  36. $qrcode_id = $this->qrcode_id;
  37. if (!empty($qrcode_id)) {
  38. $qrcode = AggregateQrcode::findOne($qrcode_id);
  39. if (empty($qrcode)) {
  40. return [
  41. 'code' => 1,
  42. 'msg' => "二维码不存在"
  43. ];
  44. }
  45. if ($qrcode->ali_status == 1) {
  46. return [
  47. 'code' => 1,
  48. 'msg' => "二维码已经被使用"
  49. ];
  50. }
  51. $this->qrcode = $qrcode;
  52. }
  53. } catch (\Exception $e) {
  54. return [
  55. 'code' => 1,
  56. 'msg' => $e->getMessage()
  57. ];
  58. }
  59. }
  60. //小程序上传代码版本 alipay.open.mini.version.upload(小程序基于模板上传版本)
  61. public function miniUpVersion()
  62. {
  63. try {
  64. $result = $this->inits();
  65. if ($result['code'] === 1) {
  66. return $result;
  67. }
  68. $mini_id = $this->mini_id;
  69. $mini_version = $this->mini_version;
  70. $appid = $this->base_info['appid'];
  71. $store_id = $this->store_id;
  72. if (!empty($mini_version)) {
  73. if ($mini_version->is_submit == 1) {
  74. throw new \Exception("有版本正在审核,审核通过后方可更新版本信息");
  75. }
  76. }
  77. //生成版本号信息
  78. if (empty($mini_version)) {
  79. //之前没有版本
  80. $app_version = date('y') . '.' . sprintf("%03d", $mini_id) . '.' . sprintf("%03d", 1);
  81. } else {
  82. //已经存在版本
  83. $app_version = substr($mini_version->template_version, 7);
  84. $app_version = date('y') . '.' . sprintf("%03d", $mini_id) . '.' . sprintf("%03d", $app_version + 1);
  85. }
  86. //配置ext.json
  87. $ext = json_encode([
  88. //是否启用ext.json配置
  89. 'extEnable' => true,
  90. 'ext' => [
  91. //三方平台appid
  92. 'shopId' => $appid,
  93. //小程序ID
  94. 'mini_id' => $mini_id,
  95. //商城ID
  96. 'store_id' => $store_id,
  97. //请求地址url
  98. 'apiurl' => "https://" . \Yii::$app->request->hostName
  99. ]
  100. ]);
  101. //接口请求参数
  102. $param = json_encode([
  103. 'ext' => $ext,
  104. 'template_id' => $this->template_id ?? '2021003115697374',
  105. 'app_version' => $app_version,
  106. ]);
  107. //请求接口
  108. $request = new AlipayOpenMiniVersionUploadRequest();
  109. $result = $this->miniCommon($request, $param);
  110. //请求成功
  111. if ($result->code == 10000) {
  112. //保存版本信息
  113. $mini_version = new StoreAliMiniVersion();
  114. //小程序ID
  115. $mini_version->mini_id = $mini_id;
  116. //小程序版本号
  117. $mini_version->template_version = $app_version;
  118. //创建时间
  119. $mini_version->create_time = time();
  120. //is_up = 1上传版本
  121. $mini_version->is_up = 1;
  122. //保存版本信息
  123. if (!$mini_version->save()) {
  124. throw new \Exception(json_encode($mini_version->errors));
  125. }
  126. return [
  127. 'code' => 0,
  128. 'msg' => "构建成功",
  129. 'data' => $result
  130. ];
  131. } else {
  132. //输出请求错误信息
  133. throw new \Exception($result->sub_msg);
  134. }
  135. } catch (\Exception $e) {
  136. return [
  137. 'code' => 1,
  138. 'msg' => $e->getMessage()
  139. ];
  140. }
  141. }
  142. //小程序提交审核 alipay.open.mini.version.audit.apply(小程序提交审核)
  143. public function submitVersionAudit()
  144. {
  145. $t = \Yii::$app->db->beginTransaction();
  146. try {
  147. $result = $this->inits();
  148. if ($result['code'] === 1) {
  149. return $result;
  150. }
  151. //请求信息
  152. $param_info = $this->param_info;
  153. //小程序model
  154. $store_mini = $this->store_mini;
  155. //小程序版本model
  156. $mini_version = $this->mini_version;
  157. //设置请求配置
  158. $request = new AlipayOpenMiniVersionAuditApplyRequest();
  159. //小程序手机号
  160. !empty($param_info['service_phone'] ?: $store_mini->service_phone) && $request->setServicePhone($param_info['service_phone']);
  161. //小程序邮箱地址
  162. !empty($param_info['service_email'] ?: $store_mini->service_email) && $request->setServiceEmail($param_info['service_email']);
  163. //其他审核资料
  164. if (!empty($param_info['other_data'])) {
  165. foreach ($param_info['other_data'] as $index => &$item) {
  166. if ($index === 0) {
  167. $request->setFirstSpecialLicensePic("@" . $this->saveTempImage($item));
  168. }
  169. if ($index === 1) {
  170. $request->setSecondSpecialLicensePic("@" . $this->saveTempImage($item));
  171. }
  172. if ($index === 2) {
  173. $request->setThirdSpecialLicensePic("@" . $this->saveTempImage($item));
  174. }
  175. }
  176. }
  177. //小程序版本描述,30-500个字符。
  178. $request->setVersionDesc('商城当面付上线商城当面付上线商城当面付上线商城当面付上线商城当面付上线商城当面付上线商城当面付上线商城当面付上线');
  179. //小程序服务区
  180. $request->setRegionType("CHINA");
  181. //营业执照号
  182. $request->setLicenseNo($param_info['license_no'] ?: $store_mini->license_no);
  183. //营业执照
  184. $request->setFirstLicensePic("@" . $this->saveTempImage($param_info['license_pic'] ?: $store_mini->license_pic));
  185. //营业执照名称
  186. $request->setLicenseName($param_info['license_name'] ?: $store_mini->license_name);
  187. //营业执照有效期 如果为长期则日期为9999-12-31
  188. $request->setLicenseValidDate(!empty($store_mini->is_long_effective) ? '9999-12-31' : $store_mini->license_date);
  189. //小程序版本号
  190. $request->setAppVersion($mini_version->template_version);
  191. //英文名称
  192. //$request->setAppEnglishName($param_info['app_english_name'] ?: $store_mini->app_english_name);
  193. //小程序名称
  194. //$request->setAppName($param_info['app_name'] ?: $store_mini->app_name);
  195. //小程序应用简介,一句话描述小程序功能
  196. $request->setAppSlogan($param_info['app_slogan'] ?: $store_mini->app_slogan);
  197. //小程序应用描述
  198. $request->setAppDesc($param_info['app_desc'] ?: $store_mini->app_desc);
  199. //小程序logo图标
  200. $request->setAppLogo("@" . $this->saveTempImage($param_info['app_logo'] ?: $store_mini->app_logo));
  201. //保存小程序信息
  202. //小程序名称
  203. $store_mini->app_name = $param_info['app_name'];
  204. //小程序英文名称
  205. $store_mini->app_english_name = $param_info['app_english_name'];
  206. //小程序LOGO
  207. $store_mini->app_logo = $param_info['app_logo'];
  208. //小程序应用简介,一句话描述小程序功能
  209. $store_mini->app_slogan = $param_info['app_slogan'];
  210. //小程序版本描述
  211. $store_mini->app_desc = $param_info['app_desc'];
  212. //客服手机号
  213. $store_mini->service_phone = $param_info['service_phone'];
  214. //客服邮箱
  215. $store_mini->service_email = $param_info['service_email'];
  216. //其他资质数据
  217. $store_mini->other_data = json_encode($param_info['other_data']);
  218. //保存小程序信息
  219. if (!$store_mini->save()) {
  220. throw new \Exception($store_mini->errors);
  221. }
  222. //提交接口资料
  223. $result = $this->miniCommon($request);
  224. if ($result->code != 10000) {
  225. throw new \Exception($result->sub_msg);
  226. }
  227. //将小程序版本状态改为审核状态
  228. $mini_version->is_submit = 1;
  229. //保存小程序版本信息
  230. if (!$mini_version->save()) {
  231. throw new \Exception($mini_version->errors);
  232. }
  233. $t->commit();
  234. return [
  235. 'code' => 0,
  236. 'msg' => "开始审核",
  237. 'data' => $result,
  238. ];
  239. } catch (\Exception $e) {
  240. $t->rollBack();
  241. return [
  242. 'code' => 1,
  243. 'msg' => $e->getMessage()
  244. ];
  245. }
  246. }
  247. //审核失败需要退回开发
  248. public function backPerfect()
  249. {
  250. try {
  251. $result = $this->inits();
  252. if ($result['code'] === 1) {
  253. return $result;
  254. }
  255. //小程序版本model
  256. $mini_version = $this->mini_version;
  257. //接口资料
  258. $param = json_encode([
  259. 'app_version' => $mini_version->template_version
  260. ]);
  261. //调取接口信息
  262. $request = new AlipayOpenMiniVersionAuditedCancelRequest();
  263. //调用接口
  264. $result = $this->miniCommon($request, $param);
  265. //接口信息错误处理
  266. if ($result->code != 10000) {
  267. throw new \Exception($result->sub_msg);
  268. }
  269. //保存状态为已回退
  270. $mini_version->is_back = 1;
  271. $mini_version->is_submit = 0;
  272. if (!$mini_version->save()) {
  273. throw new \Exception($mini_version->errors);
  274. }
  275. return [
  276. 'code' => 0,
  277. 'msg' => '成功',
  278. 'data' => $result
  279. ];
  280. } catch (\Exception $e) {
  281. return [
  282. 'code' => 1,
  283. 'msg' => $e->getMessage()
  284. ];
  285. }
  286. }
  287. //小程序上架 alipay.open.mini.version.online(小程序上架)
  288. public function upMiniVersion()
  289. {
  290. try {
  291. $result = $this->inits();
  292. if ($result['code'] === 1) {
  293. return $result;
  294. }
  295. //小程序版本model
  296. $mini_version = $this->mini_version;
  297. //接口资料
  298. $param = json_encode([
  299. 'app_version' => $mini_version->template_version
  300. ]);
  301. //调取接口信息
  302. $request = new AlipayOpenMiniVersionOnlineRequest();
  303. //调用接口
  304. $result = $this->miniCommon($request, $param);
  305. //接口信息错误处理
  306. if ($result->code != 10000) {
  307. throw new \Exception($result->sub_msg);
  308. }
  309. //保存状态为已上架
  310. $mini_version->is_submit = 4;
  311. if (!$mini_version->save()) {
  312. throw new \Exception($mini_version->errors);
  313. }
  314. return [
  315. 'code' => 0,
  316. 'msg' => '成功',
  317. 'data' => $result
  318. ];
  319. } catch (\Exception $e) {
  320. return [
  321. 'code' => 1,
  322. 'msg' => $e->getMessage()
  323. ];
  324. }
  325. }
  326. }