当前位置: 首页 > 后端技术 > PHP

服务号消息提醒

时间:2023-03-29 22:36:36 PHP

浏览某云课堂时,发现有直播提醒功能。点击打开提醒后,发现经历了以下流程:点击打开提醒,跳出公众号二维码,微信扫描二维码,进入小程序客服(app流程)点击发送右小角小程序卡片(app进程)服务器返回公众号二维码图片(app进程)点击图片识别二维码,关注公众号云课堂。这有点复杂。虽然很不容易,但折腾了一番,总算是把整个直播提醒功能给打通了。现在分享给有需要的朋友。以下是app的直播提醒功能:生成带参数的二维码据我所知,目前关注公众号的方式有两种:扫描或识别后台生成的二维码或识别带参数的二维码两种代码都是关注事件,但第二种会在用户关注公众号后向开发者推送具??有场景价值的扫描事件。我们通过这个场景值向应用服务器传递额外的参数,开发者可以通过这些参数来判断用户是否开启了提醒。因此,我们使用生成的带参数的二维码来完成扫码注意力。生成带参数的二维码地址让我们创建一个临时二维码:getaccesstoken$client=new\GuzzleHttp\Client(['verify'=>false]);$header['content-type']='应用程序/json;字符集=UTF-8';$param=['appid'=>'appId',//公众号的appid'secret'=>'appSecret',//公众号秘密'grant_type'=>'client_credential'];$url='https://api.weixin.qq.com/cgi-bin/token?'.http_build_query($param);$result=file_get_contents($url);$result=\GuzzleHttp\json_decode($result,true);if(isset($result['errcode'])&&$result['errcode']<>0){thrownewWeChatException('获取access_token失败',500);}$accessToken=$result['access_token'];2.根据access_token获取ticket//app传过来的数据$data=['live_id'=>10,//LiveID'user_id'=>5//用户ID,0为未登录];//post数据格式$tmp=['expire_seconds'=>5*60,'action_name'=>'QR_STR_SCENE','action_info'=>['scene'=>['scene_str'=>http_build_query($data)]]];$url='https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token='.$accessToken;$json=\GuzzleHttp\json_encode($data,256);$ticket=$this->post($url,$json,['headers'=>$headers])['ticket';3.根据门票生成二维码图片,获取门票后,访问页面上的链接打开二维码图片。云课堂PC端使用这个方法$qCodeUrl='https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=urlencode('.$ticket.')';在app中,点击打开提醒时,我们需要将公众号关联到小程序,因为我们要跳转到小程序客服。关联步骤:登录公众号->小程序->管理小程序->添加关联后,即可在应用内激活小程序。这一步需要app开发者和前端开发者共同开发app和跳转到小程序,还要传直播id和用户id。小程序推送客服消息客服消息地址类似于公众号推送消息,小程序也可以推送消息。当用户要向微信服务器发送小程序卡片时,判断当msgtype的值为miniprogrampage时,发送回复消息1.获取Accesstoten小程序获取accesstoken和公众号获取accesstoken基本一样,不同的是appid和secret要分别换成小程序的appid和secret$client=new\GuzzleHttp\Client(['verify'=>false]);$header['内容类型']='应用程序/json;charset=UTF-8';$param=['appid'=>'appId',//小程序的appid'secret'=>'appSecret',//小程序的秘密'grant_type'=>'client_credential'];$url='https://api.weixin.qq.com/cgi-bin/token?'.http_build_query($param);$result=file_get_contents($url);$result=\GuzzleHttp\json_decode($result,true);if(isset($result['errcode'])&&$result['errcode']<>0){thrownewWeChatException('获取access_token失败',500);}$accessToken=$result['access_token'];发送图文消息我们在第二步生成了公众号二维码可以直接使用$url="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="。$accessToken;$tmp=['touser'=>'OPENID',//用户发卡时会有一个FromUserName字段,即openid'msgtype'=>"link",'link'=>['title'=>'直播提醒',"description"=>"点击识别二维码",'url'=>$qrCodeUrl,//带参数的二维码地址'thumb_url'=>'小程序跳转地址']];$client=new\GuzzleHttp\Client(['验证'=>false]);$header['content-type']='application/json;字符集=UTF-8';$response=$client->request('POST',$url,['headers'=>$header,'body'=>\GuzzleHttp\json_encode($data,256),]);返回\GuzzleHttp\json_decode((string)$response->getBody(),true);二维图文信息识别因为在推送二维码图片的时候需要Media_id,比较麻烦,所以在小程序中,我将公众号二维码地址做成图文信息发送给用户。用户点击图文消息后,两个二维码,用户识别二维码后,即可关注公众号保存提醒信息关注公众号,做一个提示信息,告诉用户提醒已经开启成功。只需生成一个带有参数的二维码就可以帮助我们。带参数扫描二维码事件有两种情况:当用户不注意时,事件消息如下:123456789用户关注时的事件消息:123456789在第一种情况下,我们可以根据EventKey判断是否是扫描参数的二维码;第二种情况,我们可以根据Event判断是否是扫描参数的二维码;所以,当出现以上两种情况时,我们就可以判断用户开启了直播提醒。记录用户的openid,以便向用户推送提醒信息。应用模板消息略高于应用中开启直播提醒的过程。注意事项:必须是服务号公众号必须关联小程序app,调用小程序时必须传参