07. 微信公众号客服信息

1. 官方文档
  1. 因为微信服务器发送消息时,5秒不回复则会重试,倘若我们的服务器处理数据或者网络的原因没有及时回复,将会造成不好的结果
  2. 可以选择给予微信服务器回复,再异步调客服接口给予用户回复
2. 实现
  1. 支持发送文本消息图片消息语音消息视频消息音乐消息图文消息菜单消息卡券等消息

    1. 发送的是 Json 数据

      • 文本消息示例

        {
            "touser":"OPENID",
            "msgtype":"text",
            "text":
            {
                 "content":"Hello World"
            }
        }
        
    2. 共有字段

      /**
       * 发送的用户
       */
      @JsonProperty("touser")
      protected String toUser;
      
      /**
       * 消息类型
       */
      @JsonProperty("msgtype")
      protected String msgType;
      
    3. 文本消息、图片消息示例

      import com.small.nine.wxmp.common.constant.WxConstant;
      import lombok.Data;
      import lombok.EqualsAndHashCode;
      
      import java.util.HashMap;
      import java.util.Map;
      
      /**
       * 客服发送 文本信息
       *
       * @author sheng_zs@126.com
       * @date 2021-08-06 16:54
       */
      @Data
      @EqualsAndHashCode(callSuper = true)
      public class WxKfTextMsgBean extends WxKfMsgBaseBean {
          private static final long serialVersionUID = 1L;
      
          /**
           * 消息内容<br>
           * 支持插入跳小程序的文字链:<br>
           * {@literal <a href="http://www.qq.com" data-miniprogram-appid="appid" data-miniprogram-path="pages/index/index">点击跳小程序</a>}
           * <ol>
           *     <li>data-miniprogram-appid 项,填写小程序appid,则表示该链接跳小程序;</li>
           *     <li>data-miniprogram-path项,填写小程序路径,路径与app.json中保持一致,可带参数;</li>
           *     <li>对于不支持data-miniprogram-appid 项的客户端版本,如果有herf项,则仍然保持跳 href 中的网页链接;</li>
           *     <li>data-miniprogram-appid对应的小程序必须与公众号有绑定关系。</li>
           * </ol>
           */
          private Map<String, String> text;
      
          /**
           * 初始化,并返回
           *
           * @param toUser  发送对象
           * @param content 消息内容
           * @return {@link WxKfTextMsgBean}
           */
          public static WxKfTextMsgBean getInstance(String toUser, String content) {
              WxKfTextMsgBean msgBean = new WxKfTextMsgBean();
              msgBean.setToUser(toUser);
              msgBean.setMsgType(WxConstant.MSG_TYPE_TEXT);
              Map<String, String> map = new HashMap<>();
              map.put(WxConstant.PARAM_CONTENT, content);
              msgBean.setText(map);
              return msgBean;
          }
      }
      
      import com.small.nine.wxmp.common.constant.WxConstant;
      import lombok.Data;
      import lombok.EqualsAndHashCode;
      
      import java.util.HashMap;
      import java.util.Map;
      
      /**
       * 客服返回 图片信息
       *
       * @author sheng_zs@126.com
       * @date 2021-08-06 17:00
       */
      @Data
      @EqualsAndHashCode(callSuper = true)
      public class WxKfImageMsgBean extends WxKfMsgBaseBean {
          private static final long serialVersionUID = 1L;
      
          /**
           * 图片内容
           */
          private Map<String, String> image;
      
          /**
           * 初始化,并返回
           *
           * @param toUser  发送对象
           * @param mediaId 图片 ID
           * @return {@link WxKfImageMsgBean}
           */
          public static WxKfImageMsgBean getInstance(String toUser, String mediaId) {
              WxKfImageMsgBean msgBean = new WxKfImageMsgBean();
              msgBean.setToUser(toUser);
              msgBean.setMsgType(WxConstant.MSG_TYPE_IMAGE);
              // 图片信息
              Map<String, String> map = new HashMap<>();
              map.put(WxConstant.PARAM_MEDIA_ID, mediaId);
              msgBean.setImage(map);
              return msgBean;
          }
      }
      
  2. serviceImpl

    import cn.hutool.http.HttpUtil;
    import com.small.nine.wxmp.common.constant.WxConstant;
    import com.small.nine.wxmp.domain.bean.wx.WxInMsgBean;
    import com.small.nine.wxmp.domain.bean.wx.kf.msg.WxKfImageMsgBean;
    import com.small.nine.wxmp.domain.bean.wx.kf.msg.WxKfNewsMsgBean;
    import com.small.nine.wxmp.domain.bean.wx.kf.msg.WxKfTextMsgBean;
    import com.small.nine.wxmp.service.WxAsyncService;
    import com.small.nine.wxmp.service.WxService;
    import com.small.nine.wxmp.utils.wx.JsonUtils;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.scheduling.annotation.Async;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.Resource;
    
    /**
     * @author sheng_zs@126.com
     * @date 2021-08-06 17:40
     */
    @Slf4j
    @Service
    public class WxAsyncServiceImpl implements WxAsyncService {
        @Resource
        private WxService wxService;
    
        @Async
        @Override
        public void kfSend(WxInMsgBean msgBean) {
            String msg = "";
    
            log.info("微信+++++异步处理+++++ one +++++ WxInMsgBean: {}", msgBean.toString());
            switch (msgBean.getMsgType()) {
                case WxConstant.MSG_TYPE_TEXT:
                    // 处理 文本信息
                    msg = JsonUtils.writeValueAsString(WxKfTextMsgBean.getInstance(msgBean.getFromUserName(), msgBean.getContent()));
                    break;
                case WxConstant.MSG_TYPE_IMAGE:
                    // 处理图片信息
                    msg = JsonUtils.writeValueAsString(WxKfImageMsgBean.getInstance(msgBean.getFromUserName(), msgBean.getMediaId()));
                    break;
                case WxConstant.MSG_TYPE_EVENT:
                    // 处理事件
                    switch (msgBean.getEvent()) {
                        case WxConstant.EVENT_TYPE_SUBSCRIBE:
                            // 用户关注公众号
                            msg = JsonUtils.writeValueAsString(WxKfNewsMsgBean.getInstance(msgBean.getFromUserName(), "http://www.baidu.com", "http://mmbiz.qpic.cn/mmbiz_jpg/8IpUia88gYWiaj07aFP5jcHH5gDlicXhlgNwS2gxfEbC1T4NLGAr9qowOPLHIXBHFhewUxaogqcDMHgcmnZyt5MibA/0", "title", "说明"));
                            break;
                        case WxConstant.EVENT_TYPE_UNSUBSCRIBE:
                            // 用户取消关注
                            // 加入黑名单、删除数据库等操作
                            break;
                        default:
                            msg = JsonUtils.writeValueAsString(WxKfTextMsgBean.getInstance(msgBean.getFromUserName(), "事件推送:" + msgBean.getEvent()));
                            break;
                    }
                    break;
                default:
                    msg = JsonUtils.writeValueAsString(WxKfTextMsgBean.getInstance(msgBean.getFromUserName(), "请发送图片或者文字内容!"));
                    break;
            }
            log.info("回复信息 msg: {}", msg);
            // 调用接口
            final String url = String.format(WxConstant.URL_CUSTOM_SEND_POST, wxService.getAccessToken());
            String post = HttpUtil.post(url, msg);
            log.info("微信+++++异步处理+++++ end +++++ 发送结果:{}", post);
        }
    }    
    
  3. 源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 uni.app 中使用微信公众号 H5 支付,你可以按照以下步骤进行操作: 1. 首先,确保你已经配置好了微信公众号支付功能,并且已经获取到了支付的相关参数,例如订单号、支付金额等。 2. 在 uni-app 中,可以使用 `uni.request` 或其他网络请求库来发起支付请求。你需要向微信支付接口发送一个 POST 请求,包含支付相关的参数。 例如: ```javascript uni.request({ url: 'https://api.mch.weixin.qq.com/pay/unifiedorder', // 微信支付接口地址 method: 'POST', data: { // 支付参数,例如 appid、mch_id、nonce_str、body、out_trade_no、total_fee 等 }, success: (res) => { // 请求成功的回调函数 // 解析返回的数据,获取预支付交易会话标识 prepay_id const prepayId = res.data.prepay_id; // 调用 H5 支付接口进行支付 uni.requestPayment({ provider: 'wxpay', timeStamp: '', // 时间戳 nonceStr: '', // 随机字符串 package: '', // 统一下单接口返回的 prepay_id 参数值 signType: 'MD5', paySign: '', // 签名 success: (res) => { // 支付成功的回调函数 console.log(res); }, fail: (err) => { // 支付失败的回调函数 console.log(err); } }); }, fail: (err) => { // 请求失败的回调函数 console.log(err); } }); ``` 在上述代码中,你需要根据实际情况填写支付接口地址、支付参数、预支付交易会话标识 prepay_id 以及支付的回调函数。 3. 当用户点击支付按钮后,会触发支付请求,用户将会跳转到微信支付页面完成支付操作。 请注意,以上代码仅为示例,实际使用时需要根据 uni-app 中的具体语法和微信支付接口的要求进行相应的调整和处理。同时,确保在后端服务器中进行订单处理和验证,以确保支付的安全和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值