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.
147 lines
5.5 KiB
147 lines
5.5 KiB
<?php
|
|
|
|
|
|
namespace App\Service;
|
|
|
|
|
|
use App\Model\Order;
|
|
use App\Model\OrderGoods;
|
|
use App\Model\OrderMain;
|
|
use App\Model\Store;
|
|
use App\Model\Users;
|
|
use EasyWeChat\Factory;
|
|
use Hyperf\Guzzle\CoroutineHandler;
|
|
|
|
class MiniprogramService implements MiniprogramServiceInterface
|
|
{
|
|
|
|
public function sendTemMsgForOnlineOrder($order_main_id)
|
|
{
|
|
|
|
// 查询订单信息
|
|
$order = OrderMain::find($order_main_id);
|
|
|
|
$payTypes = ['1' => '微信支付', '2' => '余额支付', '3' => '积分支付', '4' => '货到付款'];
|
|
$address_store = $order['address'] . ';' .$order['name']. ';'. substr_replace($order['tel'],'****',3,4);
|
|
$address = $order['address'] . ';' .$order['name']. ';'. $order['tel'];
|
|
|
|
// 查询子订单,用于发消息给商户
|
|
$order_children = Order::query()->select(['id', 'order_num', 'store_id', 'money', 'time'])
|
|
->where(['order_main_id' => $order_main_id])
|
|
->get()
|
|
->toArray();
|
|
|
|
$goods_temp_all = [];
|
|
foreach ($order_children as $key => &$item) {
|
|
|
|
$item = (array)$item;
|
|
|
|
// 订单商品
|
|
$order_goods = OrderGoods::query()->select(['name', 'number', 'spec', 'good_unit'])
|
|
->where(['order_id' => $item['id']])
|
|
->get()
|
|
->toArray();
|
|
|
|
$goods_temp = [];
|
|
foreach ($order_goods as $k => &$goods) {
|
|
array_push($goods_temp, $goods['name']."*".$goods['number']."/".($goods['spec']?:$goods['good_unit']));
|
|
array_push($goods_temp_all, $goods['name']."*".$goods['number']."/".($goods['spec']?:$goods['good_unit']));
|
|
}
|
|
|
|
// 商户/门店的openid
|
|
$store = Store::query()->select(['id', 'name', 'user_id'])
|
|
->where(['id' => $item['store_id']])
|
|
->first()->toArray();
|
|
$store['openid'] = Users::query()
|
|
->where(['id' => $store['user_id']])
|
|
->value('openid');
|
|
|
|
// 模板数据
|
|
$data_store = [
|
|
'first' => ['您有新的外卖订单!订单编号:'.$item['order_num'], '#ff0000'],
|
|
'keyword' => [
|
|
["您的外卖订单详情:\r\n".implode(";\r\n",$goods_temp), '#ff0000'],
|
|
$item['money'],
|
|
$payTypes[$order['pay_type']],
|
|
$item['time']?:'',
|
|
$address_store,
|
|
],
|
|
'remark' => [$order['note'], '#4e6ef2']
|
|
];
|
|
|
|
$ret_store = $this->sendTempMsg($store['openid'], '-M7DG_ACwJxqdAvyvJuAnPpx4xaLf3VkkN0fckno71c',$data_store);
|
|
}
|
|
|
|
// 模板数据发送消息给用户
|
|
$data_user = [
|
|
'first' => '您好,下单成功!订单编号:'.$order['order_num'],
|
|
'keyword' => [
|
|
implode(";\r\n", $goods_temp_all),
|
|
$order['money'],
|
|
$payTypes[$order['pay_type']],
|
|
date('Y-m-d H:i:s', $order['time_add']),
|
|
$address,
|
|
],
|
|
'remark' => '感谢您的光临,欢迎下次再来!'
|
|
];
|
|
|
|
// 获取用户openid,发送给用户
|
|
$user_openid = Users::query()->where(['id' => $order['user_id']])->value('openid');
|
|
$ret_user = $this->sendTempMsg($user_openid,'-M7DG_ACwJxqdAvyvJuAnPpx4xaLf3VkkN0fckno71c', $data_user);
|
|
|
|
}
|
|
|
|
public function sendTempMsg($openid, $template_id, $data, $redirect_url = '', $applet_config = ['appid' => '', 'pagepath' => ''])
|
|
{
|
|
// 先拼个基础的
|
|
$template = [
|
|
'touser' => $openid,
|
|
'mp_template_msg' => [
|
|
'appid' => env('OFFICIAL_APP_ID'),
|
|
'template_id' => $template_id,
|
|
'url' => $redirect_url,
|
|
]
|
|
];
|
|
|
|
// 看看有没有小程序跳转的要求
|
|
$template['mp_template_msg']['miniprogram'] = $applet_config;
|
|
|
|
// 重点来了,拼接关键数据data
|
|
if (!is_array($data)) { # 数组都不是,请回去
|
|
return false;
|
|
}
|
|
|
|
if (is_array($data['first'])) {
|
|
$template['mp_template_msg']['data']['first']['value'] = $data['first'][0] ?? '';
|
|
$template['mp_template_msg']['data']['first']['color'] = $data['first'][1] ?? '';
|
|
} else {
|
|
$template['mp_template_msg']['data']['first']['value'] = $data['first'];
|
|
}
|
|
|
|
if (isset($data['keyword'])&&is_array($data['keyword'])) {
|
|
foreach ($data['keyword'] as $key => &$keyword) {
|
|
$index = $key+1;
|
|
|
|
if (is_array($keyword)) {
|
|
$template['mp_template_msg']['data']['keyword'.$index]['value'] = $keyword[0] ?? '';
|
|
$template['mp_template_msg']['data']['keyword'.$index]['color'] = $keyword[1] ?? '';
|
|
} else {
|
|
$template['mp_template_msg']['data']['keyword'.$index]['value'] = $keyword;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
if (is_array($data['remark'])) {
|
|
$template['mp_template_msg']['data']['remark']['value'] = $data['remark'][0] ?? '';
|
|
$template['mp_template_msg']['data']['remark']['color'] = $data['remark'][1] ?? '';
|
|
} else {
|
|
$template['mp_template_msg']['data']['remark']['value'] = $data['remark'];
|
|
}
|
|
|
|
$app = Factory::miniProgram(config('wxtempmsg'));
|
|
$app['guzzle_handler'] = CoroutineHandler::class;
|
|
$app->uniform_message->send($template);
|
|
}
|
|
|
|
}
|