微信小程序功能_微信公众号客服功能和微信小程序的客服功能 - CSDN
精华内容
参与话题
  • 本次课程主要讲解微信小程序实战,音乐播放器的功能的实现,知识点主要包括点击事件,数据绑定,进度条,音乐播放API的学习
  • 微信小程序 消息推送功能实现详解

    万次阅读 热门讨论 2019-10-15 10:26:18
    比如我们小程序中的客服功能,我不想要使用小程序后台的在线客服功能,但我又想实现客服功能,这个时候微信提供了消息推送功能,在小程序后台的设置,开发设置中,消息推送功能: 点击开启消息推送功能,认证成功...

    在小程序开发中,如果想实现:用户发给小程序的消息以及开发者需要的事件推送,在小程序项目中,我们想要实现这样一个功能,

    比如我们小程序中的客服功能,我不想要使用小程序后台的在线客服功能,但我又想实现客服功能,这个时候微信提供了消息推送功能,在小程序后台的设置,开发设置中,消息推送功能:

    点击开启消息推送功能,认证成功进入到消息推送配置界面:

    这里配置几个参数注意一下:

    URL(服务器地址):这里要填我们要认证token的接口地址,并且是在线上的接口,才能认证成功

    比如我的消息推送认证接口的地址是:http://xxxxxxx/xxxxxx/getProcessRequest.do,下面会编写这个接口认证的代码

    Token(令牌):这个是用户自己添加,不过在小程序后台添加的Token必须与认证接口中的是一致的,这个才能认证成功

     

    下面是Spring mvc 编写的接口代码:

    因为这个接口是GET认证,POST是发送信息所以才会这么编写:

    /**
         * GET:验证token
         * OST:发送数据
         * @param request 作用域
         * @param response 作用域
         * @return  String
         */
        @RequestMapping(value= {"/getProcessRequest"},method= {RequestMethod.GET, RequestMethod.POST})
        @ResponseBody
        public String getProcessRequest(HttpServletRequest request,HttpServletResponse response) {
            boolean isGet=request.getMethod().toLowerCase().equals("get");
            LOGGER.info(isGet+"---------------");
            System.out.println(isGet);
             System.out.println("方法是-------"+isGet);
             if(isGet){//首次验证token
                 // 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。  
                    String signature = request.getParameter("signature");  
                    // 时间戳  
                    String timestamp = request.getParameter("timestamp");  
                    // 随机数  
                    String nonce = request.getParameter("nonce");  
                    // 随机字符串  
                    String echostr = request.getParameter("echostr");  

                    PrintWriter out = null;  
                    try {  
                        out = response.getWriter();  
                        // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,否则接入失败  
                        if (DateUtil.checkSignature(signature, timestamp, nonce)) {  
                            System.out.println("成功");
                            out.print(echostr);
                            
                            out.flush();  //必须刷新
                        } 
                        System.out.println("失败");
                    } catch (IOException e) {  
                        e.printStackTrace();  
                    } finally {  
                        out.close();  
                        out = null; 
                        
                    }  
             }else{// 进入POST聊天处理  
                 System.out.println("进入了聊天界面");
                 LOGGER.info("进入了聊天界面");
                     // 接收消息并返回消息  
                     try {
                         System.out.println("进入这个方法中了:");
                         acceptMessage(request,response);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }  
                   
             }
            return null;

        }

     

    acceptMessage方法: 这个方法是认证成功后也就是POST方法操作能够接收到小程序发来的信息,也可以回信息:

    这里根据小程序信息的格式可以去看小程序API文档,文档地址:

    https://developers.weixin.qq.com/miniprogram/dev/api/custommsg/receive.html#%E6%96%87%E6%9C%AC%E6%B6%88%E6%81%AF

     

    acceptMessage:


        /**
         * 聊天处理方法 发送数据
         * @param request 作用域
         * @param response 作用域
         * @see  Exception
         */
        public void acceptMessage(HttpServletRequest request,HttpServletResponse response) throws Exception{
            
            BufferedReader streamReader = new BufferedReader( new InputStreamReader(request.getInputStream(), "UTF-8"));
            StringBuilder responseStrBuilder = new StringBuilder();
            String inputStr;
            while ((inputStr = streamReader.readLine()) != null)
                responseStrBuilder.append(inputStr);
            
            /*BufferedReader readers = new BufferedReader(new InputStreamReader(request.getInputStream()));*/
            JSONObject jsonObject = JSONObject.fromObject(responseStrBuilder.toString());
            String param= jsonObject.toString();
            System.out.println("转出来的数据:"+param);
            String attribute = jsonObject.get("FromUserName").toString();//发送的openid
    //        String ToUserName = jsonObject.get("ToUserName").toString();//小程序原始id
            String MsgType = jsonObject.get("MsgType").toString(); //用户发送客服信息的类型
            System.out.println("发送数据的类型:"+MsgType);
            System.out.println(MsgType);
            if(MsgType.equals("event")) {
                  Map<String,Object>  text = new HashMap<String, Object>();
                  Feedbacktxt feedbacktxt = new Feedbacktxt();
                  feedbacktxt.setTouser(attribute);
                  feedbacktxt.setMsgtype("text");
                  text.put("content", "你好,欢迎来到这里");
                  feedbacktxt.setText(text);
                  String token = feedbackService.access_token(); //这里是获取接口凭证的接口
                  String url="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+token;
                  JSONObject jsonStrs = JSONObject.fromObject(feedbacktxt);
                  HttpUtils.httpPost(url, jsonStrs.toString());

    获取access_token,接口凭证的api接口文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183

     

    DateUtil.java:
     


        
          /** 
         * 验证签名 
         * @param signature  验证签名的数据
         * @param timestamp  参数
         * @param nonce  参数
         * @return  boolean
         */  
        public static boolean checkSignature(String signature, String timestamp, String nonce) {  
            
            //TOKEN
            //与token 比较
            String[] arr = new String[] { qurenneng1796789910, timestamp, nonce };  
     
            // 将token、timestamp、nonce三个参数进行字典排序  
            Arrays.sort(arr); 
            
            StringBuilder content = new StringBuilder();  
            
            for (int i = 0; i < arr.length; i++) {  
                content.append(arr[i]);  
            }
            
            MessageDigest md = null;  
            String tmpStr = null;  
      
            try {  
                md = MessageDigest.getInstance("SHA-1");  
                
                // 将三个参数字符串拼接成一个字符串进行sha1加密
                byte[] digest = md.digest(content.toString().getBytes());
                tmpStr = byteToStr(digest); 
            } catch (NoSuchAlgorithmException e) {  
                e.printStackTrace();  
            }  
     
            content = null;  
            // 将sha1加密后的字符串可与signature对比  
            return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;  
        }
        
        
        /** 
         * 将字节数组转换为十六进制字符串 
         *  
         * @param byteArray 
         * @return  String
         */  
        private static String byteToStr(byte[] byteArray) {  
            String strDigest = "";  
            for (int i = 0; i < byteArray.length; i++) {  
                strDigest += byteToHexStr(byteArray[i]);  
            }  
            return strDigest;  
        }  

        
        
        
        /** 
         * 将字节转换为十六进制字符串 
         *  
         * @param mByte 
         * @return  String
         */  
        private static String byteToHexStr(byte mByte) {  
            char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };  
            char[] tempArr = new char[2];  
            tempArr[0] = Digit[(mByte >>> 4) & 0X0F];  
            tempArr[1] = Digit[mByte & 0X0F];  
      
            String s = new String(tempArr);  
            return s;  
        }

    这样就可以实现动态的去发送客服信息,也可以去用代码去实现想要实现的功能,好了微信小程序接口认证就到这里了

    加入群聊

    展开全文
  • 微信小程序在线客服功能详解

    万次阅读 2018-09-04 17:51:18
    微信小程序中的客服功能使用button 按钮触发客服事件,用户可以在微信小程序后台进行看到用户发送的信息 微信小程序客服官方文档: https://developers.weixin.qq.com/miniprogram/dev/api/custommsg/receive.html ...

    微信小程序中的客服功能使用button 按钮触发客服事件,用户可以在微信小程序后台进行看到用户发送的信息

    微信小程序客服官方文档: https://developers.weixin.qq.com/miniprogram/dev/api/custommsg/receive.html

    这里介绍了客服发送信息和接收信息的格式和实际操作的接口参数

    在微信小程序 页面中我们使用这样一段代码就可以使用微信客服功能:

    <contact-button type="default-dark" size="20" session-from="weapp"></contact-button>

    在微信小程序开发工具中点击会出现:

    出现这个界面就代表我们这个代码是对的,微信客服功能调用成功了,只不过要使用手机才能看到微信客服聊天的界面,可以与客服进行互动了

    然后我们登录到微信小程序后台中,点击客服反馈:

    点击客服人员,点击添加,输入微信号绑定客服,绑定成功,点击在线客服功能进入到客服页面就可以聊天了:
     

    这个界面就是微信小程序提供的微信在线客服功能,在这里就可以收到微信小程序发送过来的信息,进行相应的回复信息,就可以信息微信客服功能,好了微信小程序在线客服功能就这样解决了,希望能对将要进行微信小程序开发的朋友一点帮助

    展开全文
  • 微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文: 这是我实际项目线上的代码, 或许有些不足 || 和你的需求不符合, 上图: <!--pages/index/to_news/to_news.wxml--> <...

    相关文章:

    1.小程序聊天群,发送语音,文字,图片。

    2.微信小程序集成腾讯IM,实现实时音视频通话,1V1聊天

    3.云开发微信小程序聊天群

    4.接入网易云信IM即时通讯的微信小程序聊天室

    5.微信小程序聊天功能 WebSocket 实现发送文字,图片,语音以及WebSocket 常见问题解决方案

    6.[微信小程序]聊天对话(文本,图片)的功能(完整代码附效果图)

    如果有个性化的需要修改,可以联系我的微信。

    微信小程序开发交流qq群   173683895

       承接微信小程序开发。扫码加微信。

    正文:

    这是我实际项目线上的代码, 或许有些不足 || 和你的需求不符合,  

    上图:

     

    <!--pages/index/to_news/to_news.wxml-->
    <view class='tab'>
      <view class='lan'>{{tabdata.title}}</view>
      <view class='tent'>
        <text>{{tabdata.attribute_attribute}}</text>
        <text class='fl_r '>{{tabdata.num}}</text>
      </view>
      <view class='xiahuaxian1'></view>
      <view>
        <text class='fabu'>发布时间: {{tabdata.time_agree}}</text>
      </view>
    </view>
    <view class='news'>
      <view class='xiahuaxian1 xiahuaxia'></view>
      <view class='new_top_txt'>您正在与{{tabdata.nickname}}进行沟通</view>
      <view class="historycon">
        <scroll-view scroll-y="true" scroll-top="{{scrollTop}}" class="history" wx:for="{{centendata}}" wx:key=''>
          <view>
            <text class='time'>{{item.time}}</text>
          </view>
          <block wx:if="{{item.is_show_right ==1}}">
            <view class='my_right'>
              <view class='page_row'>
                <text wx:if='{{!item.is_img}}' class='new_txt'>{{item.content}}</text>
                <image wx:if='{{item.is_img}}' src='http://sz800800.cn/Uploads/{{item.content}}' class='new_imgtent'></image>
                <view wx:if='{{!item.is_img}}' class='sanjiao my'></view>
                <image class='new_img' wx:if='{{item.show_rignt == "是自己的内容,显示在右边,右边渲染 nickname_owner,head_owner"}}' src='{{item.head_owner}}'></image>
                 <image class='new_img' wx:if='{{item.show_rignt == "是自己的内容,显示在右边,右边渲染 nickname_open,head_open"}}' src='{{item.head_open}}'></image>
              </view>
            </view>
          </block>
          <block wx:else>
            <view class='you_left'>
              <view class='page_row'>
                <image class='new_img' wx:if='{{item.show_rignt == "不是自己的内容,显示在左边,左边渲染 nickname_owner,head_owner"}}' src='{{item.head_owner}}'></image>
                 <image class='new_img' wx:if='{{item.show_rignt == "不是自己的内容,显示在左边,左边渲染 nickname_open,head_open"}}' src='{{item.head_open}}'></image>
                <view wx:if='{{!item.is_img}}' class='sanjiao you'></view>
                <text wx:if='{{!item.is_img}}' class='new_txt'>{{item.content}}</text>
                <image wx:if='{{item.is_img}}' src='http://sz800800.cn/Uploads/{{item.content}}' class='new_imgtent'></image>
              </view>
            </view>
          </block>
        </scroll-view>
      </view>
    </view>
    <view class='hei' id="hei"></view>
    <view class="sendmessage">
      <input type="emoji" bindinput="bindChange" confirm-type="done" value='{{news_input_val}}' placeholder="" />
      <button catchtap="add">发送</button>
      <input style='display:none' type="" bindinput="bindChange" confirm-type="done" placeholder="" />
      <image bindtap="upimg1" class='jia_img' src='../../../images/jia_img.png'></image>
    </view>

     

    // pages/index/to_news/to_news.js
    var app = getApp();
    var util = require("../../../utils/util.js")
    var message = '';
    var text = '';
    var user = {};
    var length;
    var zx_info_id;
    var openid_talk;
    Page({
      data: {
        news: '',
        scrollTop: 0,
        message: '',
        text: text,
        centendata: '',
        nickName: '',
        avatarUrl: '',
        news_input_val:'',
        tabdata: ''
      },
      bindChange: function (e) {
        message = e.detail.value
      },
      //事件处理函数
      add: function (e) {
        var that = this
        var data = {
          program_id: app.jtappid,
          openid: app._openid,
          zx_info_id: zx_info_id,
          content: message,
          openid_talk:openid_talk
        }
        util.request('pg.php/ZXinfo/session_submit', 'post', data, '正在加载数据', function (res) {
          if (res.data.state == 1) {
            var a = true;
            that.loaddata(a);
            that.setData({
              news_input_val:''
            })
            message = ''
          } else {
            wx.showToast({
              title: '网络错误,请稍后',
            })
          }
        })
      },
    
      onLoad: function (options) {
        openid_talk = options.openid_talk;
        zx_info_id = options.zx_info_id;
        console.log(openid_talk)
        //调用应用实例的方法获取全局数据
        this.setData({
          zx_info_id: zx_info_id,
          nickName: app.nickName,
          avatarUrl: app.avatarUrl,
        });
        this.loaddata()
      },
      // 页面加载
      loaddata: function (a) {
        var that = this;
        var is_img = true;
        var data = {
          program_id: app.jtappid,
          openid: app._openid,
          zx_info_id: zx_info_id,
          openid_talk: openid_talk
        }
        util.request('pg.php/ZXinfo/session_page', 'post', data, '', function (res) {
          if (res.data.k1) {
            res.data.k1.time_agree = util.js_date_time(res.data.k1.time_agree)
          }
          for (var i = 0; i < res.data.k2.length; i++) {
            res.data.k2[i].time = util.js_date_time(res.data.k2[i].time)
            var n = res.data.k2[i].content.charAt(res.data.k2[i].content.length - 1);
            switch (n) {
              case 'g':
                res.data.k2[i].is_img = is_img
                break;
              default:
            }
          }
          that.setData({
            tabdata: res.data.k1,
            centendata: res.data.k2.reverse()
          })
          wx.setNavigationBarTitle({ title: that.data.tabdata.nickname });
          if (a) {
            setTimeout(function () {
                that.bottom()
            }, 500);
          }
        })
        setTimeout(function () {
          if (that.data.centendata.length != length) {
            length = that.data.centendata.length
          }
          that.loaddata()
        }, 3000);
        
      },
      // 获取hei的id节点然后屏幕焦点调转到这个节点
      bottom: function () {
        var query = wx.createSelectorQuery()
        query.select('#hei').boundingClientRect()
        query.selectViewport().scrollOffset()
        query.exec(function (res) {
          wx.pageScrollTo({
            scrollTop: res[0].bottom  // #the-id节点的下边界坐标
          })
          res[1].scrollTop // 显示区域的竖直滚动位置
        })
      },
      // 选择图片并把图片保存  
      upimg1: function () {
        var that = this;
        wx.chooseImage({
          success: function (res) {
            var data = {
              program_id: app.jtappid,
              openid: app._openid,
              zx_info_id: zx_info_id,
            }
            var tempFilePaths = res.tempFilePaths
            wx.uploadFile({
              url: 'pg.php/ZXinfo/session_submit', //提交信息至后台
              filePath: tempFilePaths[0],
              name: 'content', //文件对应的参数名字(key)
              formData: data,  //其它的表单信息
              success: function (res) {
                var a = true;
                that.loaddata(a);
                message = ''
              }
            })
          }
        })
      }
    })

     

     

     

     

     

     

     

    /* pages/index/to_news/to_news.wxss */
    
    page {
      background-color: #f7f7f7;
    }
    
    .tab {
      padding: 20rpx 20rpx 40rpx 50rpx;
      height: 20%;
      background-color: white;
    }
    
    .tab .tent {
      font-size: 33rpx;
      margin-bottom: 30rpx;
    }
    .jia_img{
      height: 80rpx;
      width: 90rpx;
    }
    .new_imgtent{
        height: 180rpx;
      width: 190rpx;
    }
    .tab .fabu {
      font-size: 33rpx;
      margin-top: 30rpx;
      margin-bottom: 30rpx;
    }
    
    .xiahuaxia {
      width: 80%;
      text-align: center;
      margin: 0 auto;
      position: relative;
      top: 60rpx;
    }
    
    .time {
      text-align: center;
      padding: 5rpx 20rpx 5rpx 20rpx;
      width: 200rpx;
      font-size: 26rpx;
      background-color: #E8E8E8;
    }
    
    .new_top_txt {
      width: 50%;
      position: relative;
      top: 38rpx;
      text-align: center;
      margin: 0 auto;
      font-size: 30rpx;
      color: #787878;
      background-color: #f7f7f7;
    }
    
    /* 聊天内容 */
    
    .news {
      margin-top: 30rpx;
      text-align: center;
      margin-bottom: 150rpx;
    }
    
    .img_null {
      height: 60rpx;
    }
    
    .l {
      height: 5rpx;
      width: 20%;
      margin-top: 30rpx;
      color: #000;
    }
    
    /* 聊天 */
    
    .my_right {
      float: right;
      position: relative;
      right: 40rpx;
    }
    
    .you_left {
      float: left;
      position: relative;
      left: 5rpx;
    }
    
    .new_img {
      width: 100rpx;
      height: 100rpx;
      border-radius: 50%;
    }
    
    .new_txt {
      width: 380rpx;
      border-radius: 7px;
      background-color: #95d4ff;
      padding: 0rpx 30rpx 0rpx 30rpx;
    }
    
    .sanjiao {
      top: 20rpx;
      position: relative;
      width: 0px;
      height: 0px;
      border-width: 10px;
      border-style: solid;
    }
    
    .my {
      border-color: transparent transparent transparent #95d4ff;
    }
    
    .you {
      border-color: transparent #95d4ff transparent transparent;
    }
    
    .sendmessage {
      background-color: white;
      width: 100%;
      position: fixed;
      bottom: 0rpx;
      display: flex;
      flex-direction: row;
    }
    
    .sendmessage input {
      width: 80%;
      height: 40px;
      background-color: white;
      line-height: 40px;
      font-size: 14px;
      border: 1px solid #d0d0d0;
      padding-left: 10px;
    }
    
    .sendmessage button {
      border: 1px solid white;
      width: 18%;
      height: 40px;
      background: #fff;
      color: #000;
      line-height: 40px;
      font-size: 14px;
    }
    
    .historycon {
      height: 90%;
      width: 100%;
      flex-direction: column;
      display: flex;
      margin-top: 100rpx;
      border-top: 0px;
    }
    .hei{
      margin-top: 50px;
      height: 20rpx;
    }
    .history {
      height: 100%;
      margin-top: 15px;
      margin: 10px;
      font-size: 14px;
      line-height: 40px;
      word-break: break-all;
    }
    

     

     

     

     

     

    展开全文
  • 微信小程序--实现分享功能

    万次阅读 2019-07-25 15:36:44
    本篇文章的目标是实现分享小程序中的单张页面给其他用户,并且打开分享后的页面拥有返回按钮. 最终的效果: 1. 封装一个分享的组件 <view class='share'> <view class='like'> ...

      本篇文章的目标是实现分享小程序中的单张页面给其他用户,并且打开分享后的页面拥有返回按钮.

      最终的效果:

     

                                                                

     

     

    1. 封装一个分享的组件

    <view class='share'>
       <view class='like'>
          <view class='iconfont icon-aixin'></view>
       </view>
       <view class='weixin'>
           <button open-type="share" class='iconfont icon-weixin'></button>
       </view>
    </view>

    页面效果如下:

                                                

    说明:

       如果想在页面上实现点击按钮分享,那么这个点击的按钮必须使用button标签,并且open-type置为share

     

    2.在想要分享的页面中引入上面组件,并在页面的js中Page所包含的对象里增加一个方法onShareAppMessage

     

    Page({
    
      /**
       * 页面的初始数据
       */
      data: {
       news_id:12
      },
    
      /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function (options) {
        
       
        
      },
    
      /**
       * 用户点击右上角分享
       */
      onShareAppMessage: function () {
    
        let url = encodeURIComponent('/packageNews/pages/news_detail/news_detail?news_id=' + this.data.news_id);
    
        return {
          title: "热点详情",
          path:`/pages/index/index?url=${url}` 
        }
    
      }
    })

     说明:

      将当前页面的路径包括参数使用encodeURIComponent进行编码并作为url的参数,path设置为小程序的首页.当我们将该页面

    分享给其他人时,他们打开的首先是首页,然后跳转到我们分享的这个页面.

     

    3.要想分享后的页面打开先进入首页再跳转到分享的页面,首页的js要做如下设置

     

    //index.js
    Page({
      data: {
      
      },
      onLoad: function (options) {
    
    
        if(options.url){
    
          let url = decodeURIComponent(options.url);
    
          wx.navigateTo({
            url
          })
    
        }
    
      }
    
    })
    

    说明:

      在onLoad的方法中先判断有没有url参数,如果有的话就使用decodeURIComponent对url解码然后跳转.由于小程序是先进入了首页然后跳转到分享页,这样便解决了分享页没有返回键的问题.

     

     

     

     

    展开全文
  • 微信小程序之地图功能

    万次阅读 多人点赞 2017-04-30 17:36:09
    转载请注明出处:http://blog.csdn.net/crazy1235/article/details/55004841本篇blog主要介绍微信小程序中的地图模块相关功能。基本使用地图组件使用起来也很简单。.wxml...
  • 微信小程序实现购物车功能

    万次阅读 多人点赞 2018-09-09 10:54:03
    在我的GitHub上有校园二手交易微信小程序的源码,这里面包含了购物车的功能,GitHub地址:https://github.com/zhuyuzhu/Secondhand-goods-on-campus,该项目的pages文件夹下的shoppingCart文件夹就是购物车的代码。...
  • [微信小程序]搜索功能实现,搜索框样式

    万次阅读 多人点赞 2019-06-04 14:47:31
    微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 正文: 上效果图: 一:搜索框功能实现 1.在首页做一个搜索框的样式并实现跳转到搜索页面 <view class='page_row' bindtap=...
  • 微信小程序【客服消息】功能开发

    万次阅读 热门讨论 2018-06-08 11:16:42
    最近在开发微信小程序,前后端均是我一个人负责,也着实受了不少苦网上客服消息开发挺多的,但是大多数说的都不详尽对新人来说有很多坑,最后还是根据官方说明文档一步一步走下来,写一份新人版的供大家参考,望大佬...
  • 小程序如何开通微信支付?

    万次阅读 2018-05-14 18:24:54
    目前开通微信小程序支付功能有两种方式,一个是你已经有微信商户号的情况下直接绑定一下商户号就可以了,另一个就是需要新申请一个微信支付的商户号。第一种:绑定已有微信支付商户号如果您开通过微信支付商户,绑定...
  • 正在做一个微信小程序,想添加一个搜索功能,该怎么实现呢?搜索的内容要放到数据库里吗?最好有个案例学习学习。
  • 实例源码
  • 微信小程序开发者工具简介

    万次阅读 2018-05-14 10:07:29
    微信团队发布了微信小程序开发者工具、微信小程序开发文档和微信小程序设计指南,全新的开发者工具,集成了开发调试、代码编辑及程序发布等功能,帮助开发者简单和高效地开发微信小程序。启动工具时,开发者需要使用...
  • 近期微信小程序demo源码下载汇总,乃居家旅行学习分析必备良品!点击标题可直接跳转至下载。帖子最下方可点击收藏 排序 demo源码(点击标题进入帖子下载) 描述 1 微信小程序-金盆洗脚城...
  • 17年3月27日,微信小程序开放个人主体注册小程序,相信很多开发者都申请了小程序。但个人主体小程序和组织主体小程序有什么不同呢?相对而言有什么限制? 01接口限制 个人主体的小程序肯定是无法完整地使用小程序的...
  • WXCustomSwitch 微信小程序自定义 Switch 组件模板 WeixinAppBdNovel 微信小程序demo:百度小说搜索 shitoujiandaobu 小程序:石头剪刀布(附代码说明) audiodemo 微信小程序开发之视频播放器 Video 弹幕 弹幕颜色...
  • WXCustomSwitch 微信小程序自定义 Switch 组件模板 WeixinAppBdNovel 微信小程序demo:百度小说搜索 shitoujiandaobu 小程序:石头剪刀布(附代码说明) audiodemo 微信小程序开发之视频播放器 Video 弹...
  • 重要的事情说三遍,目前微信小程序中无法访问外部链接,也就是网页。只能通过wx.request访问API接口。 所以本人只好提供了链接的复制功能给用户使用了。
  • python+微信小程序项目

    万次阅读 多人点赞 2018-04-22 20:41:59
    爬虫微信小程序 此项目为新手爬虫练习项目 flask,requests,json,BeautifulSoup,前端使用微信小程序, 小说爬取起点网站数据,电影爬取豆瓣网站数据, 开发周期一周工作日 小说演示 电影演示 github:...
  • 微信小程序怎么提现到零钱?有个提现的功能,但是看了下小程序API没有看到关于提现的接口,所以不知道该怎么搞了
1 2 3 4 5 ... 20
收藏数 114,114
精华内容 45,645
关键字:

微信小程序功能