小程序订阅消息接入流程:

(1)小程序申请或选择订阅消息模板.

(2)小程序端获得发送订阅消息权限.

(3)服务端获取将要发送用户的openID.

(4)服务端开发订阅消息模板所需要的的字段函数.

(5)事件触发,服务端发送订阅消息.

综上发现,发送订阅消息在小程序端仅需要获取一个授权即可,剩下的都在服务端进行工作.

贴上代码

小程序端:

.wxml页面

<button bindtap="getQx">获取订阅权限</button>


.js页面

getQx(){
 wx.requestSubscribeMessage({
      tmplIds: ['PMSyKABSggSLuBb7_sfBLC8e2LgCAPjNPOngPJ7Q5W8'],//填写自己的模板ID(在小程序公众平台订阅消息中申请/复制)
      success(res) { 
        console.log('成功');
      }
    })
  }

在此之前需要获取openID具体步骤需要查看之前的教程

http://bk.qsyq.online/?t/1.html

服务器端:

获取access_token存入缓存、数据库或文件中(此地放入了本地txt文件中)

//getAccess.php文件

<?php

function getAccessToken($appid,$secret){

    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}";

    $res = curl_get($url);

    $res = json_decode($res,1);

    $res['time']=time();

    $text=json_encode($res);

    $myfile = fopen("acc.txt", "w") or die("Unable to open file!");

    fwrite($myfile, $text);

    fclose($myfile);

    return $res['access_token'];

}

//sendMg.php文件

<?php

include_once 'requestion.php';

include_once 'config.php';

include_once 'getAccess.php';

$filename = "acc.txt";

    $handle = fopen($filename,'r');

    $contents = fread($handle,filesize($filename));

    fclose($handle);

    $arr=json_decode($contents);

    if(time()-$arr->time<$arr->expires_in){

        echo(sendSubscribeMessage($arr->access_token));

        die();

    }else{

        $access_token = getAccessToken($appid, $appSecret);

    }   //所需字段请在微信小程序订阅消息中查看

function sendSubscribeMessage($access_token)

{

    //请求url

    $url = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=' . $access_token ;

    //发送内容

    $data = [] ;

    //接收者(用户)的 openid

    $data['touser'] = '换成需要发送的openID' ;

    //所需下发的订阅模板id

    $data['template_id'] = '换成需要发送的模板id' ;

    //点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。

    $data['page'] = 'index/index' ;

    //模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }

    $data['data'] = [

        "thing1"=>[

            'value' => '小门神优选'

        ],

        "thing2"=>[

            'value' => '签到送好礼'

        ],

        "date3"=>[

            'value' => '15:04:00'

        ],

        'thing4'=>[

            'value'=>'恭喜您签到成功,获得10枚门神币'

        ]

    ];

    //跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版

    $data['miniprogram_state'] = 'developer' ;//正式上线请选择formal

    return curlPost($url,json_encode($data)) ;

}

//requestion.php页面(封装了get和post请求)

<?php

//发送get请求

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;

}

//发送post请求

function curlPost($url,$data)

{

    $ch = curl_init();

    $params[CURLOPT_URL] = $url;    //请求url地址

    $params[CURLOPT_HEADER] = FALSE; //是否返回响应头信息

    $params[CURLOPT_SSL_VERIFYPEER] = false;

    $params[CURLOPT_SSL_VERIFYHOST] = false;

    $params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回

    $params[CURLOPT_POST] = true;

    $params[CURLOPT_POSTFIELDS] = $data;

    curl_setopt_array($ch, $params); //传入curl参数

    $content = curl_exec($ch); //执行

    curl_close($ch); //关闭连接

    return $content;

}

//config.php页面(配置文件)

<?php

 $appid = 'APPID';//小程序的appid

 $appSecret = 'SECRET';// 小程序的$appSecret

运行sendMg.php文件你的手机就会收到小程序的服务消息!

发表评论

邮箱地址不会被公开。 必填项已用*标注