前言

个人申请的小程序是否可以推送?

答案是肯定的,下面记录的就是我的踏坑之旅,后台采用PHP实现。

要想完成推送大概可分为六步:

  1. 配置模板
  2. 生成小程序 AppSecret
  3. 获取 ACCESS_TOKEN
  4. 获取将要推送用户的 openID
  5. 提交 formId
  6. 推送模板信息

PHP 发送网络请求公共方法

在开始之前,这里提供一个PHP发起网络请求的Http方法,后续代码都会用到:

function Http($url,$data,$type="http"){
    $curl = curl_init();

    if ($type == "json"){
        $headers = array("Content-type: application/json;charset=UTF-8");
        $data=json_encode($data);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    }

    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

    if (!empty($data)){
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS,$data);
    }

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);

    return $output;
}

1、配置模板

在微信公众平台进入模板消息模块,点击添加会到模板库里面挑选你想推送的模板。配置好点击提交即可。

2、生成小程序 AppSecret

在小程序管理后台的开发设置中,点击【生成】或者【重置】,便会让你扫码验证。

注意:这里的AppSecret你需要记录下来,因为它不会再次出现在你的管理界面。如果要找回就只有重置,一旦重置之前的就会失效。

3、获取 ACCESS_TOKEN

access_token是小程序后台API调用的凭据,有效期为2个小时,需要定时获取。

接口文档获取接口调用凭证

PHP代码示例:

$data = [
    "grant_type" => "client_credential",
    "appid" => $appId,
    "secret" => $appSecret
];

$r = http_request("https://api.weixin.qq.com/cgi-bin/token", $data);
//返回的是字符串,需要用json_decode转换成数组
$data = json_decode($r, true);

4、获取将要推送用户的 openID

这一步需要小程序端的配合,调用wx.login获取js_code并发送给后台,后台用js_code换取用户的openID。

小程序端代码:

var that = this;
//获取js_code
wx.login({
    success: res => {
        var code = res.code;
        //把js_code发送给后台
        that.loginRequest(code);
    },
    fail: e=> {
    }
})

//网络请求发送js_code
loginRequest: function(code){
    wx.request({
        url: "/api/login",
        data: {
            "code": code
        },
        method: 'POST',
        header: {
            'content-type': 'application/x-www-form-urlencoded'
        },
        success: function (res) {
            console.log(res.data)
        }
    })
}

接口地址:

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

PHP后台换取openID代码:

$r = http_request("https://api.weixin.qq.com/sns/jscode2session", [
    "grant_type" => "authorization_code",
    "appid" => $appId,
    "secret" => $appSecret,
    "js_code" => $code
]);
$rdata = json_decode($r, true);

5、提交 formId

获取 openID 以及开发者的 ACCESS_TOKEN 就类似做好微信的授权操作了。

由于微信不允许开发者主动推送杂七杂八的消息,必须要用户自愿接受推送。通过用户提交form表单后就代表用户自愿接受推送。

小程序端表单代码:

<form bindsubmit="formSubmit" report-submit="true">
    <button form-type="submit">提交</button>
</form>

小程序端JS代码:

formSubmit: function (e) {
    var that = this

    wx.request({
        url: "/api/formid",
        data: {
            "form_id": e.detail.formId
        },
        method: 'POST',
        header: {
            'content-type': 'application/x-www-form-urlencoded' 
        },
        success: function (res) {
            console.log(res.data)
        },
        fail: function(e){
        }
    })
}

PHP后台拿到formID时就可以准备推送了。

6、推送模板信息

接口文档发送模版消息

PHP代码示例:

$data = [
    "touser" => "用户openid",
    "template_id" => "模板id",
    "form_id" => "formid",
    "data" => [
        "keyword1" => [
            "value" => "收到没",
            "color" => "#cccccc"
        ]
    ]
];

$ast = "xxx"; //ACCESS_TOKEN
$rdata = http_request(
    "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=" . $ast, 
    $data, 
    "json"
);
$rdata = json_decode($rdata, true);

注意:推送的地址一定要带上 access_token 参数,否则将会出现 access_token error 错误。

总结

到这里,使用PHP实现小程序通知推送的全过程就完成了。主要流程包括:获取access_token、获取用户openID、收集用户formId、最后调用模板消息接口发送通知。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部