1. 程式人生 > >小程序模板消息後臺發送(集體通知)

小程序模板消息後臺發送(集體通知)

function 新的 pid func req int lds 形式 rsn

1.在小程序後臺配置好模板

2.其中curl需要加上一個參數設置(https發送需要)

3.項目代碼示例:其中有token過期更新的處理方法

/*
* 通知最近7天小程序用戶
* param()
*/
public function xiaoUsersNotice(Request $r) {
$data = $r->all();
$name = $data[‘name‘];//商品名稱
$tmp = $data[‘jianjie‘];
$char = implode("、", $tmp);
$jianjie = $char;//商品簡介

$where_time = (int)time() - 604800;
$result = \DB::table(‘step_form‘)
->select(‘form_uid‘)
->where(‘form_addtime‘,‘>‘,$where_time)
->distinct(‘form_uid‘)
->get();
//組織消息內容
$date = date("Y-m-d H:i:s",time());
$value = array(
"keyword1"=>array(
"value"=>$date,
),
"keyword2"=>array(
"value"=>$name,
),
"keyword3"=>array(
"value"=>$jianjie
),
);
$page=‘pages/index/index‘;
foreach($result as $k => $v){
//根據用戶查詢formid 進行發送並刪除對應的第一條formid
$res_first = \DB::table(‘step_form‘)
->where(‘form_uid‘,$v->form_uid)
->where(‘form_addtime‘,‘>‘,$where_time)
->orderby(‘form_addtime‘)
->first();
//對用戶發送第一條formid
$send_date = array();
$send_date[‘touser‘] = $res_first->form_openid;
$send_date[‘template_id‘]=‘cTXT7hORoKy3lG4QYaBLnMIhaL3ECDX82w_6Zn4g85w‘;
$send_date[‘page‘]= $page; //點擊模板卡片後的跳轉頁面,僅限本小程序內的頁面。支持帶參數,該字段不填則模板無跳轉。
$send_date[‘form_id‘] = $res_first->form_fid;
$send_date[‘data‘]=$value; //模板內容,不填則下發空模板
$send_date[‘color‘]=‘‘; //模板內容字體的顏色,不填默認黑色
$send_date[‘emphasis_keyword‘]=‘‘;
//發送
$url = ‘https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=‘ .$this->get_access_token();
$tmp_send = json_encode($send_date);
$res_str = $this->curl($url,$tmp_send);
$res = json_decode($res_str, true);
if($res[‘errcode‘] == 0){
//成功 刪除用過的 formid
$sql = \DB::table(‘step_form‘)
->where(‘form_fid‘,$res_first->form_fid)
->delete();
}else{
return [‘code‘ => 1001, ‘data‘ => $res_first ,‘mes‘ => $res[‘errcode‘]];
}
}
//刪除過期的formid
$res_del = \DB::table(‘step_form‘)
->where(‘form_addtime‘,‘<=‘,$where_time)
->delete();
return [‘code‘ => 1000, ‘data‘ => [‘message‘ => ‘通知並處理完畢!‘]];
}

public function get_access_token() {
$resu = \DB::table(‘step_token‘)
->where(‘token_id‘,1)
->first();
if(!$resu){
$tmp[‘token_value‘] = 0;
$tmp[‘token_time‘] = 0;
$rest = \DB::table(‘step_token‘)
->insert($tmp);
}
$result = \DB::table(‘step_token‘)
->where(‘token_id‘,1)
->first();
$token_time = $result->token_time;
$token_value = $result->token_value;
if ($token_time < time()) {
$info = file_get_contents("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx5bd&secret=cdea29f37");
$info = json_decode($info);
$token_value = $info->access_token;
$token_time = time() + 7000;
$token[‘token_value‘] = $token_value;
$token[‘token_time‘] = $token_time;
$res = \DB::table(‘step_token‘)
->where(‘token_id‘,1)
->update($token);
}
return $token_value;
}

//curl post方式
public function curl($url, $params) {
//初始化
$curl = curl_init();
//設置抓取的url
curl_setopt($curl, CURLOPT_URL, $url);
//設置頭文件的信息作為數據流輸出
curl_setopt($curl, CURLOPT_HEADER, false);
//設置獲取的信息以文件流的形式返回,而不是直接輸出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//設置post方式提交
curl_setopt($curl, CURLOPT_POST, 1);
//請求https需要設置這個參數
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
//執行命令
$data = curl_exec($curl);
//關閉URL請求
curl_close($curl);
//顯示獲得的數據
return $data;
}

小程序模板消息後臺發送(集體通知)