收藏
回答

获取签名成功了,但授权按钮不显示?

import {getJsConfig, sendOneTimeMsgApi} from "@/views/pageApi";
import wx from "weixin-js-sdk";

export default {
  name: "WxSubscribe",
  data() {
    return {
      wxReady:false,
      // 一次性订阅模板id
      templateId: "CpT9B7YACSEjhghjghgS-zqMXHqunGwXXz38e8",
      open_id: "oDPkZ5pSI-8fhghjkdfRvE41ywas" 
    };
  },
  async mounted() {
    alert("111111");
    // 2. 【关键】必须做 wx.config 配置
    const pageUrl = window.location.href.split('#')[0];
    console.log("99999999",pageUrl)// 必须去掉#
    const that = this;
    try {
      getJsConfig(pageUrl).then(res=>{
        wx.config({
          debug: true, // 上线务必关闭
          appId: res.appId,
          timestamp: res.timestamp,
          nonceStr: res.nonceStr,
          signature: res.signature,
          jsApiList: ["showModal", "openSubscribeMessage"],
          // 【必杀行】必须声明开放标签,否则永远不生效
          openTagList: ["wx-open-subscribe"]
        });

        wx.ready(() => {
          console.log("微信配置成功,标签已激活");
          alert("微信配置成功,标签已激活");
          // 可以在这里设置一个 wxReady 变量,配合v-if渲染
          that.wxReady = true;
        });

        wx.error((err) => {
          console.error("微信配置失败:", err);
          alert("微信配置失败");
        });
      })


    } catch (err) {
      console.error("获取微信签名失败:", err);
    }
  },
  methods: {
    // 【官方标准】订阅回调,直接取事件参数
    handleSubscribeSuccess(e) {
      const detail = e.detail;
      // 一次性订阅唯一核心凭证
      const ticket = detail.subscribeTicket;
      const tempId = detail.templateId;
      const scene = detail.scene;
alert("一次性订阅:"+JSON.stringify(detail));
      console.log("一次性订阅成功", ticket, tempId, scene);
      if (!ticket) {
        wx.showModal({ title: "异常", content: "未获取到订阅凭证" });
        return;
      }

      // 传给后端调用一次性推送接口
      sendOneTimeMsgApi({
        openId: this.open_id,
        templateId: this.templateId,
        subscribeTicket: ticket
      }).then(res => {
        wx.showModal({ title: "成功", content: "通知已下发,请注意查收服务号消息" });
      }).catch(err => {
        wx.showModal({ title: "推送失败", content: "消息下发失败,请稍后重试" });
        console.error("一次性消息推送接口报错", err);
      });
    },
    // 订阅弹窗失败/取消
    handleSubscribeError(e) {
      const errCode = e.detail?.errCode;
      alert("订阅失败:"+e.detail);
      // 10001 用户手动关闭弹窗
      if (errCode === 10001) {
        wx.showToast({ title: "已取消订阅", icon: "none" });
      } else {
        wx.showModal({ title: "订阅失败", content: `错误码:${errCode}` });
      }
    }
  }
};


最后一次编辑于  06-16
回答关注问题邀请回答
收藏

2 个回答

  • 社区技术运营专员--许涛
    社区技术运营专员--许涛
    06-16

    你好,提供下完整的请求包

    06-16
    有用
    回复 2
    • 大宁
      大宁
      06-16
      你好 我耽误些了一个wx-open-subscribe+H5页面,点击按钮“始终允许+允许”提交了。然后我用Java代码写了工具类,测试给该一次性订阅模板发消息,为什么可以多次发送并且都成功?
      06-16
      回复
    • 社区技术运营专员--许涛
      社区技术运营专员--许涛
      06-16回复大宁
      提供下完整的请求包
      06-16
      回复
  • 大宁
    大宁
    06-16

    06-16
    有用
    回复
登录 后发表内容