You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
388 lines
17 KiB
388 lines
17 KiB
<?php
|
|
/**
|
|
* Comment: 定制小票打印接口
|
|
* Author: zzw
|
|
* Date: 2020/4/2
|
|
* Time: 10:31
|
|
*/
|
|
defined('IN_IA') or exit('Access Denied');
|
|
|
|
class Printing{
|
|
protected static $orderInfo,//订单信息
|
|
$tid,//订单号
|
|
$storeInfo,//商户信息
|
|
$timeStamp,//当前时间 时间戳
|
|
$userInfo;//用户信息
|
|
/**
|
|
* Comment: 打印推送消息接口
|
|
* Author: zzw
|
|
* Date: 2020/4/3 11:13
|
|
* @param string|int $tid
|
|
* @return array|bool|mixed
|
|
*/
|
|
public static function init($tid){
|
|
global $_W;
|
|
#1、信息获取
|
|
self::$tid = $tid;
|
|
self::$timeStamp = time();
|
|
self::getOrder();//订单信息获取
|
|
if(!self::$orderInfo['sid']) {
|
|
Util::wl_log('printing' , PATH_MODULE . "log/" , [
|
|
'error' => '商户id不存在' ,
|
|
'tid' => $tid
|
|
] , '打印推送消息 —— 错误记录'); //写入日志记录
|
|
return error(0 , '商户id不存在');
|
|
}
|
|
self::getStore();//商户信息获取
|
|
//self::getUser();//用户信息获取
|
|
//判断是否开启打印推送
|
|
if(self::$storeInfo['state'] != 1) {
|
|
Util::wl_log('printing' , PATH_MODULE . "log/" , [
|
|
'error' => '未开启打印推送' ,
|
|
'tid' => $tid,
|
|
'sid' => self::$orderInfo['sid'] ,
|
|
'storename' => self::$storeInfo['storename']
|
|
] , '打印推送消息 —— 错误记录'); //写入日志记录
|
|
return error(0 , '未开启打印推送');
|
|
}
|
|
//获取打印设置信息
|
|
$printUrl = $_W['siteroot'] . 'addons/' . MODULE_NAME . '/requests/printing.php?tid='.self::$orderInfo['orderno'];
|
|
|
|
$openid = self::$storeInfo['openid'];
|
|
$secret = self::$storeInfo['secret'];
|
|
#2、信息配置
|
|
$payType = self::getPayType(self::$orderInfo['paytype']);//支付方式获取
|
|
//https://citydev.weliam.com.cn/addons/weliam_smartcity/requests/printing.php?tid=2020040818053400013924445846
|
|
$platform = unserialize(pdo_getcolumn(PDO_NAME."setting",['key'=>'base'],'value'));//平台设置信息获取
|
|
$name = $platform['name'] ? : '乌卡拉';
|
|
$data = [
|
|
'userAccount' => self::$storeInfo['userAccount'] ,//操作员
|
|
'title' => $payType ,//消息标题
|
|
'click' => h5_url('pages/subPages/orderList/orderList'),//点击消息打开的链接
|
|
'broadcast' => $name.'订单'.self::$orderInfo['price']."元" ,//语音播报内容(此项为空时,播报title)
|
|
'printUrl' => $printUrl,//打印url
|
|
'action' => 'PlatformBusiness' ,//事件处理(如qd11云打印:Printer,区分大小写)
|
|
];
|
|
$first = strpos($data['click'],'&aid=');
|
|
$data['click'] = substr($data['click'],0,$first);
|
|
try {
|
|
#3、发送请求
|
|
$controllerName = 'OpenApi';
|
|
$json_data = json_encode ( $data );
|
|
$Signature = strtoupper ( md5 ( $openid . $secret . self::$timeStamp . $json_data ) );
|
|
$url = "http://openapi.1card1.cn/" . $controllerName . "/PushMessage?openId=" . $openid . "&signature=" . $Signature . "×tamp=" . self::$timeStamp;
|
|
$postData = "data=" . $json_data;
|
|
$result_data = self::postData ( $url, $postData );
|
|
$result = json_decode ( $result_data, true );
|
|
#4、记录日志
|
|
$result['time'] = date("Y-m-d H:i:s",time());
|
|
$result['orderno'] = self::$orderInfo['orderno'];
|
|
$result['data'] = $data;
|
|
Util::wl_log('printing', PATH_MODULE."log/",$result,'打印推送消息 —— 操作结果'); //写入日志记录
|
|
|
|
return $result;
|
|
} catch (\Throwable $e) {
|
|
$result['msg'] = $e->getMessage();
|
|
$result['orderno'] = self::$orderInfo['orderno'];
|
|
Util::wl_log('printing', PATH_MODULE."log/",$result,'打印推送消息 —— 错误记录'); //写入日志记录
|
|
}
|
|
}
|
|
/**
|
|
* Comment: 订单信息获取
|
|
* Author: zzw
|
|
* Date: 2020/4/3 9:09
|
|
* @param $order_no
|
|
* @return bool
|
|
*/
|
|
protected static function getOrder(){
|
|
global $_W;
|
|
#1、获取查询条件
|
|
$where = " tid = ".self::$tid;
|
|
|
|
#2、获取订单信息
|
|
$orderInfo = pdo_fetch("SELECT mid,tid as orderno,fee as price,source,plugin,payfor FROM" .tablename(PDO_NAME.'paylogvfour') ." WHERE {$where} ");
|
|
if(empty($orderInfo)){
|
|
$paylogid = pdo_getcolumn(PDO_NAME.'order',array('orderno' => self::$tid),'paylogid');
|
|
$orderInfo = pdo_fetch("SELECT mid,tid as orderno,fee as price,source,plugin,payfor FROM" .tablename(PDO_NAME.'paylogvfour') ." WHERE plid = {$paylogid} ");
|
|
}
|
|
if($orderInfo['plugin']=='Citydelivery'){
|
|
$orderInfo = [];
|
|
$orderInfo['orderno'] = self::$tid;
|
|
}
|
|
#3、处理获取的信息
|
|
$orderInfo['mid'] = $orderInfo['mid'] > 0 ? $orderInfo['mid'] : $_W['mid'];
|
|
#3、获取商户id
|
|
$infoWhere = " WHERE orderno = {$orderInfo['orderno']} ";
|
|
if($orderInfo['plugin'] == 'Rush'){
|
|
$field = " sid,paytype,paytime,mid,price as goodsprice,activityid as goods_id ";
|
|
$table = tablename(PDO_NAME."rush_order");
|
|
}else{
|
|
$field = " sid,paytype,payfor,paytime,mid,price,goodsprice,fkid as goods_id ";
|
|
$table = tablename(PDO_NAME."order");
|
|
}
|
|
$order = pdo_fetch("SELECT {$field} FROM ".$table.$infoWhere);
|
|
//计算优惠金额
|
|
$order['discount'] = sprintf("%0.2f",$order['goodsprice'] - $orderInfo['price']);
|
|
if($order['payfor'] == 'deliveryOrder'){
|
|
$order['payfor'] = 'DeliveryOrder';
|
|
$order['discount'] = 0;
|
|
}
|
|
self::$orderInfo = ($order + $orderInfo);
|
|
}
|
|
/**
|
|
* Comment: 获取商户信息
|
|
* Author: zzw
|
|
* Date: 2020/4/3 9:54
|
|
*/
|
|
protected static function getStore(){
|
|
//获取商户信息
|
|
$store = pdo_get(PDO_NAME."merchantdata",['id'=>self::$orderInfo['sid']],['storename','printing']);
|
|
//处理推送信息
|
|
$printing = unserialize($store['printing']) ? :[];
|
|
unset($store['printing']);
|
|
//合并生成新的商户设置信息
|
|
$store = ($store + $printing);
|
|
$store['state'] = $store['state'] ? $store['state'] : 0;
|
|
|
|
self::$storeInfo = $store;
|
|
}
|
|
/**
|
|
* Comment: 获取用户信息
|
|
* Author: zzw
|
|
* Date: 2020/4/3 10:38
|
|
*/
|
|
protected static function getUser(){
|
|
//用户信息获取
|
|
$user = pdo_get(PDO_NAME."member",['id'=>self::$orderInfo['mid']] ,['nickname']);
|
|
//会员等级获取
|
|
$default = Setting::wlsetting_read('halflevel')['name'] ? : '普通会员' ;
|
|
$lvId = pdo_getcolumn(PDO_NAME . "halfcardmember" , [
|
|
'mid' => self::$orderInfo['mid'] ,
|
|
'disable' => 0 ,
|
|
] , 'levelid');
|
|
if($lvId) $lvTitle = pdo_getcolumn(PDO_NAME."halflevel",['id'=>$lvId],'name');
|
|
$user['lv'] = $lvTitle ? $lvTitle : $default;
|
|
|
|
self::$userInfo = $user;
|
|
}
|
|
/**
|
|
* Comment: 配置参数信息获取
|
|
* Author: zzw
|
|
* Date: 2020/4/2 15:48
|
|
* @return false|mixed|string
|
|
*/
|
|
protected static function getData(){
|
|
#1、基本信息获取
|
|
$payType = self::getPayType();//支付方式获取
|
|
$payProject = self::getPayProject();//支付项目获取
|
|
$platform = unserialize(pdo_getcolumn(PDO_NAME."setting",['key'=>'base'],'value'));//平台设置信息获取
|
|
#2、信息配置 //'Content2'=>null
|
|
if(self::$storeInfo['header']){
|
|
//图片处理
|
|
$images = tomedia(self::$storeInfo['header']);
|
|
$images = str_replace('requests/','',$images);
|
|
$Type = 'Image';
|
|
$Content = $images;
|
|
}else {
|
|
$Type = 'String';
|
|
$Content = ' '.$platform['name'];
|
|
}
|
|
//处理同城配送订单信息
|
|
if(self::$orderInfo['payfor']== 'DeliveryOrder'){
|
|
$neworderinfo = pdo_get('wlmerchant_order',array('orderno' => self::$orderInfo['orderno']),array('buyremark','status','goodsprice','vipdiscount','expressprcie','expressid'));
|
|
self::$orderInfo['goodsprice'] = $neworderinfo['goodsprice'];
|
|
self::$orderInfo['discount'] = $neworderinfo['vipdiscount'];
|
|
}
|
|
|
|
$data1 = [
|
|
['Type' => $Type , 'Content' =>$Content],
|
|
['Type' => 'String' , 'Content' => ' 店面:' . self::$storeInfo['storename']] ,
|
|
['Type' => 'String' , 'Content' => '支付时间:' . date("Y-m-d H:i:s" , self::$orderInfo['paytime'])] ,
|
|
['Type' => 'String' , 'Content' => ' 订单号:' . self::$orderInfo['orderno']] ,
|
|
['Type' => 'String' , 'Content' => ' 操作员:' . self::$storeInfo['userAccount']] ,
|
|
['Type' => 'String' , 'Content' => '--------------------------------'] ,
|
|
['Type' => 'String' , 'Content' => '业务类型:在线支付'] ,
|
|
['Type' => 'String' , 'Content' => '支付方式:' . $payType] ,
|
|
];
|
|
|
|
if(!is_array($payProject)){
|
|
$data1[] = ['Type' => 'String' , 'Content' => '支付项目:' . $payProject];
|
|
}else{
|
|
foreach ($payProject as $ke => $ject){
|
|
if($ke == 0){
|
|
$data1[] = ['Type' => 'String' , 'Content' => '支付项目:' . $ject];
|
|
}else{
|
|
$data1[] = ['Type' => 'String' , 'Content' => ' ' . $ject];
|
|
}
|
|
}
|
|
}
|
|
if(!empty($neworderinfo['buyremark'])){
|
|
$data1[] = ['Type' => 'String' , 'Content' => '买家备注:'.$neworderinfo['buyremark']];
|
|
}
|
|
if($neworderinfo['status'] == 1){
|
|
$data1[] = ['Type' => 'String' , 'Content' => '配送方式:到店自提'];
|
|
}else if($neworderinfo['status'] == 4){
|
|
$data1[] = ['Type' => 'String' , 'Content' => '配送方式:商家配送'];
|
|
}
|
|
if(!empty($neworderinfo['expressid'])){
|
|
$express = pdo_get('wlmerchant_express',array('id' => $neworderinfo['expressid']),array('name','tel','address'));
|
|
$data1[] = ['Type' => 'String' , 'Content' => '收货人:'.$express['name']];
|
|
$data1[] = ['Type' => 'String' , 'Content' => '联系电话:'.$express['tel']];
|
|
$data1[] = ['Type' => 'String' , 'Content' => '配送地址:'.$express['address']];
|
|
}
|
|
|
|
$data1[] = ['Type' => 'String' , 'Content' => '商品金额:' . self::$orderInfo['goodsprice']];
|
|
$data1[] = ['Type' => 'String' , 'Content' => '折扣优惠:' . self::$orderInfo['discount']];
|
|
if($neworderinfo['expressprcie']>0){
|
|
$data1[] = ['Type' => 'String' , 'Content' => '配送费用:' . $neworderinfo['expressprcie']];
|
|
}
|
|
$data2 = [
|
|
['Type' => 'String' , 'Content' => '实付金额:' . self::$orderInfo['price']] ,
|
|
['Type' => 'String' , 'Content' => '--------------------------------'] ,
|
|
['Type' => 'String' , 'Content' => '会员级别:' . self::$userInfo['lv']] ,
|
|
['Type' => 'String' , 'Content' => '会员姓名:' . self::$userInfo['nickname']] ,
|
|
['Type' => 'String' , 'Content' => '打印时间:' . date("Y-m-d H:i:s" , self::$timeStamp)] ,
|
|
['Type' => 'String' , 'Content' => '--------------------------------'] ,
|
|
['Type' => 'String' , 'Content' => ' 请妥善保管好购物凭证 '] ,
|
|
['Type' => 'String' , 'Content' => ' 谢谢惠顾 '] ,
|
|
];
|
|
$data = array_merge_recursive($data1,$data2);
|
|
return $data;
|
|
}
|
|
/**
|
|
* Comment: 支付方式
|
|
* Author: zzw
|
|
* Date: 2020/4/3 9:41
|
|
* @param $type
|
|
* @return string
|
|
*/
|
|
protected static function getPayType(){
|
|
switch (self::$orderInfo['paytype']){
|
|
case 1:$typeName = '余额';break;//余额
|
|
case 2:$typeName = '微信';break;//微信
|
|
case 3:$typeName = '支付宝';break;//支付宝
|
|
}
|
|
|
|
return $typeName.'支付';
|
|
}
|
|
/**
|
|
* Comment: 获取支付项目
|
|
* Author: zzw
|
|
* Date: 2020/4/8 18:22
|
|
* @param $type
|
|
* @return string
|
|
*/
|
|
protected static function getPayProject(){
|
|
Util::wl_log('printing222' , PATH_MODULE . "log/" ,self::$orderInfo, '打印推送消息 —— 错误记录'); //写入日志记录
|
|
switch (self::$orderInfo['payfor']) {
|
|
case 'Applydis':
|
|
$title = '开通分销商';
|
|
break;//开通分销商
|
|
case 'BargainOrder':
|
|
$title = pdo_getcolumn(PDO_NAME."bargain_activity",['id'=>self::$orderInfo['goods_id']],'name');
|
|
break;//砍价商品购买
|
|
case 'Bond':
|
|
$title = '认证保证金缴纳';
|
|
break;//认证保证金缴纳
|
|
case 'Charge':
|
|
$title = '付费入驻';
|
|
break;//付费入驻
|
|
case 'CitycardOrder':
|
|
$title = '同城名片支付';
|
|
break;//同城名片支付
|
|
case 'consumOrder':
|
|
$title = pdo_getcolumn(PDO_NAME."consumption_goods",['id'=>self::$orderInfo['goods_id']],'title');
|
|
break;//积分商品购买
|
|
case 'Couponsharge':
|
|
$title = pdo_getcolumn(PDO_NAME."couponlist",['id'=>self::$orderInfo['goods_id']],'title');;
|
|
break;//卡卷购买
|
|
case 'Fightsharge':
|
|
$title = pdo_getcolumn(PDO_NAME."fightgroup_goods",['id'=>self::$orderInfo['goods_id']],'name');;
|
|
break;//拼团商品购买
|
|
case 'GrouponOrder':
|
|
$title = pdo_getcolumn(PDO_NAME."groupon_activity",['id'=>self::$orderInfo['goods_id']],'name');;
|
|
break;//团购商品购买
|
|
case 'halfcard':
|
|
$title = '一卡通开通/续费';
|
|
break;//一卡通开通/续费
|
|
case 'payonline':
|
|
$title = '在线买单';
|
|
break;//在线买单
|
|
case 'pocketfabusharge':
|
|
$title = '帖子付费项目';
|
|
break;//帖子付费项目
|
|
case 'RushOrder':
|
|
$title = pdo_getcolumn(PDO_NAME."rush_activity",['id'=>self::$orderInfo['goods_id']],'name');;
|
|
break;//抢购商品购买
|
|
case 'TaxipayOrder':
|
|
$title = '出租车在线买单';
|
|
break;//出租车在线买单
|
|
case 'DeliveryOrder':
|
|
$orderno = self::$orderInfo['orderno'];
|
|
$smallorders = pdo_fetchall("SELECT gid,money,num,specid FROM ".tablename('wlmerchant_delivery_order')."WHERE tid = {$orderno} ORDER BY price DESC");
|
|
foreach ($smallorders as $ke => &$orr){
|
|
$goods = pdo_get('wlmerchant_delivery_activity',array('id' => $orr['gid']),array('name'));
|
|
$orr['name'] = $goods['name'];
|
|
if($orr['specid']>0){
|
|
$specname = pdo_getcolumn(PDO_NAME.'delivery_spec',array('id'=>$orr['specid']),'name');
|
|
$orr['name'] .= '/'.$specname;
|
|
}
|
|
$title[] = $orr['name'].' X'.$orr['num'];
|
|
}
|
|
break;//同城配送
|
|
}
|
|
return $title;
|
|
}
|
|
/**
|
|
* Comment: 发送请求
|
|
* Author: zzw
|
|
* Date: 2020/4/2 18:23
|
|
* @param $url
|
|
* @param $data
|
|
* @return bool|string
|
|
*/
|
|
protected static function postData($url, $data) {
|
|
$ch = curl_init ();
|
|
$timeout = 300; // 设定超时时间
|
|
curl_setopt ( $ch, CURLOPT_URL, $url );
|
|
curl_setopt ( $ch, CURLOPT_POST, 1 );
|
|
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
|
|
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
|
|
curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
|
|
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );
|
|
$handles = curl_exec ( $ch );
|
|
|
|
$httpCode = curl_getinfo ( $ch, CURLINFO_HTTP_CODE );
|
|
if ($httpCode != 200) {
|
|
if ($httpCode == 0) {
|
|
return "{\"status\":-1,\"message\":\"网络连接失败!\"}";
|
|
} else {
|
|
return "{\"status\":-1,\"message\":\"网络或者服务器出现异常,HTTP返回状态码" . $httpCode . "\"}";
|
|
}
|
|
}
|
|
curl_close ( $ch );
|
|
return $handles;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Comment: 获取打印配置信息
|
|
* Author: zzw
|
|
* Date: 2020/4/3 14:02
|
|
* @param $tid
|
|
* @return false|mixed|string
|
|
*/
|
|
public static function getPrintingData($tid){
|
|
global $_W;
|
|
#1、信息获取
|
|
self::$tid = $tid;
|
|
self::$timeStamp = time();
|
|
self::getOrder();//订单信息获取
|
|
self::getStore();//商户信息获取
|
|
self::getUser();//用户信息获取
|
|
$data = self::getData();//获取打印设置信息
|
|
return $data;
|
|
}
|
|
|
|
}
|
|
|