select(['is_pay','mch_id','order_no','created_at','total_price', 'name', 'mobile', 'address', 'pay_price'])->where(['id' => $order_id])->asArray()->one(); $order_detail_list = OrderDetail::find() ->alias('o') ->where(['o.order_id' => $order_id]) ->select('o.goods_id,o.total_price,o.attr as o_attr,o.num,o.goods_id,o.order_id') ->asArray() ->all(); break; case 1: $order_info = MsOrder::find()->select(['is_pay','mch_id','order_no','created_at','total_price', 'name', 'mobile', 'address', 'pay_price'])->where(['id' => $order_id])->asArray()->one(); $order_detail_list = MsOrder::find() ->alias('o') ->where(['o.order_id' => $order_id]) ->select('o.goods_id,o.total_price,o.attr as o_attr,o.num,o.goods_id,o.order_id') ->asArray() ->all(); break; case 2: $order_info = PtActivityOrder::find()->select(['is_pay','store_id','order_no','created_at','total_price', 'name', 'mobile', 'address', 'pay_price'])->where(['id' => $order_id])->asArray()->one(); $order_detail_list = PtActivityOrderDetail::find() ->alias('o') ->where(['o.order_id' => $order_id]) ->select('o.goods_id,o.total_price,o.attr as o_attr,o.num,o.goods_id,o.order_id') ->asArray() ->all(); break; case 3: $order_info = BargainOrder::find()->select(['is_pay','mch_id','order_no','created_at','total_price', 'name', 'mobile', 'address', 'pay_price'])->where(['id' => $order_id])->asArray()->one(); $order_detail_list = BargainOrderDetail::find() ->alias('o') ->where(['o.order_id' => $order_id]) ->select('o.goods_id,o.total_price,o.attr as o_attr,o.num,o.goods_id,o.order_id') ->asArray() ->all(); break; default: return; break; } if($order_info['is_pay'] == 1){ $order_info['is_pay'] = '已支付'; }else{ $order_info['is_pay'] = '货到付款'; } $mch_id = $order_info['mch_id']; // 查询订单下单时是否开启打印 $cloud_on = CloudSetting::find()->select(['type', 'cloud_id'])->where(['store_id' => $store_id, 'mch_id' => $mch_id,'is_delete' => 0])->asArray()->one(); if (empty($cloud_on)) { return; } $is_res = json_decode($cloud_on['type']); $is_on = $is_res->pay; if ($is_on == 1 && $order_info['is_pay'] == 1) { foreach($order_detail_list as & $arr1){ $g_id = $arr1['goods_id']; if ($order_type == 1) { $g_info = MsGoods::find()->alias('g')->where(['id' => $g_id])->select(['g.id','g.name', 'g.unit','g.price','g.attr'])->asArray()->one(); } else if ($order_type == 2) { $g_info = PtGoods::find()->alias('g')->where(['id' => $g_id])->select(['g.id','g.name', 'g.unit','g.price','g.attr'])->asArray()->one(); } else if ($order_type == 3) { $g_info = BargainGoods::find()->alias('g')->where(['id' => $g_id])->select(['g.id','g.name', 'g.unit','g.price','g.attr'])->asArray()->one(); } else { $g_info = Goods::find()->alias('g')->where(['id' => $g_id])->select(['g.id','g.name','g.unit', 'g.price','g.attr'])->asArray()->one(); } $arr1['id'] = $g_info['id']; $arr1['name'] = $g_info['name']; $arr1['unit'] = $g_info['unit']; $arr1['price'] = $g_info['price']; $arr1['attr'] = $g_info['attr']; } $cloud_id = $cloud_on['cloud_id']; $setting = Cloud::find()->select(['cloud_setting'])->where(['id' => $cloud_id])->asArray()->one(); $setting_json = json_decode($setting['cloud_setting']); $send_html = self::createHtml($setting_json, $order_info, $order_detail_list, $order_type); // 抓取设置的云打印机参数 if ($order_info['total_price'] > $setting_json->minimoney) { $name = $setting_json->name; $app_id = $setting_json->app_id; $app_key = $setting_json->app_key; $time_stamp = time(); $sign = md5('app_id=' . $app_id . '&sign_type=MD5&time_stamp=' . $time_stamp . '&key=' . $app_key); $sign = strtoupper($sign); $token = self::getToken($sign,$app_id,$time_stamp); $token_arr = json_decode($token,true); $token = $token_arr['return_data']['access_token']; $cus_order_id = time().rand(100,999); //初始化 $curl = curl_init(); //设置抓取的ur curl_setopt($curl, CURLOPT_URL, 'https://mcp.jolimark.com/mcp/v3/sys/PrintRichHtmlCode'); //设置头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_HEADER, 1); //设置获取的信息以文件流的形式返回,而不是直接输出。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false); //设置post方式提交 curl_setopt($curl, CURLOPT_POST, 1); //设置post数据 $post_data = array( "app_id" => $app_id, "access_token" => $token, "device_ids" => $name, "copies" => 1, "cus_orderid" => $cus_order_id, "bill_content" => $send_html, "paper_type" => 1, ); // post提交的数据 curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); // 执行命令 curl_exec($curl); curl_close($curl); } } } catch (\Throwable $e) { \Yii::warning($e->getMessage()); } } /** * @param $attrStr * @param $searchAttrIds * @return bool */ public static function getNo($attrStr, $searchAttrIds){ $attr = json_decode($attrStr,true); foreach ($attr as $item){ $attrIds = array_column($item, 'attr_id'); if ($attrIds == $searchAttrIds){ return $item['no']; } } return false; } /** * @param $setting_json * @param $order_info * @param $order_detail_list * @param $order_type * @return string */ public static function createHtml($setting_json, $order_info, $order_detail_list, $order_type) { $order_title = $setting_json->order_title; $order_address = $setting_json->order_address; $order_mobile = $setting_json->order_mobile; $order_desc = $setting_json->order_desc; $no = 0; $order_count_price = 0; foreach ($order_detail_list as & $arr) { $no = $no + 1; $push_arr = []; $search = $arr['o_attr']; $search_arr = json_decode($search, true); foreach ($search_arr as & $vv) { array_push($push_arr, $vv['attr_id']); } $arr['no'] = self::getNo($arr['o_attr'], $push_arr); $g_id = $arr['goods_id']; $order_id = $arr['order_id']; if ($order_type == 1) { $g_info_attr = MsOrder::find()->where(['is_delete' => 0,'order_id' => $order_id,'goods_id' => $g_id]) ->select(['attr'])->asArray()->one(); } else if ($order_type == 2) { $g_info_attr = PtOrderDetail::find()->where(['is_delete' => 0,'order_id' => $order_id,'goods_id' => $g_id]) ->select(['attr'])->asArray()->one(); } else if ($order_type == 3) { $g_info_attr = BargainOrderDetail::find()->where(['is_delete' => 0,'order_id' => $order_id,'goods_id' => $g_id]) ->select(['attr'])->asArray()->one(); } else { $g_info_attr = OrderDetail::find()->where(['is_delete' => 0,'order_id' => $order_id,'goods_id' => $g_id]) ->select(['attr'])->asArray()->one(); } $attr_list = json_decode($g_info_attr['attr']); if (is_array($attr_list)){ foreach ($attr_list as $attr){ $attr_str=$attr->attr_group_name.":".$attr->attr_name; } } $tr2 = " " . $no . "" . "" . $arr['name'] . "" . "" . $attr_str . "" . "" . $arr['no'] . "" . "" . $arr['unit'] . "" . "" . $arr['num'] . "" . "" . $arr['total_price'] / $arr['num'] . "" . "" . $arr['total_price'] . ""; $order_count_price = $order_count_price + $arr['total_price']; } $html = "

".$order_title."

订单号:" . $order_info['order_no'] . " 客户电话:" . $order_info['mobile'] . " 下单时间:" . date('Y-m-d', $order_info['created_at']) . "
客户:" . $order_info['name'] . " 客户地址:" . $order_info['address'] . " 支付方式:" . $order_info['is_pay'] . "
" . $tr2 . "
产品名称 规格 条码 单位 数量 单价 金额 备注
合计金额: " . $order_count_price . " " . "
"; return $html; } /** * @param $sign * @param $app_id * @param $time_stamp * @return mixed */ public static function getToken($sign, $app_id, $time_stamp) { // 初始化 $curl = curl_init(); $url = 'https://mcp.jolimark.com/mcp/v3/sys/GetAccessToken?app_id=' . $app_id . '&time_stamp=' . $time_stamp . '&sign=' . $sign . '&sign_type=MD5'; // 设置抓取的url curl_setopt($curl, CURLOPT_URL, $url); // 设置头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_HEADER, 0); //设置获取的信息以文件流的形式返回,而不是直接输出。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false); // 执行命令 $data = curl_exec($curl); // 关闭URL请求 curl_close($curl); return $data; } }