发模板消息( 自己项目 )
1. 在控制器或者model里面調用model里下面這個方法
//到賬提醒
? ?public function filmquantity($cardid,$mvnum){
? ? ? ? try {
? ? ? ? ? ? $mMsg=new MmsgModel();
? ? ? ? ? ? $ret=$mMsg->accountnotice($cardid,$mvnum);
? ? ? ? ? ? if ($ret){//生成成功
? ? ? ? ? ? ? ? //調用后臺發送通知
? ? ? ? ? ? ? ? GetData2(Constants::serverHTTP."admin/SendWxTplMsg?id=".$ret);
? ? ? ? ? ? }
? ? ? ? ? ? response($ret, Constants::RESPONESE_SUCCESS, '');
? ? ? ? } catch (Exception $e) {
? ? ? ? ? ? response_catch($e);
? ? ? ? }
? ? }
2. 這個方法調用了MmsgModel里的accountnotice方法(這一步在準備數據,然后調用了wxMsg公共方法,在functions.php)
//到賬提醒
? ? public function accountnotice($cardid,$mvnum){
? ? ? ? $res=M('acard')->field('fdcNick')->where(['ID'=>$cardid])->select();
? ? ? ? if($res) {
? ? ? ? ? ? $data = [
? ? ? ? ? ? ? ? 'key1' => '您好!您領取的的電影票已到賬!',//標題
? ? ? ? ? ? ? ? 'key2' => $res[0]['fdcNick'],//訂單號
? ? ? ? ? ? ? ? 'key3' => $mvnum . '張',//訂單類型
? ? ? ? ? ? ? ? 'key4' => date('Y-m-d H:i:s'),//訂單說明
? ? ? ? ? ? ? ? 'key5' => '請點擊進入預約界面!當前電影票需預約后才可觀看!',//備注
? ? ? ? ? ? ];
? ? ? ? }
? ? ? ? //模版消息確認url 需要全寫 http://yc.wzjo2o.com
? ? ? ? ?$url="http://yc.wzjo2o.com/index/goto?url=".urlencode('mine/gift?shopID=all');
? ? ? ? ?$ret =wxMsg(1102,$cardid,$data,$url);
? ? ? ? ?return $ret;
? ? }
3. wxMsg公共方法先從數據庫取出模板(這個是對應微信上的格式[寫法在5]手動添加到數據庫的), 然后把模板里面固定的字替換成剛剛上方準備的數據. 然后回到最外面的(model里的?filmquantity方法 )方法調用GetData2公共方法(寫法在下方)去調用后臺發送消息模板.
/*
?*? 消息模板
?*/
function wxMsg($type,$cardid,$keys,$url){
? ? $data=M('aformat')->where('id='.$type)->find();????????//取出模板
? ? if($data){
? ? ? ? $format=$data['fdcFormat'];
? ? ? ? //標題&訂單號&訂單類型&訂單說明&備注
? ? ? ? //電影票發放確認消息
? ? ? ? if($type==1101) {
? ? ? ? ? ? $format = str_replace('[標題]', $keys['key1'], $format);
? ? ? ? ? ? $format = str_replace('[訂單號]', $keys['key2'], $format);
? ? ? ? ? ? $format = str_replace('[訂單類型]', $keys['key3'], $format);
? ? ? ? ? ? $format = str_replace('[訂單說明]', $keys['key4'], $format);
? ? ? ? ? ? $format = str_replace('[備注]', $keys['key5'], $format);
? ? ? ? }
? ? ? ? //標題&賬戶名&數量&時間&備注
? ? ? ? //電影票到賬確認消息
? ? ? ? else if($type==1102) {
? ? ? ? ? ? $format = str_replace('[標題]', $keys['key1'], $format);
? ? ? ? ? ? $format = str_replace('[賬戶名]', $keys['key2'], $format);
? ? ? ? ? ? $format = str_replace('[數量]', $keys['key3'], $format);
? ? ? ? ? ? $format = str_replace('[時間]', $keys['key4'], $format);
? ? ? ? ? ? $format = str_replace('[備注]', $keys['key5'], $format);
? ? ? ? }
? ? ? ? else if($type==1103) {
? ? ? ? ? ? $format = str_replace('[標題]', $keys['key1'], $format);
? ? ? ? ? ? $format = str_replace('[消費項目]', $keys['key2'], $format);
? ? ? ? ? ? $format = str_replace('[消費時間]', $keys['key3'], $format);
? ? ? ? ? ? $format = str_replace('[備注]', $keys['key4'], $format);
? ? ? ? }
? ? ? ? else if($type==1104) {
? ? ? ? ? ? $format = str_replace('[標題]', $keys['key1'], $format);
? ? ? ? ? ? $format = str_replace('[活動]', $keys['key2'], $format);
? ? ? ? ? ? $format = str_replace('[獎品]', $keys['key3'], $format);
? ? ? ? ? ? $format = str_replace('[時間]', $keys['key4'], $format);
? ? ? ? ? ? $format = str_replace('[備注]', $keys['key5'], $format);
? ? ? ? }
? ? ? ? else if($type==1105) {
? ? ? ? ? ? $format = str_replace('[標題]', $keys['key1'], $format);
? ? ? ? ? ? $format = str_replace('[到賬時間]', $keys['key2'], $format);
? ? ? ? ? ? $format = str_replace('[到賬金額]', $keys['key3'], $format);
? ? ? ? ? ? $format = str_replace('[收益產品]', $keys['key4'], $format);
? ? ? ? ? ? $format = str_replace('[備注]', $keys['key5'], $format);
? ? ? ? }
? ? ? ? else if ($type==101) {
? ? ? ? ? ? $format = str_replace('[金額]', $keys['key1'], $format);
? ? ? ? ? ? $format = str_replace('[時間]', date('y-m-d H:i:s', time()), $format);
? ? ? ? ? ? // $format = str_replace('[傭金類型]', $keys['key2'], $format);
? ? ? ? ? ? $format = str_replace('[備注]', $keys['key2'], $format);
? ? ? ? }else if ($type==102){? ? // 邀請注冊成功
? ? ? ? ? ? $format = str_replace('[會員昵稱]', $keys['key1'], $format);
? ? ? ? ? ? $format = str_replace('[會員幸運號]', $keys['key2'], $format);
? ? ? ? ? ? $format = str_replace('[時間]', date('y-m-d H:i:s', time()), $format);
? ? ? ? }else if ($type==103){? ? //收益提醒
? ? ? ? ? ? $format = str_replace('[標題]', $keys['first'], $format);
? ? ? ? ? ? $format = str_replace('[收益類型]', $keys['key1'], $format);
? ? ? ? ? ? $format = str_replace('[收益時間]', date('y-m-d H:i:s', time()), $format);
? ? ? ? }else if ($type==104){? ? //拼團成功
? ? ? ? ? ? $format = str_replace('[標題]', $keys['key1'], $format);
? ? ? ? ? ? $format = str_replace('[名稱]', $keys['key2'], $format);
? ? ? ? ? ? $format = str_replace('[價格]', $keys['key3'], $format);
? ? ? ? ? ? $format = str_replace('[人數]', $keys['key4'], $format);
? ? ? ? ? ? $format = str_replace('[備注]', $keys['key5'], $format);
? ? ? ? }else if ($type==105){? ? //訂單狀態變更
? ? ? ? ? ? $format = str_replace('[標題]', $keys['key1'], $format);
? ? ? ? ? ? $format = str_replace('[訂單編號]', $keys['key2'], $format);
? ? ? ? ? ? $format = str_replace('[訂單狀態]', $keys['key3'], $format);
? ? ? ? ? ? $format = str_replace('[備注]', $keys['key4'], $format);
? ? ? ? }else if ($type==106){? ? //兌換券使用通知
? ? ? ? ? ? $format = str_replace('[優惠標題]', '優惠標題', $format);
? ? ? ? ? ? $format = str_replace('[名稱]', $keys['key1'], $format);
? ? ? ? ? ? $format = str_replace('[編號]', $keys['key2'], $format);
? ? ? ? ? ? $format = str_replace('[數量]', '1張', $format);
? ? ? ? ? ? $format = str_replace('[備注]', $keys['key3'], $format);
? ? ? ? }else{
? ? ? ? ? ? throw new Exception('模版消息設置出錯!', 0 );
? ? ? ? }
? ? ? ? $ins=[
? ? ? ? ? ? 'fdbWx'=>1,
? ? ? ? ? ? 'fdlFormatID'=>$type,
? ? ? ? ? ? 'fdcTplID'=>$data['fdcTplID'],
? ? ? ? ? ? 'fdiType'=>$data['fdiType'],
? ? ? ? ? ? 'fdcTitle'=>$data['fdcName'],
? ? ? ? ? ? 'fdlCardID'=>$cardid,
? ? ? ? ? ? 'fdtMsg'=>$format,
? ? ? ? ? ? 'fdcUrl'=>$url,
? ? ? ? ? ? 'created_at'=>date('Y-m-d H:i:s')
? ? ? ? ];
? ? ? ? $ret=M('mmsgdetail')->add($ins);
? ? ? ? return $ret;
? ? }else{
? ? ? ? throw new Exception('模版消息設置出錯!', 0 );
? ? }
}
4.?GetData2公共方法的寫法
function GetData2($url){
? ? $ch = curl_init($url);// 初始化一個 cURL 對象
? ? curl_setopt($ch, CURLOPT_RETURNTRANSFER,1) ;
? ? curl_setopt($ch, CURLOPT_TIMEOUT,1) ; //設置為1 異步執行
? ? curl_setopt ( $ch, CURLOPT_HEADER, 0);? ? //設置請求選項
? ? curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ;//在啟用 CURLOPT_RETURNTRANSFER 時候將獲取數據返回
? ? $output = curl_exec($ch);//執行Curl會話獲取相關回復
? ? curl_close($ch);//釋放Curl 句柄, 關閉Cur會話
? ? if (empty($output)) { return ;}
? ? $result = json_decode($output,true);
? ? return $result;
}
5.GetData2(Constants::serverHTTP."admin/SendWxTplMsg?id=".$ret);?????? ? //通過GetData2這個方法可調用后臺的admin控制器里SendWxTplMsg這個方法,?
//調用api發送消息
? ? public function SendWxTplMsgAction()
? ? {
? ? ? ? $get=I('get.');
? ? ? ? $id=$get['id'];
? ? ? ? $msg=new AdminModel();
? ? ? ? $interval=3;//秒鐘?
? ? ? ? $ret=true;
? ? ? ? while($ret){
? ? ? ? ? ? $ret=$msg->SendWxTplMsg($id);?
? ? ? ? ? ? $id=null;?????????????????????????????????????????????????? ? //為了把以前沒發的也發出去
? ? ? ? ? ? if ($ret==false) break;
? ? ? ? ? ? sleep($interval);
? ? ? ? };
? ? ? ? response($ret, Constants::ERROR_CODE, '列表數據');
? ? }
6. 在這個model里面調用微信插件發送模板消息
public function SendWxTplMsg($id = "")
? ? {
? ? ? ? try {
? ? ? ? ? ??
? ? ? ? ? ? $where = [
? ? ? ? ? ? ? ? 'fdbWx' => 1,
? ? ? ? ? ? ? ? 'fdiSend' => 0,
? ? ? ? ? ? ];
? ? ? ? ? ? if ($id) {
? ? ? ? ? ? ? ? $where['ID'] = $id;
? ? ? ? ? ? }
? ? ? ? ? ? sleep(8);? ? ? ?//等待8秒,不然數據沒建好
? ? ? ? ? ? $data = M('mmsgdetail')->where($where)->field(['ID', 'fdlCardID', 'fdtMsg', 'fdcTplID', 'fdcUrl'])->find();
? ? ? ? ? ? if ($data) {
? ? ? ? ? ? ? ? M('mmsgdetail')->where(['ID' => $data['ID']])->save(['fdiSend' => 1]);
? ? ? ?????$res = wechat()->tplMsg($data['fdlCardID'], json_decode($data['fdtMsg'], true), $data['fdcTplID'], $data['fdcUrl']);????????? ? //在這里調用微信插件發送模板消息
? ? ? ? ? ? ? ? if ($res['errmsg'] != 'ok') {
? ? ? ? ? ? ? ? ? ? M('mmsgdetail')->where(['ID' => $data['ID']])->save(['fdiSend' => 2, 'updated_at' => date('Y-m-d H:i:s')]);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? $this->MmsgtoBase($data['ID']);
? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? } catch (Exception $e) {
? ? ? ? ? ? return true;
? ? ? ? ? ? //發送有問題
? ? ? ? ? ? M('mmsgdetail')->where(['ID' => $data['ID']])->save(['fdiSend' => 3, 'updated_at' => date('Y-m-d H:i:s')]);
? ? ? ? }
? ? }
7. 必須在微信上找微信一個模板消息, 然后在后臺對應他才有效 , 先登錄公眾號 -> 功能 ->模板消息 ->從模板庫里面用搜索找 -> 找到合適后點添加 ->然后手動添加到下面這張表
建表:
????Schema::create('aformat', function (Blueprint $table) {
? ? ????$table->BigInteger('ID',true,false)->unique('aformat_PK');
? ? ????$table->bigInteger('fdiType')->comment('類型')->default(0);
? ? ????$table->bigInteger('fdbWx')->comment('0:平臺自身消息? 1:微信消息模板')->default(0);
? ? ????$table->string('fdcName',100)->comment('微信模板消息名稱(對應微信標題)')->nullable();
? ? ????$table->string('fdcVar',255)->comment('微信需要替換的內容')->nullable();
? ? ????$table->string('fdcFormat',255)->comment('替換模板')->nullable();
? ? ????$table->string('fdcTplID',255)->comment('微信消息模板ID')->nullable();
? ? ????$table->string('fdcWxNo',20)->comment('微信消息模板編號')->nullable();
? ? ????$table->string('fdcWxMsg',200)->comment('微信消息模板詳細內容')->nullable();
? ? ????$table->timestamps();
????});
????Schema::create('mMsgDetail', function (Blueprint $table) {
? ? ? ? ? ? $table->BigInteger('ID',true,false)->unique('mMsgDetail_PK');
? ? ? ? ? ? $table->boolean('fdbWx')->comment('是否為微信消息')->default(false);?
? ? ? ? ? ? $table->string('fdcTplID',255)->comment('模版ID')->nullable();?
? ? ? ? ? ? $table->integer('fdiType')->comment('消息類型')->default(0);
? ? ? ? ? ? $table->string('fdlCardID',255)->comment('用戶,0、系統消息')->index('mMsgDetail_idx')->nullable();?
? ? ? ? ? ? $table->string('fdcTitle',255)->comment('消息標題')->nullable();?
? ? ? ? ? ? $table->mediumText('fdtMsg')->comment('系統消息')->nullable();?
? ? ? ? ? ? $table->integer('fdiSend')->comment('消息類型0:未處理 1:發送成功 2:發送失敗')->default(0);
? ? ? ? ? ? $table->boolean('fdbRead')->comment('是否已讀')->default(false);?
? ? ? ? ? ? $table->bigInteger('fdlFormatID')->comment('推廣設置ID')->default(0);??
? ? ? ? ? ? $table->bigInteger('fdlSrcID')->comment('srcid')->default(0);?
? ? ? ? ? ? $table->string('fdcUrl',255)->comment('連接url')->nullable();?
? ? ? ? ? ? $table->timestamps();
? ? ? ? });
總結
以上是生活随笔為你收集整理的发模板消息( 自己项目 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: v20荣耀什么时候能升级到鸿蒙,荣耀手机
- 下一篇: 免费 绿色 图片编辑工具 PhotoFi