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

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

1、微信小程序开发:

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

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

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

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

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

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

使用手机微信调试:

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

2、后端开发(ThinkPHP5.1)

请求地址:

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

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

common.php:

<?php

/**
 * @param string $url post请求地址
 * @param array $params
 * @return mixed
 */
function curl_post($url, array $params = array())
{
    $data_string = json_encode($params);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    curl_setopt(
        $ch, CURLOPT_HTTPHEADER,
        array(
            'Content-Type: application/json'
        )
    );
    $data = curl_exec($ch);
    curl_close($ch);
    return ($data);
}

/**
 * @param string $url get请求地址
 * @param int $httpCode 返回状态码
 * @return mixed
 */
function curl_get($url, &$httpCode = 0)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    //不做证书校验,部署在linux环境下请改为true
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    $file_contents = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    return $file_contents;
}

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

wx.php:

<?php

return [
    //  +---------------------------------
    //  微信相关配置
    //  +---------------------------------

    // 小程序app_id
    'app_id' => '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访问接口,发送成功

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
益苗易约小程序是一个基于ThinkPHP5框架和微信小程序开发的计算机毕设项目。该项目的目的是为了提供一个方便农民购买农资和农产品的平台,同时也为农民提供了一个交流和约牧的社交平台。 益苗易约小程序使用了ThinkPHP5框架进行后端开发,该框架是一种快速、可靠、扩展性强的PHP开发框架。通过使用ThinkPHP5,我们能够快速搭建起后端服务器,处理用户的请求和响应,同时也能方便地与数据库进行交互,保证系统的稳定性和可靠性。 而微信小程序则是我们选择的前端开发平台,它可以在微信内直接调用,并提供了一系列丰富的API接口。通过微信小程序,用户可以方便地浏览和购买农资和农产品,同时也能够与其他农民进行交流和约牧。 益苗易约小程序的主要功能包括: 1. 农民可以在小程序中查看并购买各类农资和农产品,并进行在线支付。 2. 农民可以通过小程序发布约牧信息,与其他农民进行交流和约牧。 3. 小程序提供了一个农民社区,农民可以在社区中分享经验和交流心得。 4. 小程序还提供了一些辅助功能,比如天气查询、农产品价格查询等。 通过开发益苗易约小程序,我们能够提供一个方便快捷的购买农资和农产品的平台,同时也能为农民提供一个交流和约牧的社交平台,方便农民们进行信息交流和资源分享。这个项目结合了ThinkPHP5框架和微信小程序的优势,能够高效地实现这些功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值