E企盈营销工具技术服务商 热线:4006-838-530

php实现小程序定时推送消息

E企盈直播平台营销卖货系统

之前工作需求,需要开发微信小程序,现在一段时间没做都快忘记了,今天记录一下!!!首先,小程序的定时推送消息是有限制的,如果用户主动触发小程序1次,小程序可在7天内向用户主动推送1条模版消息,如果用户通过小程序完成支付,小程序可在7天内向用户主动推送3条模版消息,对于这句话的理解就是:用户触发一次,就会向后台发送一个formid来向用户推送模板消息,但是这个formid有效期只有7天,且只能使用一次。那么如何推送消息?又有什么要求呢?首先,讲讲要求,想要推送模板消息,就需要用户的openid、小程序的accesstoken 和 触发表单的formid01、获取用户的openid官方文档说可以通过用户登录向后台发送 res.code 到后台换取 openId, sessionKey, unionId,利用提供的组件wx.login({}),直接上代码:前端代码发送code给后台,返回openid,全局app.jswx.login({      success: res = {        // 发送 res.code 到后台换取 openId, sessionKey, unionId        var code = res.code;        if (code) {          wx.request({            url: ‘后台地址’,            method: “POST”,            data: {              code: code,            },            header: {              ‘Content-Type’: ‘application/x-www-form-urlencoded’            },            success(res) {              that.globalData.openid = res.data.openid;//存储到全局            }          })        } else {          console.log(‘获取code失败’)        }      }    })后台PHP代码:$code = $_POST[‘code’];//接收前端code$APPID = “APPID”;//小程序后台管理提供的id$APPSECRET =  “APPSECRET”;//小程序后台管理提供的秘钥,很重要,首次生成后记好,不要随便更改,如果重新生成秘钥后,需要修改已发布的项目,否则会报错  /**  *  openid  */ function getOpenId($APPID,$APPSECRET,$code) {//$url是小程序提供的接口    $url = “https://api.weixin.qq.com/sns/jscode2session?appid=”.$APPID.”&secret=”.$APPSECRET.”&js_code=”.$code.”&grant_type=authorization_code”;    $res = httpRequest($url);    $res = json_decode($res,true);    return $res;}/** * curl获取指定网页内容 */ function httpRequest($url, $data=”, $method=’GET’){    $curl = curl_init();      curl_setopt($curl, CURLOPT_URL, $url);      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);      curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);      curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER[‘HTTP_USER_AGENT’]);      curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);      curl_setopt($curl, CURLOPT_AUTOREFERER, 1);      if($method==’POST’)    {        curl_setopt($curl, CURLOPT_POST, 1);         if ($data != ”)        {            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);          }    }    curl_setopt($curl, CURLOPT_TIMEOUT, 30);      curl_setopt($curl, CURLOPT_HEADER, 0);      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);      $result = curl_exec($curl);      curl_close($curl);      return json_decode($result,true);  } 02、获取小程序的accesstoken注意:目前小程序的access_token有效期期是2小时,也就是7200秒,所以需要定时刷新,重复刷新会导致上次获取的 access_token 失效,建议开发者统一获取和刷新 access_token,不应该各自去刷新,否则容易造成冲突,导致 access_token 覆盖而影响业务;  /**   * 获取accessToken   */function accessToken($APPID,$APPSECRET) {    $tokenFile = __DIR__.”xxxx.txt”;//存储access_token的文件    //缓存文件名    $data = json_decode(file_get_contents($tokenFile));    //判断时间是否过期或不存在    if ($data-expire_time time() || !$data-expire_time) {    //小程序提供的获取accesstoken的接口        $access_token = “https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=”.$APPID.”&secret=”.$APPSECRET;        $res = httpRequest($access_token);        $res = json_decode($res,true);        $access_token = $res[‘access_token’];        if ($access_token) {        //设置过期时间            $jsonstr[‘expire_time’] = time() + 7000;            //设置 $access_token            $jsonstr[‘access_token’] = $access_token;            $fp = fopen($tokenFile, “w”);//打开文件            fwrite($fp, json_encode($jsonstr));//写入文件            fclose($fp);//关闭文件        }    } else {    //未过期直接从文件中读取accesstoken        $access_token = $data-access_token;    }    return $access_token;}$token = accessToken($APPID,$APPSECRET);03、获取表单的formid既然是表单的id,当然就是form+button了,直接上代码//wxml代码form bindsubmit=”getformid” report-submit=”{{true}}”   button formType=”submit” bindtap=’close’ data-title=’hb’ class=’HB_des’取消/button/form//js代码  //获取用户唯一标识 formid,推送模板消息  getformid: function (e) {    if (e.detail.formId != “the formId is a mock one”) {        var formId_str = e.detail.formId;        wx.request({          url: ‘后台地址’,          method: ‘POST’,          header: {            ‘Content-Type’: ‘application/x-www-form-urlencoded’          },          data: {            formid: formId_str,            openid: app.globalData.openid,//用户id,上面获取            expire: parseInt(new Date().getTime() / 1000) + 604800,//计算7天后的过期时间时间戳-秒,存储需要          },          success: function (res) {            console.log(‘成功’);            console.log(res);          },          fail: function (err) {            console.log(‘request fail ‘, err);          },        })    }  },该获取的都获取了,现在来推送模板消息$formid= $_POST[‘formid’];$openid= $_POST[‘openid’];$token= $_POST[‘token’];//accesstoken不需要返回前端,在后直接使用,这里为了方便,获取请看上文/** * 发送模板消息 */ function sendTemMsg($formid,$openid,$token){//小程序提供发布模板的接口    $url=’https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=’.$token;    $temid=’Dwme7pfbGkfh87394p0tkOrYhKpMbeok27CFP3-BDjU’;//小程序后台管理模板id,下文介绍    $page=’pages/index/index’;//小程序首页    //以下提供的模板样式,根据项目需求,手动添加    $data = array(        “touser”=$openid,        “template_id”=$temid,        “page”=$page,        “form_id”=$formid,        “data”=array(            “keyword1″=array(                “value”=’自定义内容’,                “color”=”#173177”            ),            “keyword2″=array(                “value”=’好文章分享!’,                “color”=”#173177”            ),            “keyword3″=array(                “value”=’好文章分享!’

赞(0) 打赏
未经允许不得转载:E企盈小程序开发-热线:4006-838-530 » php实现小程序定时推送消息
分享到: 更多 (0)
E企盈小程序直播营销卖货系统
E企盈直播平台营销卖货系统

评论 抢沙发

E企盈小程序开发

联系我们联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏