吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3951|回复: 13
收起左侧

[其他转载] 微信小程序发送订阅消息(之前是模板消息)

[复制链接]
yuupuu 发表于 2020-9-18 10:05
之前的模板消息已经废弃,现在改为订阅消息,订阅消息发布前,需要用户确认后才能接收订阅消息。

4066131102-5f43a248c8e90_articlex.jpg

小程序端
index.wxml
[Asm] 纯文本查看 复制代码
<button bindtap="send">发送订阅消息</button>


index.js
[Asm] 纯文本查看 复制代码
const app = getApp()
Page({
  data: {
  },

send:function(){
    wx.requestSubscribeMessage({  
      tmplIds: ['WZiCliW1zVtHXqX7dGnFNmFvxhW-wd9S_W4WfrwNvss'],  
      success:(res)=> {
        // 在登录的时候,获取到的openid进行缓存,现在直接把openid提取出来即可
        wx.getStorage({
          key: 'openid',
          success (res) {
            console.log(res.data)
            wx.request({
              url: 'https://www.xxx.com/send.php?openid='+res.data,
              data: {},
              header: {
                'content-type': 'application/json'
              },
              success (res) {
                // 推送
                if(res.data.errcode == '43101'){
                  console.log("拒绝订阅消息")
                }else if(res.data.errcode == '0'){
                  console.log("发送订阅消息")
                }else{
                  console.log("未知错误")
                }
              }
            })
          },
          fail (res) {
            console.log("没有openid,无法发送")
          }
        })
      }
    })
  }
}) 


后端
[Asm] 纯文本查看 复制代码
<?php
//设置 header 
header("Content-type:application/json");

//接收参数
$openid = $_GET["openid"];

//初始化 CURL
$ch = curl_init();

// 获取access_token
// include '';
require_once("access_token.php");

//目标服务器地址 
curl_setopt($ch, CURLOPT_URL, 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token='.$access_token);

//设置要POST的数据
curl_setopt($ch, CURLOPT_POST, true);
$data = '{
  "touser": "'.$openid.'",
  "template_id": "模板ID",
  "page": "pages/index/index",// 要跳转的页面
  "lang":"zh_CN",
  "data": {
      "thing4": {
          "value": "欢迎使用专插本最前线小程序"
      },
      "thing5": {
          "value": "小程序由公众号:广东专插本最前线开发"
      }
  }
}';
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");

// 对认证证书来源的检查
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// 从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);

//获取的信息以文件流的形式返回,而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//发起请求
$result = curl_exec($ch);
echo $result;

//关闭请求
curl_close($ch);
?>


access_token.php
[Asm] 纯文本查看 复制代码
<?php
// 声明页面header
header("Content-type:charset=utf-8");

// APPID、APPSECRET
$appid = "你的小程序APPID";
$appsecret = "你的小程序APPSECRET";

// 获取access_token和jsapi_ticket
function getToken(){
    $file = file_get_contents("access_token.json",true);//读取access_token.json里面的数据
    $result = json_decode($file,true);

//判断access_token是否在有效期内,如果在有效期则获取缓存的access_token
//如果过期了则请求接口生成新的access_token并且缓存access_token.json
if (time() > $result['expires']){
        $data = array();
        $data['access_token'] = getNewToken();
        $data['expires'] = time()+7000;
        $jsonStr =  json_encode($data);
        $fp = fopen("access_token.json", "w");
        fwrite($fp, $jsonStr);
        fclose($fp);
        return $data['access_token'];
    }else{
        return $result['access_token'];
    }
}
 
//获取新的access_token
function getNewToken($appid,$appsecret){
    global $appid;
    global $appsecret;
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret."";
    $access_token_Arr =  file_get_contents($url);
    $token_jsonarr = json_decode($access_token_Arr, true);
    return $token_jsonarr["access_token"];
}

$access_token = getToken();
?>


逻辑

1、通过button控件出发send函数
2、send函数调用wx.requestSubscribeMessageAPI,微信允许接收订阅消息
3、 wx.request向send.php后端请求
4、后端获取access_token后,调用订阅消息接口POST一段json数据即可发送订阅消息


官方文档
1、https://developers.weixin.qq.com/miniprogram/dev/api/open-api/subscribe-message/wx.requestSubscribeMessage.html

2、https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.addTemplate.html

免费评分

参与人数 2吾爱币 +6 热心值 +2 收起 理由
EEOCOC + 1 + 1 我很赞同!
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| yuupuu 发表于 2020-9-19 10:55
heroic 发表于 2020-9-18 17:12
我的意思是,如果用户只点了一次,你只能通知一次,后面再发就不行了,就是用户点了多少次 就只能发多少 ...

除非用户打了长期订阅的勾,否则只能点一次,允许一次才会发送。
heroic 发表于 2020-9-18 17:12
yuupuu 发表于 2020-9-18 15:27
可以在小程序做个缓存,记录已经发过一次

我的意思是,如果用户只点了一次,你只能通知一次,后面再发就不行了,就是用户点了多少次 就只能发多少次
heroic 发表于 2020-9-18 10:23
sensMe 发表于 2020-9-18 10:35
学到了,,感谢分享
hui5 发表于 2020-9-18 10:37
感谢分享了
liujieboss 发表于 2020-9-18 10:42
感谢分享
头像被屏蔽
幻想 发表于 2020-9-18 10:45
提示: 作者被禁止或删除 内容自动屏蔽
xudewu 发表于 2020-9-18 10:58
感谢分享,马克一下
xm3834 发表于 2020-9-18 11:27
感谢你的分享支持一下
 楼主| yuupuu 发表于 2020-9-18 15:27
heroic 发表于 2020-9-18 10:23
而且还是用户点几次 后端就能发几次

可以在小程序做个缓存,记录已经发过一次
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-13 10:10

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表