国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微信小程序消息模板設(shè)計(jì)及實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了微信小程序消息模板設(shè)計(jì)及實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

本文以微信小程序內(nèi)置的兩個(gè)模板:購(gòu)買(mǎi)成功和評(píng)論回復(fù)提醒為例來(lái)闡述第三方微信小程序平臺(tái)的設(shè)計(jì)。

小程序端

? ? 微信用戶支付成功后,微信服務(wù)通知中會(huì)收到支付成功服務(wù)提醒。見(jiàn)下圖:

微信小程序消息模板設(shè)計(jì)及實(shí)現(xiàn)

商家端

用戶完成評(píng)價(jià)后,商家管理端可以查看評(píng)論。見(jiàn)下圖:

微信小程序消息模板設(shè)計(jì)及實(shí)現(xiàn)

商家進(jìn)行回復(fù):

微信小程序消息模板設(shè)計(jì)及實(shí)現(xiàn)

商家回復(fù)微信小程序用戶的評(píng)論后,微信用戶在微信的服務(wù)通知會(huì)收到評(píng)價(jià)回復(fù)提醒,用戶點(diǎn)開(kāi)后可以查看回復(fù)的詳情。

微信小程序消息模板設(shè)計(jì)及實(shí)現(xiàn)

這些效果如何實(shí)現(xiàn)的呢??

?1 首先介紹表設(shè)計(jì)

?1.1 服務(wù)評(píng)價(jià)及留言表設(shè)計(jì)

? 這張表關(guān)鍵字段是訂單ID(order_id)、服務(wù)評(píng)價(jià)留言(msg)、商家管理員后臺(tái)回復(fù)信息(reply_msg)及商家管理員的帳號(hào)ID(admin_id) 。 一個(gè)訂單服務(wù)只可被評(píng)價(jià)一次和回復(fù)一次。

CREATE TABLE `t_order_comment` (

? `id` bigint NOT NULL,

? `stars` smallint DEFAULT '0',

? `order_id` bigint NOT NULL,

? `msg` varchar(200) DEFAULT NULL,

? `openid` varchar(64) NOT NULL,

? `submit_time` datetime DEFAULT NULL,

? `reply_time` datetime DEFAULT NULL,

? `reply_msg` varchar(200) DEFAULT NULL,

? `admin_id` bigint DEFAULT NULL,

? PRIMARY KEY (`id`),

? UNIQUE KEY `uniq_order_id` (`order_id`),

? KEY `index_openid` (`openid`),

? KEY `index_adminid` (`admin_id`)

) ;

1.2 小程序消息模板設(shè)置表

?描述商家小程序與小程序模板的關(guān)聯(lián)關(guān)系。一個(gè)小程序可以設(shè)置多個(gè)消息模板。

component_appid: 微信第三方平臺(tái)應(yīng)用appid;

authorizer_appid: 商家小程序appid;

business_type: 業(yè)務(wù)枚舉字典,如:購(gòu)買(mǎi)成功(buy_success)和評(píng)價(jià)回復(fù)(order_comment_reply);

msg_template_id: 微信小程序的模板ID?

CREATE TABLE `t_mini_msg_set` (

? `id` bigint NOT NULL,

? `component_appid` varchar(64) NOT NULL,

? `authorizer_appid` varchar(64) NOT NULL,

? `business_type` varchar(32) NOT NULL,

? `business_type_des` varchar(64) DEFAULT NULL,

? `msg_template_id` varchar(64) NOT NULL,

? PRIMARY KEY (`id`),

? UNIQUE KEY `component_appid_msg_template_id` (`component_appid`,`authorizer_appid`,`msg_template_id`)

) ;

2 前端設(shè)計(jì)

2.1 小程序端提交評(píng)價(jià)

?小程序端訂單服務(wù)評(píng)價(jià)設(shè)計(jì)。 源碼參考:

<van-action-sheet show="{{ commentShow }}" title="訂單服務(wù)評(píng)價(jià)" bind:close="onMsgClose">
  <view style="height: 160px">

  <van-cell-group>

   <van-rate value="{{ stars }}" bind:change="onStarsChange" />

    <van-field
      value="{{ msg }}"
      label="留言建議 "
      type="textarea"
      placeholder="請(qǐng)輸入留言"
      autosize="{maxHeight: 100, minHeight: 50}"
      input-class="textarea"
      border="{{ false }}" bind:change="msgChange"
    />

     <van-button type="info" size="small"  block bindtap="submitComment">提交評(píng)價(jià)</van-button>


  </van-cell-group>

效果如下:?

微信小程序消息模板設(shè)計(jì)及實(shí)現(xiàn)

2.2 小程序端訂閱消息模板

其中,tmplIds 是從表 《1.2 小程序消息模板設(shè)置表》中動(dòng)態(tài)讀取的小程序模板ID集合,用戶在小程序上支付成功后,會(huì)提示微信用戶是否訂閱消息模板。

wx.requestSubscribeMessage({

         tmplIds: app.globalData.miniMsgTemplateIds,
         success (res) {
            console.log('--->接受訂閱返回 :'+JSON.stringify(res));
         }
})

2.3? 商家端設(shè)計(jì)

商家登錄商家端后,進(jìn)入訂單評(píng)價(jià)界面。前面已介紹。

3 平臺(tái)端

平臺(tái)端可以對(duì)多個(gè)商家小程序進(jìn)行統(tǒng)一管理。包括對(duì)各個(gè)商家小程序的消息模板進(jìn)行管理設(shè)置。

平臺(tái)管理員登錄后,在授權(quán)小程序管理欄目打開(kāi)授權(quán)小程序的管理頁(yè)面。點(diǎn)操作欄的“小程序分類(lèi)及消息模板設(shè)置”圖標(biāo)

微信小程序消息模板設(shè)計(jì)及實(shí)現(xiàn)

從上圖可以看出,商家小程序已選擇了 “評(píng)論回復(fù)提醒”和“支付成功通知”兩個(gè)模板消息。

可以查看具體的小程序分類(lèi)中所有可以選擇的消息模板。如下圖:

??

微信小程序消息模板設(shè)計(jì)及實(shí)現(xiàn)

點(diǎn)擊“查看分類(lèi)下的消息模板”后進(jìn)入可以選擇的消息模板列表,如下圖:

微信小程序消息模板設(shè)計(jì)及實(shí)現(xiàn)

小程序的模板要求比較嚴(yán)格,不是所有的消息模板可以使用,根據(jù)小程序的商家營(yíng)業(yè)范圍來(lái)界定。故要在小程序的分類(lèi)下去選擇消息模板。在上圖的操作欄中,點(diǎn)“修改”圖標(biāo),可以進(jìn)入任意一個(gè)消息模板選擇消息模板中使用的關(guān)鍵詞,如下圖:

微信小程序消息模板設(shè)計(jì)及實(shí)現(xiàn)

選擇好模板的關(guān)鍵詞后點(diǎn)“確定”按鈕進(jìn)行保存, 這樣就保存了商家小程序與消息模板的關(guān)聯(lián)關(guān)系。,這樣消息模板就在平臺(tái)端配置好了。

商家的小程序在用戶觸發(fā)相關(guān)的動(dòng)作后就用平臺(tái)自動(dòng)就會(huì)向用戶發(fā)送小程序模板消息。

參考代碼如下:

?平臺(tái)向微信用戶發(fā)送模板消息(服務(wù)通知消息)是異步的, 下面僅給出關(guān)鍵邏輯。

public void  handleSQSOrderCommentReply( JSONObject body) throws Exception {

    Long id = body.getLong("id");
    Optional<OrderComment> ocOp =  orderCommentRepository.findById(id);
    if (ocOp == null || !ocOp.isPresent()) {
        log.error("評(píng)論記錄不存在{}", id);
        return ;
    }
    OrderComment  oc = ocOp.get();

    Optional<Order> orderOp = orderRepository.findById(oc.getOrder_id());

    if ( orderOp == null || !orderOp.isPresent()) {
        log.error("評(píng)論記錄不存在{}", id);
        return ;
    }

    Order order = orderOp.get();

    OrderCommentReply reply = new  OrderCommentReply();
    reply.setReply_msg(oc.getReply_msg());
    reply.setReply_time(oc.getReply_time());
    reply.setMsg(oc.getMsg());

    JSONObject bizData = MiniMsgUtil.packageBizData(MiniMsgTypeEnum.comment_reply.getValue(), reply,  OrderCommentReply.class);

  /*
    {
 *     msg_type: XX ,
 *     component_appid: XX,
 *     authorizer_appid: XX,
 *     template_id: XX,
 *     touser: XX,
 *     data: JSON , //業(yè)務(wù)方的對(duì)象
 *     miniprogram_state: "formal",
 *     lang: "zh_CN",
       page: /pages/orderdetail/orderdetail?order_status={{order.order_status}}&id={{order.id}}"

  }  */

    JSONObject reqBody = new JSONObject();
    reqBody.put("msg_type", MiniMsgTypeEnum.comment_reply.getValue());
    reqBody.put("component_appid", platAppId);
    reqBody.put("authorizer_appid", order.getAppid());
    reqBody.put("touser", order.getMember_id());
    reqBody.put("miniprogram_state", "formal");
    reqBody.put("lang", "zh_CN");
    reqBody.put("page", "/pages/htabs/tabs?appid="+order.getAppid()+"&shopid="+order.getShopid());

    log.info("---> component_app_id {} mini_appid {} ",platAppId, order.getAppid());

    MiniMsgSet  set = miniMsgSetRepository.findMiniMsgSetByBusinessType(platAppId,order.getAppid(), MiniMsgTypeEnum.comment_reply.getValue());

    if (set == null) {
        log.error("未配置消息模板");
        return ;
    }
    reqBody.put("template_id", set.getMsg_template_id());

    wechatMiniTempMsgSendService.sendTemplateMsg(reqBody, bizData);



}


public void  handleSQSBuySuccess( JSONObject body) throws Exception {

    Long order_id = body.getLong("order_id");
    Optional<Order> orderOp = orderRepository.findById(order_id);

    if ( orderOp == null || !orderOp.isPresent()) {
        log.error("購(gòu)買(mǎi)記錄不存在{}", order_id);
        return ;
    }

    Order order = orderOp.get();

    BuySuccess buy = new BuySuccess();
    buy.setFinish_time(order.getFinish_time());
    buy.setOrder_no(WechatTool.getOrderNo(order.getOrder_no()));
    buy.setProduct_name(order.getGoods_brief());
    buy.setTotal_fee(String.valueOf(order.getTotal_fee()));

    JSONObject bizData = MiniMsgUtil.packageBizData(MiniMsgTypeEnum.buy_success.getValue(),buy,  BuySuccess.class);
    log.info("--->發(fā)送信息業(yè)務(wù)JSON {}", bizData);
    log.info("---> component_appid {} miniId {}",order.getPlatform_appid(),order.getAppid() );
    MiniMsgSet  set = miniMsgSetRepository.findMiniMsgSetByBusinessType(order.getAppid(), MiniMsgTypeEnum.buy_success.getValue());

    if (set == null) {
        log.error("未配置消息模板");
        return ;
    }


  /*
    {
 *     msg_type: XX ,
 *     component_appid: XX,
 *     authorizer_appid: XX,
 *     template_id: XX,
 *     touser: XX,
 *     data: JSON , //業(yè)務(wù)方的對(duì)象
 *     miniprogram_state: "formal",
 *     lang: "zh_CN"

  }  */

    JSONObject reqBody = new JSONObject();
    reqBody.put("msg_type", MiniMsgTypeEnum.buy_success.getValue());
    reqBody.put("component_appid", platAppId);
    reqBody.put("authorizer_appid", order.getAppid());
    reqBody.put("touser", order.getMember_id());
    reqBody.put("miniprogram_state", "formal");
    reqBody.put("lang", "zh_CN");
    reqBody.put("template_id", set.getMsg_template_id());
    reqBody.put("page", "/pages/htabs/tabs?appid="+order.getAppid()+"&shopid="+order.getShopid());

    wechatMiniTempMsgSendService.sendTemplateMsg(reqBody, bizData);





}

第三方平臺(tái)發(fā)送微信小程序消息的通用邏輯:

/**
 * 通用發(fā)送小程序模板消息
 *  @param body: 公共的部分協(xié)議
 *
 *  {
 *     msg_type: XX ,
 *     omponent_appid: XX,
 *     authorizer_appid: XX,
 *     template_id: XX,
 *     touser: XX,
 *     data: JSON , //業(yè)務(wù)方的對(duì)象
 *     miniprogram_state: "formal",
 *     lang: "zh_CN"
 *
 *  }
 * @param bizData:  業(yè)務(wù)部分協(xié)議
 * @return
 * @throws Exception
 * @ MiniMsgTypeEnum
 */
public void sendTemplateMsg(JSONObject body , JSONObject bizData) throws Exception {

    String msg_type = body.getString("msg_type");
    if (StringUtils.isEmpty(msg_type)) {

        throw new Exception("消息類(lèi)型必傳");
    }

    if (!MiniMsgTypeEnum.isValid(msg_type)) {

        throw new Exception("消息類(lèi)型不合法");
    }

    String component_appid = body.getString("component_appid");
    String authorizer_appid = body.getString("authorizer_appid");


    PlatformGrant grant = getApiToken(component_appid, authorizer_appid);

    String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + grant.getAuthorizer_access_token();
    body.remove("msg_type");
    body.remove("component_appid");
    body.remove("authorizer_appid");

    log.info("--->發(fā)送模板消息 body {}", body); // body {touser=ojM8n5G69FSxiF8Cu1aBefp_3c04, miniprogram_state=formal, template_id=FNyV8MnOhDZ9KCQ8QWBy2KMZ2i5oj3n0auwrYf-4cV4, lang=zh_CN}

    body.put("data", bizData );


    log.info("--->發(fā)送模板消息完整業(yè)務(wù)協(xié)議 body {}", body); // body {touser=ojM8n5G69FSxiF8Cu1aBefp_3c04, miniprogram_state=formal, template_id=FNyV8MnOhDZ9KCQ8QWBy2KMZ2i5oj3n0auwrYf-4cV4, lang=zh_CN}

    String response = doPostStr(url, body);
    log.info("----> 發(fā)送模板消息返回 response {}", response);

    JSONObject res =  JSONObject.parseObject(response);

    Integer status = res.getInteger("errcode");
    if (status != null && status.intValue() == 0) {

        log.info("-->>模板消息成功發(fā)送<<-----");
    } else {

        throw new Exception(res.getString("errmsg"));

    }


}

詳細(xì)的設(shè)計(jì)請(qǐng)參見(jiàn):

https://github.com/alanjiang/mini-wechat-doc

也可參考這篇文章

小程序消息訂閱和回復(fù)新功能上線文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-457757.html

到了這里,關(guān)于微信小程序消息模板設(shè)計(jì)及實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 微信小程序打怪之定時(shí)發(fā)送模板消息(node版)

    微信小程序打怪之定時(shí)發(fā)送模板消息(node版)

    背景描述 小程序答題簽到功能,為了促進(jìn)日活,需要每天定時(shí)向當(dāng)日未簽到的用戶推送消息提醒簽到。 讀本篇之前最好已經(jīng)了解微信關(guān)于發(fā)送模板消息的相關(guān)文檔: 模板消息指南 模板消息服務(wù)接口 說(shuō)明: 作者也是第一次寫(xiě)小程序的定時(shí)模板消息功能,作為一個(gè)純種前端攻城

    2024年02月03日
    瀏覽(29)
  • 微信小程序云開(kāi)發(fā)通過(guò)服務(wù)號(hào)給用戶推送模板消息

    微信小程序云開(kāi)發(fā)通過(guò)服務(wù)號(hào)給用戶推送模板消息

    主要參考下面兩個(gè)文章 1、云函數(shù)接收公眾號(hào)消息推送 | 微信開(kāi)放社區(qū) ??????2、微信小程序通過(guò)公眾號(hào)(服務(wù)號(hào))推送通知或提醒步驟及代碼(一,獲取推送前所需信息)_微信小程序推送服務(wù)通知_慶登登登的博客-CSDN博客 ?一些基本的概念就不講了,這里主要講下步驟和我

    2024年02月09日
    瀏覽(18)
  • 微信小程序 | 微信公眾平臺(tái)SpringBoot開(kāi)發(fā)實(shí)例 │ 模板消息的應(yīng)用開(kāi)發(fā)

    微信小程序 | 微信公眾平臺(tái)SpringBoot開(kāi)發(fā)實(shí)例 │ 模板消息的應(yīng)用開(kāi)發(fā)

    ?在手機(jī)微信公眾號(hào)中輸入文本(如“你好”),公眾號(hào)發(fā)送兩條模板消息,如下圖所示。 模板消息用來(lái)幫助公眾號(hào)進(jìn)行業(yè)務(wù)通知,是在模板內(nèi)容中設(shè)定參數(shù)(參數(shù)必須以{ {開(kāi)頭,且以.DATA} }結(jié)尾)并在調(diào)用時(shí)為這些參數(shù)賦值并發(fā)送的消息。模板消息僅用于向用戶發(fā)送重要的服務(wù)

    2024年02月03日
    瀏覽(29)
  • uniapp+微信小程序獲取openId,獲取access_token,訂閱消息模板,java后臺(tái)發(fā)送消息

    1.前期準(zhǔn)備 2.用戶訂閱消息 3.獲取openId(uniapp) 4.獲取access_token 5.發(fā)送消息 6.請(qǐng)求的代碼Springboot(自己寫(xiě)有發(fā)送請(qǐng)求方法的可以不用看) 在微信公眾號(hào)申請(qǐng)訂閱消息 在公共模板這里選用模板, 模板種類(lèi)跟小程序設(shè)置的類(lèi)目有關(guān),只有特殊的類(lèi)目有長(zhǎng)期訂閱模板 類(lèi)目可以在設(shè)

    2024年02月03日
    瀏覽(31)
  • 【微信小程序】如何獲得自己當(dāng)前的定位呢?本文利用逆地址解析、uni-app帶你實(shí)現(xiàn)

    【微信小程序】如何獲得自己當(dāng)前的定位呢?本文利用逆地址解析、uni-app帶你實(shí)現(xiàn)

    目錄 前言 效果展示 一、在騰訊定位服務(wù)配置微信小程序JavaScript SDK 二、使用uni-app獲取定位的經(jīng)緯度 三、?逆地址解析,獲取精確定位 四、小提示 在瀏覽器搜索騰訊定位服務(wù),找到官方網(wǎng)站,利用微信或者其他賬號(hào)注冊(cè)登錄,登錄后如下圖操作 點(diǎn)進(jìn)去之后,可以看到如下圖

    2024年01月19日
    瀏覽(27)
  • 分享400個(gè)微信小程序模板和小程序設(shè)計(jì)模板

    分享400個(gè)微信小程序模板和小程序設(shè)計(jì)模板

    分享的微信小程序模板和小程序設(shè)計(jì)模板,涵蓋各行各業(yè)的微信小程序功能界面設(shè)計(jì)模板,也有各種小程序開(kāi)發(fā)的一些特效模板,一共400個(gè),有需要的自取。 ? ? ?

    2024年02月11日
    瀏覽(14)
  • 講講微信小程序分包——本文來(lái)自AI創(chuàng)作助手

    微信小程序分包是為了解決小程序包體積過(guò)大而引入的一個(gè)功能。通過(guò)將小程序分為多個(gè)子包,每個(gè)子包可以獨(dú)立加載和升級(jí),從而讓小程序的啟動(dòng)速度更快,用戶體驗(yàn)更好。 具體實(shí)現(xiàn): 在小程序根目錄下創(chuàng)建一個(gè)名為 subpackage 的目錄,用于存放子包相關(guān)的文件和頁(yè)面。 在

    2024年02月09日
    瀏覽(23)
  • 微信小程序?qū)崿F(xiàn)訂閱消息功能

    微信小程序?qū)崿F(xiàn)訂閱消息功能

    ? ? ? ? ?* 源碼已經(jīng)上傳到資源處,需要的話點(diǎn)擊跳轉(zhuǎn)下載 |??源碼下載 ????????小程序中的訂閱內(nèi)容在日常中大家都會(huì)使用到,一般在支付的時(shí)候,會(huì)收到支持成功的消息,里面有一些基礎(chǔ)信息花費(fèi)多少以及是使用在什么地方,訂閱消息是小程序向用戶發(fā)送消息的方式

    2024年02月08日
    瀏覽(25)
  • 微信小程序?qū)崿F(xiàn)訂閱消息推送的實(shí)現(xiàn)步驟

    微信小程序?qū)崿F(xiàn)訂閱消息推送的實(shí)現(xiàn)步驟

    1、準(zhǔn)備工作 ??準(zhǔn)備小程序賬號(hào)、開(kāi)發(fā)環(huán)境,我小程序是基于uniapp開(kāi)發(fā),后臺(tái)代碼基于SpringBoot開(kāi)發(fā)。同時(shí)先閱讀官方文檔,了解小程序訂閱消息和后端如何發(fā)送訂閱消息等相關(guān)知識(shí),官方文檔地址如下: 《小程序訂閱消息》 《發(fā)送訂閱消息》 2、實(shí)現(xiàn)步驟 2.1、啟用并配置

    2024年02月15日
    瀏覽(29)
  • 微信小程序?qū)崿F(xiàn)客服消息自動(dòng)回復(fù)(回復(fù)圖片消息)

    前提 小程序已經(jīng)開(kāi)通了“云開(kāi)發(fā)”功能 在微信開(kāi)發(fā)者工具中打開(kāi)“云開(kāi)發(fā)”,點(diǎn)“設(shè)置”,點(diǎn)擊“其它設(shè)置”,點(diǎn)擊“添加消息推送”(添加消息類(lèi)型為“image”和“event”兩種消息推送設(shè)置),點(diǎn)擊“確定” 目前微信小程序用戶使用客服功能,必須通過(guò)固定的按鈕進(jìn)行觸發(fā)

    2024年02月10日
    瀏覽(16)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包