微信公众号消息推送

php 代码如下

<?php
namespace app\index\controller;
use think\Controller;
use think\Request;
use think\Db;
use think\Exception;

//模板信息发送
class Login extends Controller
{
    //公众号信息
    private $appid = 'xxx';
    private $secret = 'xxxxxxxxxxxxxxxxxxxx';
    //模板ID
    private $template_id = "5u5d7c-AAZ0bK_bExn5ZNlIkYOAj14Q2n1OoxPnpEC4";
    //推送接口地址
    private $url_dev = "http://17606654072.wicp.vip/hello"; //开发环境
    private $url_fh_dev = "http://17606654072.wicp.vip/hello/xsbillfh";

    private $pathpage ="pages/index/index";
    private $pathpage_fh = "pages/billfh/billfh";
    private $url_openid = "https://www.wjmws.xxxx/anrui/";
    private $url = "https://www.wjmws.xxx/anrui/hello";
    private $url_fh = "https://www.wjmws.xxx/anrui/hello/xsbillfh";
    private $openid = 'xxxxx';//小程序ID
    private $companyname = "xxxxx-销售订单";
    private $companynamefh = "xxxxx-销售发货单";
    private $color = "#173177";
    
    public function index()
    {
        $this->sendxsbilldd_msg();
        $this->sendxsbillfh_msg();
        $this->sendxsbillReport_msg();
        dump("发送成功");
    }

    public function getdata(){
        $msg = Db::table('wxxsbilldd_msg')->where('issend', '0')->limit(1)->select();
        dump($msg);
    }

    //小程序跳转
    private function sendxsbilldd_msg_with_openID(){
        $data = array();
        $msg = Db::table('wxxsbilldd_msg')->where('issend', '0')->limit(1)->select();
        if ($msg == null) {
            dump("订单无数据发送失败-openid");
            return;
        }
        $outindex = 0;
        $guid_xsbill = $msg[$outindex]['guid_xsbill'];
        $data_m = Db::table('wxxsbilldd_m')->where('aguid', $guid_xsbill)->select();
        $data_d = Db::table('wxxsbilldd_d')->where('guid_m', $guid_xsbill)->select();
        $items_d = count($data_d); //项数
        $items = (int)$data_m[0]['items'];

        if ( $items !== $items_d){
            dump("订单数据未同步完成-openid".$items.'  '.$items_d.' '.$data_m[0]['aguid'] );
            return ;
        }

        $acode = $data_m[0]['prdacode']; //生产订单号
        $day_yw = $data_m[0]['date_yw']; //时间
        $khaname_long = $data_m[0]['khaname_long']; //客户名称
        $sy = round($data_m[0]['sy'], 2);    //总金额
        $qty = round($data_m[0]['qty'], 2);  //数量
        $aguid = '?id=' . $data_m[0]['aguid'];     //参数ID
        //模板消息拼接
        $touser = $msg[$outindex]['openid'];
        $data = [
            "touser" => $touser,
            "template_id" => $this->template_id,
            "url" => $this->url_openid ,
            "miniprogram"=>array(
                "appid"=>$this->openid,
                "pagepath"=>$this->pathpage.$aguid,
            ),
            "data" => array(
                "first" => array("value" => $this->companyname,"color" => $this->color),
                "keyword1" => array("value" => $khaname_long,"color" => $this->color),
                "keyword2" => array("value" => $acode,"color" => $this->color),
                "keyword3" => array("value" => $items_d,"color" => $this->color),
                "keyword4" => array("value" => $qty,"color" => $this->color),
                "keyword5" => array("value" => $sy.'元',"color" => $this->color),
                "remark" => array("value" => $day_yw,"color" => $this->color),
            )
        ];

        //模板消息发送
        $access_token = $this->getWxAccessToken();
        $msgurl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=". $access_token; // 发送模板消息接口
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $msgurl);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        // 我们在POST数据哦!
        curl_setopt($ch, CURLOPT_POST, 1);
        // 把post的变量加上
        $json_template = json_encode($data);
        curl_setopt($ch, CURLOPT_POSTFIELDS, urldecode($json_template));
        curl_exec($ch);
        curl_close($ch);

        dump($data);
        dump($msgurl);

        //更新 issend 状态
        Db::startTrans();
        try {
            Db::table('wxxsbilldd_msg')->where('aguid', $msg[$outindex]['aguid'])->update(['issend' => '1']);
            Db::commit();
            dump("订单更新完成-openid");
        } catch (Exception $e) {
            Db::rockback();
        }
    }

    private function sendxsbilldd_msg(){
        $data = array();
        $msg = Db::table('wxxsbilldd_msg')->where('issend', '0')->limit(1)->select();
        if ($msg == null) {
            dump("订单无数据发送失败");
            return;
        }

        $outindex = 0;
        $guid_xsbill = $msg[$outindex]['guid_xsbill'];
        $data_m = Db::table('wxxsbilldd_m')->where('aguid', $guid_xsbill)->select();
        $data_d = Db::table('wxxsbilldd_d')->where('guid_m', $guid_xsbill)->select();
        $items_d = count($data_d); //项数
        if($data_m ==null){
            //更新 issend 状态
        Db::startTrans();
        try {
            Db::table('wxxsbilldd_msg')->where('aguid', $msg[$outindex]['aguid'])->update(['issend' => '1']);
            Db::commit();
            dump("订单更新完成");
        } catch (Exception $e) {
            Db::rockback();
        }
        dump($msg[$outindex]['guid_xsbill']);
   
        return ;
        }
        $items = (int)$data_m[0]['items'];

        if ( $items !== $items_d){
            dump("订单数据未同步完成 ".$items.'  '.$items_d.' '.$data_m[0]['aguid'] );
            return ;
        }

        $acode = $data_m[0]['acode']; //生产订单号
        $day_yw = $data_m[0]['date_yw']; //时间
        $khaname_long = $data_m[0]['khaname_long']; //客户名称
        $sy = round($data_m[0]['sy'], 2);    //总金额
        $qty = round($data_m[0]['qty'], 2);  //数量
        $aguid = '?id=' . $data_m[0]['aguid'];     //参数ID
        $weburl = $this->url . $aguid; //web网页链接
        $this->pagepath = $aguid;  //小程序使用
        //模板消息拼接
        $touser = $msg[$outindex]['openid'];
        $data = [
            "touser" => $touser,
            "template_id" => $this->template_id,
            "url" => $weburl,
            "data" => array(
                "first" => array("value" => $this->companyname,"color" => $this->color),
                "keyword1" => array("value" => $khaname_long,"color" => $this->color),
                "keyword2" => array("value" => $acode,"color" => $this->color),
                "keyword3" => array("value" => $items_d,"color" => $this->color),
                "keyword4" => array("value" => $qty,"color" => $this->color),
                "keyword5" => array("value" => $sy.'元',"color" => $this->color),
                "remark" => array("value" => $day_yw,"color" => $this->color),
            )
        ];

        //模板消息发送
        $access_token = $this->getWxAccessToken();
        $msgurl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=". $access_token; // 发送模板消息接口
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $msgurl);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        // 我们在POST数据哦!
        curl_setopt($ch, CURLOPT_POST, 1);
        // 把post的变量加上
        $json_template = json_encode($data);
        curl_setopt($ch, CURLOPT_POSTFIELDS, urldecode($json_template));
        curl_exec($ch);
        curl_close($ch);

        //更新 issend 状态
        Db::startTrans();
        try {
            Db::table('wxxsbilldd_msg')->where('aguid', $msg[$outindex]['aguid'])->update(['issend' => '1']);
            Db::commit();
            dump("订单更新完成");
        } catch (Exception $e) {
            Db::rockback();
        }
    }

    private function sendxsbillfh_msg_with_openid(){
        $data = array();
        $msg = Db::table('wxxsbillfh_msg')->where('issend', '0')->limit(1)->select();
        if ($msg == null) {
            return;
        }
        $outindex = 0;
        $guid_xsbill = $msg[$outindex]['guid_xsbill'];
        $data_m = Db::table('wxxsbillfh_m')->where('aguid', $guid_xsbill)->select();
        $data_d = Db::table('wxxsbillfh_d')->where('guid_m', $guid_xsbill)->select();
        $items_d = count($data_d); //项数

        if($data_m.length==0)
        {
            //更新 issend 状态
        Db::startTrans();
        try {
            Db::table('wxxsbillfh_msg')->where('aguid', $msg[$outindex]['aguid'])->update(['issend' => '1']);
            Db::commit();
            dump("发货消息更新完成");
        } catch (Exception $e) {
            Db::rockback();
        }
            return ;
        }

        $items = (int)$data_m[0]['items'];
        if ( $items !== $items_d){
            return '发货单明细数据未同步完成';
        }

        $acode = $data_m[0]['acode']; //生产订单号
        $day_yw = $data_m[0]['date_yw']; //时间
        $khaname_long = $data_m[0]['khaname_long']; //客户名称
        $sy = round($data_m[0]['sy'], 2);    //总金额
        $qty = round($data_m[0]['qty'], 2);  //数量
        $aguid = '?id=' . $data_m[0]['aguid'];     //参数ID
        //模板消息拼接
        $touser = $msg[$outindex]['openid'];
        $data = [
            "touser" => $touser,
            "template_id" => $this->template_id,
            "url" => $this->url_openid,
            "miniprogram"=>array(
                "appid"=>$this->openid,
                "pagepath"=>$this-pathpage_fh.$aguid,
            ),
            "data" => array(
                "first" => array("value" => $this->companynamefh,"color" => $this->color),
                "keyword1" => array("value" => $khaname_long,"color" => $this->color),
                "keyword2" => array("value" => $acode,"color" => $this->color),
                "keyword3" => array("value" => $items_d,"color" => $this->color),
                "keyword4" => array("value" => $qty,"color" => $this->color),
                "keyword5" => array("value" => $sy.'元',"color" => $this->color),
                "remark" => array("value" => $day_yw,"color" => $this->color),
            )
        ];

        //模板消息发送
        $access_token = $this->getWxAccessToken();
        $msgurl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=". $access_token; // 发送模板消息接口
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $msgurl);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        // 我们在POST数据哦!
        curl_setopt($ch, CURLOPT_POST, 1);
        // 把post的变量加上
        $json_template = json_encode($data);
        curl_setopt($ch, CURLOPT_POSTFIELDS, urldecode($json_template));
        curl_exec($ch);
        curl_close($ch);

        //更新 issend 状态
        Db::startTrans();
        try {
            Db::table('wxxsbillfh_msg')->where('aguid', $msg[$outindex]['aguid'])->update(['issend' => '1']);
            Db::commit();
            dump("发货消息更新完成");
        } catch (Exception $e) {
            Db::rockback();
        }
    }

    private function sendxsbillfh_msg(){
        $data = array();

        $msg = Db::table('wxxsbillfh_msg')->where('issend', '0')->limit(1)->select();
        if ($msg == null) {
            return;
        }
        $outindex = 0;
        $guid_xsbill = $msg[$outindex]['guid_xsbill'];


        $data_m = Db::table('wxxsbillfh_m')->where('aguid', $guid_xsbill)->select();
        $data_d = Db::table('wxxsbillfh_d')->where('guid_m', $guid_xsbill)->select();
        $items_d = count($data_d); //项数

     
        if($data_m==null){

            //更新 issend 状态
            Db::startTrans();
            try {
                Db::table('wxxsbillfh_msg')->where('aguid', $msg[$outindex]['aguid'])->update(['issend' => '1']);
                Db::commit();
                dump("发货消息更新完成");
            } catch (Exception $e) {
                Db::rockback();
            }
            return ;
        }



        $items = (int)$data_m[0]['items'];
        if ( $items !== $items_d){
            return '发货单明细数据未同步完成';
        }

        $acode = $data_m[0]['acode']; //生产订单号
        $day_yw = $data_m[0]['date_yw']; //时间
        $khaname_long = $data_m[0]['khaname_long']; //客户名称
        $sy = round($data_m[0]['sy'], 2);    //总金额
        $qty = round($data_m[0]['qty'], 2);  //数量
        $aguid = '?id=' . $data_m[0]['aguid'];     //参数ID
        
         $remark = "上一次付款日期是".substr($data_m[0]['cwdate_lastpay'],0,10).",已复核单据欠款共:".(string)round($data_m[0]['cwmoney_debt'])."元";
        
        $weburl = $this->url_fh . $aguid; //web网页链接
        $this->pagepath = $aguid;  //小程序使用
        //模板消息拼接
        $touser = $msg[$outindex]['openid'];
        $data = [
            "touser" => $touser,
            "template_id" => $this->template_id,
            "url" => $weburl,
            "data" => array(
                "first" => array("value" => $this->companynamefh,"color" => $this->color),
                "keyword1" => array("value" => $khaname_long,"color" => $this->color),
                "keyword2" => array("value" => $acode,"color" => $this->color),
                "keyword3" => array("value" => $items_d,"color" => $this->color),
                "keyword4" => array("value" => $qty,"color" => $this->color),
                "keyword5" => array("value" => $sy.'元',"color" => $this->color),
                "remark" => array("value" =>  $remark ,"color" => $this->color),
            )
        ];

        //模板消息发送
        $access_token = $this->getWxAccessToken();
        $msgurl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=". $access_token; // 发送模板消息接口
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $msgurl);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        // 我们在POST数据哦!
        curl_setopt($ch, CURLOPT_POST, 1);
        // 把post的变量加上
        $json_template = json_encode($data);
        curl_setopt($ch, CURLOPT_POSTFIELDS, urldecode($json_template));
        curl_exec($ch);
        curl_close($ch);

        //更新 issend 状态
        Db::startTrans();
        try {
            Db::table('wxxsbillfh_msg')->where('aguid', $msg[$outindex]['aguid'])->update(['issend' => '1']);
            Db::commit();
            dump("发货消息更新完成");
        } catch (Exception $e) {
            Db::rockback();
        }
    }

      private function sendxsbillReport_msg(){
        $data = array();
        $msg = Db::table('xsreport_msg')->where('issend', '0')->limit(1)->select();
        if ($msg == null) {
            return;
        }
        $outindex = 0;
        $guid_xsbill = $msg[$outindex]['guid_xsreport'];
        $data_m = Db::table('wxxsreports_m')->where('aguid', $guid_xsbill)->select();
        if($data_m==null){

            return;
        }

        $day_yw = substr($data_m[0]['date_yw'],0,10); //时间
        $day_dd = '昨日订单销售额:'.(string)round($data_m[0]['day_dd'], 2).'元';    //昨日销售额
        $day_fh = '昨日发货销售额:'.(string)round($data_m[0]['day_fh'], 2).'元';  

        $month_dd = '本月订单销售额:'.(string)round($data_m[0]['month_dd'], 2).'元';    //本月
        $month_fh = '本月发货销售额:'.(string)round($data_m[0]['month_fh'], 2).'元'; 



        //模板消息拼接
        $touser = $msg[$outindex]['openid'];
        $data = [
            "touser" => $touser,
            "template_id" => 'UQhFSRXmcv8zpFP2XIlHOdnP_PukJaX6jBjRuMt-HCE',
            "data" => array(
                "first" => array("value" => "广州市安瑞销售日报统计","color" => $this->color),
                "keyword1" => array("value" => $day_yw,"color" => $this->color),
                "keyword2" => array("value" => $day_dd,"color" => $this->color),
                "keyword3" => array("value" => $day_fh,"color" => $this->color),
                "keyword4" => array("value" => $month_dd,"color" => $this->color),
                "keyword5" => array("value" => $month_fh,"color" => $this->color),
                "remark" => array("value" =>  "" ,"color" => $this->color),
            )
        ];

        //模板消息发送
        $access_token = $this->getWxAccessToken();
        $msgurl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=". $access_token; // 发送模板消息接口
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $msgurl);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        // 我们在POST数据哦!
        curl_setopt($ch, CURLOPT_POST, 1);
        // 把post的变量加上
        $json_template = json_encode($data);
        curl_setopt($ch, CURLOPT_POSTFIELDS, urldecode($json_template));
        curl_exec($ch);
        curl_close($ch);

        //更新 issend 状态
        Db::startTrans();
        try {
            Db::table('xsreport_msg')->where('aguid', $msg[$outindex]['aguid'])->update(['issend' => '1']);
            Db::commit();
            dump("销售日报消息更新完成");
        } catch (Exception $e) {
            Db::rockback();
        }
    }


    //获取用户信息  //写入数据
    public function getUserInfo(){
        while (true){
            $token_access = $this->getWxAccessToken();
            $lturl = 'https://api.weixin.qq.com/cgi-bin/user/get?access_token='.$token_access;
            $user_openids = $this->request_get($lturl); //获取用户信息列表
            $user_openids = json_decode(stripslashes($user_openids));
            $arr = json_decode(json_encode($user_openids), true);
            $count = count($arr);
            break;
        }

        if($count<4) {
            dump($arr); 
            return 506;       
        }

        
        $res1 = $arr['data']['openid'];
        $count = count($res1);
        $index = 0;
        while ( $index<$count){
            $ltopenid = $res1[$index];
            $token_access = $this->getWxAccessToken();
            $lturl = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$token_access.'&openid='.$ltopenid.'&lang=zh_CN';
            $usrinfo = $this->request_get($lturl); //获取用户基本信息
            $usrinfo = json_decode(stripslashes($usrinfo));
            $arrusrinfo = json_decode(json_encode($usrinfo), true);
            $length = count($arrusrinfo);
            if ($length!==2){
                $index = $index+1;
                $usrname = $arrusrinfo['nickname'];
                //存入数据库
                $data = null;
                $data = ['openid' => $ltopenid, 'username' => $usrname,'issuper'=>'0'];
                $exitdata = Db::table('wx_gzuser_info')->where('openid','=',$ltopenid)->select();
                if ($exitdata == null){
                    Db::startTrans();
                    try{
                        Db::table('wx_gzuser_info')->insert($data);
                        Db::commit();
                        dump("更新完成");
                    }catch(Exception $e){
                        Db::rockback();
                    }
                }

                
            }
        }

    }

    private function request_get($url){
        $ch = curl_init();
        //2.设置url 的参数
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //不需要安全检验证书
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        //3.采集
        $res = curl_exec($ch);
        if ( curl_errno($ch)){
                var_dump(curl_error($ch));
            }
            //4.关闭
        curl_close($ch);
        return $res;
    }

    //获取Access_Token
    private function getWxAccessToken(){
        $res = json_decode(cache('access_token_anrui'),true);//获取缓存
        if($res !== null && $res["access_token"] && $res["expires_in"]>time()){
            return $res['access_token'];
        }else {
            $lturl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->secret;
            //初始化
            $ch = curl_init();
            //2.设置url 的参数
            curl_setopt($ch,CURLOPT_URL,$lturl);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            //不需要安全检验证书
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
            //3.采集
            $res = curl_exec($ch);
            if ( curl_errno($ch)){
                var_dump(curl_error($ch));
            }
            //4.关闭
            curl_close($ch);
            $arr = json_decode($res,true);
            if($arr !== null && $arr['access_token'] ){
                $arr['expires_in'] = $arr['expires_in'] +time();
                //将access_token 全局缓存 
                cache('access_token_anrui',json_encode($arr));
                return $arr['access_token'];
            }else {
                exit('微信获取access_token_anrui 失败');
            } 
            var_dump($arr);
        }     
    }
   
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Listest

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值