site_id = $siteId; // 获取参数信息 $params = $this->createAppletParams($info); $result = (new MinCode())->requestApi("alipay.open.mini.isv.create", ['create_mini_request' => $params])['alipay_open_mini_isv_create_response']; if($result['code'] == 10000) { $info['out_order_no'] = $params['out_order_no']; $info['order_no'] = $result['order_no']; return $this->success($info); }else{ throw new Exception($result['sub_msg']); } } /** * Common: 创建小程序 —— 参数获取 * Author: wu-hui * Time: 2022/12/29 9:10 * @param $info * @return array */ private function createAppletParams($info){ // 获取图片base64 if($info['license_pic']) $info['license_pic'] = UrlimgBase64(img($info['license_pic'])); // 处理配置信息 $info['out_order_no'] = $this->createAppletOutOrderNo($this->site_id,$info['cert_no']); return [ 'out_order_no' => $info['out_order_no'], // 开发者外部订单号 'alipay_account' => $info['alipay_account'], // 商家登录支付宝的邮箱帐号或手机号 'legal_personal_name' => $info['legal_personal_name'],// 商家法人名称 'cert_name' => $info['cert_name'],// 营业执照企业名称,如果是“无主体名称个体工商户”则填“个体户+法人姓名”,例如“个体户张三” 'cert_no' => $info['cert_no'],// 营业执照编码 'app_name' => $info['app_name'], // 小程序名称 'contact_phone' => $info['contact_phone'], // 商家联系人手机电话 'contact_name' => $info['contact_name'], // 商家联系人名称 'is_individual' => TRUE, // 是否支持个体工商户的账号类型 'license_pic' => $info['license_pic'], // 营业执照图片的Base64编码字符串,图片大小不能超过2M。 ]; } /** * Common: 生成订单号 * Author: wu-hui * Time: 2022/12/28 16:54 * @param $site_id * @param $id * @return string */ public function createAppletOutOrderNo($site_id, $cert_no){ $time_str = date('YmdHi'); $max_no = Cache::get($site_id . '_' . $cert_no . '_' . $time_str); if (!isset($max_no) || empty($max_no)) $max_no = 1; else $max_no = $max_no + 1; $order_no = $time_str . $cert_no . sprintf('%03d', $max_no); Cache::set($site_id . '_' . $cert_no . '_' . $time_str, $max_no); return $order_no; } /** * Common: 获取最新的小程序配置信息 * Author: wu-hui * Time: 2022/12/28 17:41 * @param $siteId * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function getNewParams($siteId){ $info = Db::name('applet_list') ->where('site_id',$siteId) ->where('type',1) ->order('id','DESC') ->find(); if(!$info){ $content = [ 'alipay_account' => '',// 商家登录支付宝的邮箱帐号或手机号 'legal_personal_name' => '',// 商家法人名称 'cert_name' => '',// 营业执照企业名称,如果是“无主体名称个体工商户”则填“个体户+法人姓名”,例如“个体户张三” 'cert_no' => '',// 营业执照编码 'app_name' => '',// 小程序名称 'contact_phone' => '',// 商家联系人手机电话 'contact_name' => '',// 商家联系人名称 'license_pic' => '',// 营业执照图片的Base64编码字符串,图片大小不能超过2M。 ]; }else{ $content = json_decode($info['content'],TRUE); } return [$info['id'] ?? 0,$content]; } /** * Common: 设置小程序信息 * Author: wu-hui * Time: 2022/12/28 18:15 * @param $info * @param $siteId * @return array */ public function setNewParams($info,$siteId){ // 信息处理 $id = $info['id']; unset($info['id']); Db::name('applet_list')->startTrans(); try{ // 发起请求 创建小程序 $info = $this->createAppletStart($info,$siteId); $data = [ 'content' => json_encode($info,JSON_UNESCAPED_UNICODE) ]; // 记录信息 if($id > 0){ Db::name('applet_list')->where('id',$id)->update($data); }else{ $data['site_id'] = $siteId; $data['name'] = $info['app_name']; $data['type'] = 1; $data['status'] = 1; $data['create_time'] = time(); Db::name('applet_list')->insert($data); } Db::name('applet_list')->commit(); return $this->success(); }catch(\Exception $e){ Db::name('applet_list')->rollback(); return $this->error('',$e->getMessage()); } } }