ThinkPHP5.1+微信小程序订阅通知

要使用微信订阅通知功能,需要用户首先在小程序点击订阅后,后台方可推送相关订阅通知模板,否则无法直接推送。

1、微信小程序开发:

(1)将微信开发者工具的基础调试库选择一下,低版本的库会报函数错误,无法使用。

ThinkPHP5.1+微信小程序订阅通知_第1张图片

(2)小程序编辑调用方法。

wx.requestSubscribeMessage({
        tmplIds: ['xxxx'],  //此处填写相应的小程序通知模板的id,字符串
        success(res) {
          console.log(res);
        }
      })

使用该方法后,运行小程序会弹出提示:

ThinkPHP5.1+微信小程序订阅通知_第2张图片

点击允许后,打印的res包含成功订阅的返回信息

errMsg: "requestSubscribeMessage:ok"
模板id: "accept"

使用手机微信调试:

ThinkPHP5.1+微信小程序订阅通知_第3张图片

(2)到这一步后表示已经订阅该小程序的模板通知。

2、后端开发(ThinkPHP5.1)

请求地址:

POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN

(1)因为需要请求微信接口,所以封装好一个curl会话功能。代码如下:

common.php:

(2)因为要获取openId和access-token信息,在config目录下配置文件配置微信小程序对应信息

wx.php:

 'xxx',
    // 小程序app_secret
    'app_secret' => 'xxx',

    //模板id
    'template_id' => 'xxx',

    // 微信使用code换取用户openid及session_key的url地址
    'login_url' =>"https://api.weixin.qq.com/sns/jscode2session?        
    appid=%s&secret=%s&js_code=%s&grant_type=authorization_code",

    // 微信获取access_token的url地址
    'access_token_url' => "https://api.weixin.qq.com/cgi-bin/token?" .
        "grant_type=client_credential&appid=%s&secret=%s",

    //微信评论内容检测url地址
    'msgSecCheck_url' => "https://api.weixin.qq.com/wxa/msg_sec_check?access_token=%s",

    //微信评论图片检测url地址
    'imgSecCheck_url' => "https://api.weixin.qq.com/wxa/img_sec_check?access_token=%s",

    //发送模板消息url地址
    'sendTemplateMessage_url' => "https://api.weixin.qq.com/cgi- 
    bin/message/subscribe/send?access_token=%s",
];

(3)要请求微信接口,需要access_token,获取代码如下:

/**
  * AccessToken 保留时间2小时  7200
  * @return mixed
  */
public function getAccessToken(){
    $wxAppID =  config('wx.app_id');
    $wxAppSecret = config('wx.app_secret');
    $wxAccessTokenUrl = sprintf(
        config('wx.access_token_url'), $wxAppID, $wxAppSecret);
        $result = curl_get($wxAccessTokenUrl);
        //$wxAccessToken = json_decode($result,true);
        return $result;
}

获取openId差不多一样方法,就不写了,之前已经将用户openId保存到数据库中。现在只需要将用户id就可查询出openId。

(4)请求微信接口,代码如下:

public function sendMessage($openId,$templateId)
    {
        //获取access_token
        $accessToken = new AccessToken();
        $access_token = $accessToken ->getAccessToken();
        //要发送给微信接口的数据
        $send_data = [
            //用户openId
            "touser" => $openId,
            //模板id
            "template_id" => $templateId,
            //指定发送到开发版
            "miniprogram_state"=>"developer",
            //点击跳转到小程序的页面
            "page"=>'home',
            "data"=>[
                "name1" => [
                    "value"=> "三旺"
                ],
                "time2" => [
                    "value"=> date('Y-m-d H:i:s',time())
                ],
                "thing3" => [
                    "value"=> "签到活动"
                ],
                "thing4" => [
                    "value"=> "签到活动"
                ]
            ],
        ];
        //将路径中占位符%s替换为$access_token值
        $urls = sprintf(config('sendTemplateMessage_url'), $access_token);
        $ret = curl_post($urls, $send_data);
        return $ret;
    }

(5)通过postman访问接口,发送成功

你可能感兴趣的:(ThinkPHP,php,thinkphp)