一、进入公众号-》功能-》模板消息 点击申请  选择所在行业 (IT科技/互联网|电子商务

二、选择适合的模板 OPENTM401202463模板收到报价通知 ,选择添加 得到自己的模板id:vmCqqpb3X_kuZgE0X0MedB2xbYzQ3titKmEpOd-gwSM

三、报价走异步队列走,新建报价推送  job

    php artisan make:job SendPriceWechat

四、推送报价

/**    
          * 推送报价
          * @param Request $request
          * @return mixed
          */
         public function send(Request $request){
              $user_id = isset(auth('web')->user()->id) ?auth('web')->user()->id : 0;
              $quotation_id_arr = $request->get('quotation_id');
              $inquiry_id = $request->get('inquiry_id');
              //查询判断销售金额是否有小于采购金额
              //$res = InquiryQuotationItem::with('invoiceCategory','delivery','inquiryQuotation')->whereIn("id", $quotation_id_arr)->get()->toArray();
              $res = InquiryQuotationItem::with('delivery','inquiryQuotation')->whereIn("id", $quotation_id_arr)->get()->toArray();
              $list =[];
              foreach ($res as $k=>$v){
                   $list[$v['quotation_id']]['note'] = $v['inquiry_quotation']['customer_note'];
                   $list[$v['quotation_id']]['list'][] = $v;
              }
              $error = 0;
              foreach ($res as $k=>$v){
                   if($v['price'] < $v['vendor_price']){
                        $error=1;
                   }
              }
              if($error == 1){
                   return Y::error('您有报价金额小于采购金额,推送失败!',["code"=>"ERROR_MONEY"]);
              }
              //获取cas 和客户邮箱,发送报价提醒
              $inquiry = Inquiry::with('user','invoices')->findOrFail($inquiry_id);
              if(!$inquiry){
                   return Y::error('没有询单信息!',["code"=>"ERROR_INQUIRY"]);
              }
              $member_id = $inquiry->user_id;
              //查询openid
              $openid = Common::getOpenid($member_id);
              //$cas = $inquiry->cas;
              //$email = $inquiry->user->email;
              //$user_name = $inquiry->user->name;
              $member_info = array(
                   'cas'=>$inquiry->cas,
                   'prod_name'=>$inquiry->prod_name,
                   'email'=>$inquiry->user->email,
                   'user_name'=>$inquiry->user->name,
                   'invoice'=>$inquiry->invoices->erp_name,
                   'openid'=>$openid,
                   'create_time'=>date('Y-m-d H:i:s',time())
              );
              $sendPriceArr = array(
                   'member'=>$member_info,
                   'item'=>$list,
              );
              if(InquiryQuotationItem::whereIn("id", $quotation_id_arr)->update(['is_push'=>1])){
                   Inquiry::where("id","=",$inquiry_id)->update(['status'=>2]);
                  //发送报价提醒给客户
                   //if($member_info['email'] && $member_info['cas']) $this->sendQuoteEmail($member_info,$res);
                   //已经改成从redis 队列发送邮件
                   $this->dispatch((new SendPriceEmail($sendPriceArr))->onQueue("SendPriceEmail"));
                   //如果有openid 推送公众号
                   if($openid) $this->dispatch((new SendPriceWechat($sendPriceArr))->onQueue("SendPriceWechat"));
                   return Y::success('推送成功!',["code"=>"SUCCESS"]);
              }else{
                   return Y::success('推送失败!',["code"=>"ERROR"]);
              }
         }

五、job AutoSendPrice

<?php    
    namespace App\Jobs;
    use App\Library\Common;
    use EasyWeChat\Kernel\Messages\Text;
    use Illuminate\Bus\Queueable;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Queue\InteractsWithQueue;
    use Illuminate\Contracts\Queue\ShouldQueue;
    use Illuminate\Foundation\Bus\Dispatchable;
    use Illuminate\Support\Facades\Log;
    class SendPriceWechat implements ShouldQueue
    {
        use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
        /**
         * Create a new job instance.
         *
         * @return void
         */
        protected $sendInfo;
        public function __construct($sendInfo)
        {
            //
            $this->sendInfo = $sendInfo;
        }
        /**
         * Execute the job.
         *
         * @return void
         */
        public function handle()
        {
            //
            Log::info("start",['SendPriceWechat queue starting']);
            Log::info("start", $this->sendInfo);
            $member_info = $this->sendInfo['member'];
            $item = $this->sendInfo['item'];
            $quote = '';
            foreach($item as $k1=>$v1){
                  foreach($v1['list'] as $k=>$v){
                       if($v['customization_type'] == '定制'){
                            $quote .= '¥'.$v['price'].'/'.$v['package'].$v['package_unit'].'/'.$v['purity'].'/'.$v['customization_type'].$v['etd'].'天/'.Common::$delivery[$v['ship_method']].'/'.$member_info['invoice'];
                       }else{
                            $quote .= '¥'.$v['price'].'/'.$v['package'].$v['package_unit'].'/'.$v['purity'].'/'.$v['customization_type'].Common::$delivery[$v['ship_method']].'/'.$member_info['invoice'];
                       }
                  }
            }
            $openid = $member_info['openid'];
             $app = app('wechat.official_account');
             //第一种方式,消息通知
            /*$msg1="收到报价通知".PHP_EOL.PHP_EOL
                 .'已为您的询单找到合适的报价,请核对确认'.PHP_EOL
                 .'发送时间:'.$member_info['create_time'].PHP_EOL
                 .'报价产品:'.$member_info['prod_name'].PHP_EOL
                 .'报价详情:'.PHP_EOL.PHP_EOL
                 .'备注:'.PHP_EOL
                 .''
            ;
            $text1=new Text($msg1);
            $app->customer_service->message($text1)->to($openid)->send();
            */
             //第二种方式消息模板
             $prod_name = ($member_info['prod_name'] ? $member_info['prod_name'] :$member_info['cas']);
             $app->template_message->send([
                  'touser' => $openid,//用户openid
                  'template_id' => 'vmCqqpb3X_kuZgE0X0MedB2xbYzQ3titKmEpOd-gwSM',//发送的模板id,OPENTM401202463模板收到报价通知
                  'url' => route('m.inquiry.lists', array('type'=>'quote')),//发送后用户点击跳转的链接
                  'data'=>array(
                       "first"  => "已为您的询单找到合适的报价,请核对确认!",
                       'keyword1'=>$member_info['create_time'],
                       'keyword2'=>'委托**商城报价',
                       'keyword3'=>$prod_name,
                       'keyword4'=>$quote,
                       'remark'=>'点击查看更多信息'
                  )
             ]);
             return 'success';
        }
    }