微信开发没有服务器_微信公众平台开发服务器与微信服务器通信时失败 - CSDN
  • 这里将重点介绍,在自己没有服务器的情况下,如何在微信小程序里直接调用小白接口。 前提 假设你已经开通微信小程序,如果还没有,可前往微信公众平台开通:https://mp.weixin.qq.com 假设你已经开通小白接口,如果...

    这里将重点介绍,在自己没有服务器的情况下,如何在微信小程序里直接调用小白接口。

     

    前提

    假设你已经开通微信小程序,如果还没有,可前往微信公众平台开通:https://mp.weixin.qq.com

    假设你已经开通小白接口,如果还没有,可到https://www.okayapi.com/?f=mwx 免费注册开通

     

    源代码

    本示例源代码可到码云上下载,点击下载:https://gitee.com/dogstar/okayapi-demo。

    最终运行效果:

    关键配置

    修改request合法域名

    首先,登录微信公众号平台,进入:设置 - 开发设置 - 服务器域名,修改request合法域名,修改为你当前所在的小白接口域名。小白接口已支持HTTPS访问。如下:

    如果不清楚自己所在的域名,可登录小白后台,进入:系统设置 - 我的套餐,查看接口域名。如:

    注意!并不是全部的所在域名都是https://api.okayapi.com,只有在这设置后,才能允许在小程序中请求接口。

    修改app.js里的globalData

    然后,下载本接入示例的代码,使用微信开发者工具(点击下载)打开,并修改app.js里的globalData配置。如下:

    关于APP_KEY和APP_SECRECT,可以在前面我的套餐里找到。

    配置完成后,我们就可以开始在小程序里进行功能开发啦。下面来看,如何编写代码请求小白接口。

    先在你的utils目录内文件里添加okayapi.js和md5.js这两个文件。然后在你的index.js文件内,先引入okayapi.js,即:

    //index.js
    let okayapi = require('../../utils/okayapi.js')

    通过wx.request请求小白接口

    然后,使用微信提供的wx.request对小白接口发起请求。需要注意的是,传递的参数须经过okayapi.enryptData()进行加密,在返回的结果中的wxRes.data才是小白接口的返回结果。

      /** * 小白接口请求示例 */
      okayApiHelloWorld: function(e) {
        /** * 准备接口参数 */
        let params = {
          s: "Hello.World",         // 必须,待请求的接口服务名称
          name: "dogstar"         // 可选,根据接口文档,补充更多接口参数
        };
        let _self = this
    
        /** * 对小白接口发起请求 */
        wx.request({
          url: app.globalData.okayapiHost,
          data: okayapi.enryptData(params),
          success: function (wxRes) {
            // TODO:实现你的梦想……
            let res = wxRes.data
    
            if (res.data && res.data.err_code == 0) {
              // TODO:请求成功
              console.log('ok: ', res.data)
    
              _self.setData({
                motto: res.data.title
              })
            } else {
              // TODO:当前操作失败
              console.log('fail: ', res)
    
              _self.setData({
                motto: res.data.err_msg
              })
            }
    
          }
        }) 
      }

    调用成功的情况下,会看到类似这样的调试信息:

    使用PHP代理请求小白接口

    以上是针对自己没有服务器下,微信小程序直连小白接口的接入指南。如果自己有服务器,并且不能修改现在微信小程序上的request合法域名时,则可以使用上面介绍的PHP代理。PHP代理的使用更简单,只需要将PHP代理文件上传到你的服务器上,然后在微信小程序请求接口时,链接改为刚才PHP代理的链接即可。这种使用场景,更为简便,不需要修改request合法域名,也不需要修改app.js里的globalData配置,也不需要在wx.request进行okayapi.enryptData()加密。因为这些都全部移到了PHP代理内实现,因此也更为安全。

    即调用链如下:

    // 自己没有服务器(通过wx.request直接请求小白接口)
    微信小程序 -> 小白接口
    
    // 自已有服务器(通过PHP代理中转请求小白接口)
    微信小程序 -> 自己服务器的PHP代理 -> 小白接口

    对于自己有服务器的情况,推荐使用PHP代理;如果没有自己的服务器也不要紧,可参考上面的接入指南。

     

    小白接口有哪些功能?

    简单说一下,小白接口为小程序开发提供了较多接口,免费,可以直接调用。你可以把一些数据通过接口存到你的云端数据库(可以自己建表、加表字段,也可以使用自己的数据库,或默认的云端数据库)。例如这样: enter image description here

    使用小白接口进行数据的处理很简单,例如需要获取某个id的数据,请求的接口,以及返回的数据示例格式如下(其他的接口使用示例,基本上需要的数据接口都有提供哦):
    http://api.okayapi.com/?s=App.Table.Get&model_name=git_project&id=6

    返回的数据示例:

    {
        "ret": "200",
        "data": {
            "err_code": "0",
            "err_msg": "",
            "data": {
                "id": 6, // 数据ID(系统保留字段,固定返回)
                "uuid": "", // 用户ID(系统保留字段,固定返回)
                "add_time": "2017-11-12 09:38:45", // 添加时间(系统保留字段,固定返回)
                "update_time": "", // 最后更新时间,没有时返回空字段串(系统保留字段,固定返回)
                "ext_data": "", // JSON格式的扩展字段,没有时返回空字段串(系统保留字段,固定返回)
                "git_name": "",
                "git_url": "",
                "git_author": "dogstar"
            }
        },
        "msg": ""
    }
    

    还有现成的会员模块,可以直接登录、注册、修改密码、进行账号联登等,也可以看到注册的用户,如:
    enter image description here

    还有更赞的功能,也可以接入微信平台的小程序接口哦,只需要在这配置一下, enter image description here

    就可以调用 微信小程序获取微信基本信息 接口,获取微信信息啦~~~~

    这些在小白接口的官网(https://www.okayapi.com/)上都有介绍哦,还有视频教程。基本上,搭配小程序,可以开发很多自己的快应用啦~~~


    在小白接口上,你可以存放很多自己的数据,与微信小程序搭配起来开发,你就能开发任何应用啦~~

    展开全文
  • 第三步,要在你的服务器上面写代码,要有回应腾讯服务器的方法,并且要有返回值,自己的服务端返回echostr参数,那么腾讯服务器就知道表示token验证成功,这是关键,一定要有返回值,这个echostr参数是从请求里面...

    第一步填写网址

    第二步设置一个token,你自己随便打的都可以

    第三步,要在你的服务器上面写代码,要有回应腾讯服务器的方法,并且要有返回值,自己的服务端返回echostr参数,那么腾讯服务器就知道表示token验证成功,这是关键,一定要有返回值,这个echostr参数是从请求里面获得的。

    以下是用java编写的服务器端代码

     

    可以参考这个博客,结合我的注意要点

    https://blog.csdn.net/u011466609/article/details/5088

    1、url为项目路径且必须可以通过外网80端口访问 
    2、token必须和项目中token一致

    展开全文
  • 微信公众号开发(一)服务器及接口的配置 关于微信公众号中的订阅号和服务的区别这里不多加讨论,网上有很多资源可以搜到,这里直接进入正题,如果是个人开发者,这里建议使用测试号进行开发学习,测试号的权限要比...

    微信公众号开发(一)服务器及接口的配置

    关于微信公众号中的订阅号和服务的区别这里不多加讨论,网上有很多资源可以搜到,这里直接进入正题,如果是个人开发者,这里建议使用测试号进行开发学习,测试号的权限要比个人订阅号要多的多,而本篇博客也是基于测试号进行开发的。

     

    在开始微信号开发之前需要准备好两样东西,1、需要一个测试号,2、需要一个拥有域名的服务器,下面将分别介绍怎样获取这两样东西。

    1、测试号

    点击此链接测试号登录可直接用微信扫一扫注册一个测试号,相应的界面如下所示

     

    进入测试号界面之后可以获得一些开发所需要的东西,以及关注者列表和开发权限等,如下所示

     

    2、服务器

    微信号开发需要一个第三方服务器来和微信服务器沟通,这里我使用的是一个百度云的BAE虚拟主机,理由有以下几点:

    1、性价比高,该主机一天只需要2毛钱,而且不限制充值金额,如果你只是用来学习微信公众号开发,而且预计一个月学会的话,那么你只需要充值6元钱就可以,相比其他最低充值一年的平台相比,要划算的多。

    2、可以免去购买域名的费用,该BAE可免费设置一个二级域名,可用于微信公众号开发,并且数据库的使用也是免费的。

    3、该BAE的代码可以使用git或svn管理,我们在本地写好代码之后,直接push上去就可以了,相当方便,而且可以设置快捷发布,提交代码当即发布。

    缺点就是它的日志系统不够完善,不过这个缺点很容易解决,我们可以自己打印信息到文件里,然后读取出来,下面将会介绍到。

     

    百度云网址是:https://login.bce.baidu.com/?account=,登录之后,点击BAE后如图

     

    好了,这样我们就准备好了微信开发的两个必备的东西。接下来就要配置接口了。

     

    3、配置接口

    上面进入测试号界面的时候我们可以看到有一个接口配置信息的模块,如下所示

     

     

    这里的URL就是填写以上BAE中的域名就好了,当然了要注意加上http://前缀,以后用户发送的消息都会经过微信服务器转发到该接口。Token可以随便填写一些东西,这里填写了weixin。关于Token的用途下面会讲到。

    好了,现在先别急着点击提交,因为我们还没有在URL指向的服务器里编写任何的代码,还不能正确响应微信服务器的请求。

     

    在编写任何的代码之前,我先说一下本博客的一些习惯,为了便于理解,我会先将文件的结构和代码先贴出来,然后才解释具体代码的含义,这样如果熟悉的人就可以直接跳过该部分了。

     

    文件结构如下

     

    index.php用于处理消息。

    output_log.php和output_query.php分别用来输出post过来的数据和请求的查询字符串,Utils.php主要用来将数据输出到文件中,看了下面的代码你就明白了,其实相当简单,这三个东西是我用来调试用的,相比起微信公众号提供的在线调试接口而言(需要设置一堆的信息),我觉得这样更加简单。

     

    Utils.php,提供了两个函数,traceHttp()将请求的时间、远程主机地址和查询字符串输出到query.xml文件中。logger()将类型、时间和post数据输出到log.xml中。

    <?php
    class Utils
    {
        public static function traceHttp()
        {
            $content = date('Y-m-d H:i:s')."\n\rremote_ip:".$_SERVER["REMOTE_ADDR"].
                "\n\r".$_SERVER["QUERY_STRING"]."\n\r\n\r";
            $max_size = 1000;
            $log_filename = "./query.xml";
            if (file_exists($log_filename) and (abs(filesize($log_filename))) > $max_size){
                unlink($log_filename);
            }else {
    
            }
            file_put_contents($log_filename, $content, FILE_APPEND);
        }
    
        public static function logger($log_content, $type = '用户')
        {
            $max_size = 3000;
            $log_filename = "./log.xml";
            if (file_exists($log_filename) and (abs(filesize($log_filename)) >
                    $max_size)) {
                unlink($log_filename);
            }
            file_put_contents($log_filename, "$type  ".date('Y-m-d H:i:s')."\n\r".$log_content."\n\r",
                FILE_APPEND);
        }
    }

     

    output_query.php,输出query.xml的内容

    <?php
    @header('Content-type: text/plain;charset=UTF-8');
    $filepath = './query.xml';
    readfile($filepath);


    output_log.php,输出log.xml的内容。

    <?php
    @header('Content-type: text/plain;charset=UTF-8');
    $filepath = './log.xml';
    readfile($filepath);


    是不是非常简单,然后我们开始写处理消息index.php

    <?php
    //设置时区
    date_default_timezone_set("Asia/Shanghai");
    //定义TOKEN常量,这里的"weixin"就是在公众号里配置的TOKEN
    define("TOKEN", "weixin");
    
    require_once("Utils.php");
    //打印请求的URL查询字符串到query.xml
    Utils::traceHttp();
    
    $wechatObj = new wechatCallBackapiTest();
    /**
     * 如果有"echostr"字段,说明是一个URL验证请求,
     * 否则是微信用户发过来的信息
     */
    if (isset($_GET["echostr"])){
        $wechatObj->valid();
    }else {
        $wechatObj->responseMsg();
    }
    
    class wechatCallBackapiTest
    {
        /**
         * 用于微信公众号里填写的URL的验证,
         * 如果合格则直接将"echostr"字段原样返回
         */
        public function valid()
        {
            $echoStr = $_GET["echostr"];
            if ($this->checkSignature()){
                echo $echoStr;
                exit;
            }
        }
    
        /**
         * 用于验证是否是微信服务器发来的消息
         * @return bool
         */
        private function checkSignature()
        {
            $signature = $_GET["signature"];
            $timestamp = $_GET["timestamp"];
            $nonce = $_GET["nonce"];
    
            $token = TOKEN;
            $tmpArr = array($token, $timestamp, $nonce);
            sort($tmpArr);
            $tmpStr = implode($tmpArr);
            $tmpStr = sha1($tmpStr);
    
            if ($tmpStr == $signature){
                return true;
            }else {
                return false;
            }
        }
    
        /**
         * 响应用户发来的消息
         */
        public function responseMsg()
        {
            //获取post过来的数据,它一个XML格式的数据
            $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
            //将数据打印到log.xml
            Utils::logger($postStr);
            if (!empty($postStr)){
                //将XML数据解析为一个对象
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $RX_TYPE = trim($postObj->MsgType);
                //消息类型分离
                switch($RX_TYPE){
                    case "event":
                        $result = $this->receiveEvent($postObj);
                        break;
                    default:
                        $result = "unknow msg type:".$RX_TYPE;
                        break;
                }
                //打印输出的数据到log.xml
                Utils::logger($result, '公众号');
                echo $result;
            }else{
                echo "";
                exit;
            }
        }
    
        /**
         * 接收事件消息
         */
        private function receiveEvent($object)
        {
            switch ($object->Event){
                //关注公众号事件
                case "subscribe":
                    $content = "欢迎关注微微一笑很倾城";
                    break;
                default:
                    $content = "";
                    break;
            }
            $result = $this->transmitText($object, $content);
            return $result;
        }
    
        /**
         * 回复文本消息
         */
        private function transmitText($object, $content)
        {
            $xmlTpl = "<xml>
        <ToUserName><![CDATA[%s]]></ToUserName>
        <FromUserName><![CDATA[%s]]></FromUserName>
        <CreateTime><![CDATA[%s]]></CreateTime>
        <MsgType><![CDATA[text]]></MsgType>
        <Content><![CDATA[%s]]></Content>
    </xml>";
            $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), $content);
            return $result;
        }
    }


    这几个文件写好之后,直接通过git push到BAE上,如果设置了快捷发布,过1、2秒钟就会自动发布了,状态里面会显示绿色的"正常",如果没有设置快捷发布,上传代码后需要手动点击右边的快捷发布按钮。

     

    这时我们就可以点击测试号界面里面的那个提交按钮了。

     

     

    如果配置正确,则会提示配置成功。

     

    4、调试

    在浏览器地址栏上输入,xxx/output_query.php,xxx是你的域名。则会出现你点击提交后发送过来的请求,类似如下

     

     

    可以看到该查询字符串有4个字段

    • signature:微信加密签名
    • echostr:随机字符串
    • timestamp:时间戳
    • nonce:随机数

    只有在验证URL的时候查询字符串中才会有“echostr”这个字段,验证的方法是

    1. 将token、timestamp、nonce三个参数进行字典序排序
    2. 将三个参数字符串拼接成一个字符串进行sha1加密
    3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

     

    验证通过之后,我们可以用微信扫一扫,扫描测试号里面的公众号二维码,关注该公众号,关注之后,公众号列表会显示出关注者的列表。

     

    此时微信应该会回复一条文本消息,也就是以上在index.php中设置的“欢迎关注XXX”。

     

    这时我们重新刷新一下xxx/output_query.php,发现没有“echostr”这个字段了,因为这个是用户发来的消息,而不是验证URL的消息。多出来的openid字段是用户的微信号,如果采用的是加密模式,还会有encrypt_type和msg_signature等字段。测试号只有明文模式。

    接着我们重新打开一个标签,访问XXX/log.xml,查看发送的post数据,下面是一个关注公众号的事件,和我们返回给微信的XML数据。

     

    现在不比纠结这些数据格式的问题,以后我们会提到,这样我们的微信公众号开发就准备好了,记得把这两个日志URL保存为浏览器的标签方便下次访问,以后调试只要F5一下就可以了,是不是比微信提供的在线调试容易多了。

    注意:必须在5秒内响应微信的服务器,否则会导致重传或者报错

     

    下一章我们将会尝试微信的基本消息接口,那时候就会理解这些数据结构了。

    相关博客

    微信公众号开发(一)服务器及接口的配置

    微信公众号开发(二)基础接口

    微信公众号开发(三)获取access_token

    微信公众号开发(四)自定义菜单

    微信公众号开发(五)个性化菜单

    微信公众号开发(六)素材管理

    微信公众号开发(七)发送客服消息

    微信公众号开发(八)用户管理

    微信公众号开发(九)群发消息接口

    微信公众号开发(十)模板消息

    微信公众号开发(十一)生成带参数二维码

    微信公众号开发(十二)OAuth2.0网页授权

    展开全文
  • 最近在做微信公众号的开发,有个下载发票pdf文件的功能,这个pdf文件在服务器上,需要下载到手机本地,处理流程是,页面列表里每项都有一个下载按钮,点击下载按钮,跳到新的下载页面,下载页面代码如下: ...

    最近在做微信公众号的开发,有个下载发票pdf文件的功能,这个pdf文件在服务器上,需要下载到手机本地,处理流程是,页面列表里每项都有一个下载按钮,点击下载按钮,跳到新的下载页面,下载页面代码如下:

    <body>
    <a id="path" href="" ><span id="spanId">下一步</span></a>
    <script type="text/javascript">
    require(['jquery','common'], function($){
    $("#path").attr("href","${billPath}");
    $("#spanId").click();
    });
    </script>
    </body>

    开发期间走了不少弯路,例如当时只认为有<a id="down" href=""></a>然后js控制自动触发$("#down").click();就行了

    事实证明,不可以用,我以为js写错了,换成:$("#down").trigger("click");还是不行,以为自动执行顺序错了,没加载完就执行了,又换了onload方法,

    最后看到一个大神写的简单的帖子,<a>里面加<span>标签,触发<span>的click事件,特此小记,感谢大神

    展开全文
  • 微信开发时,把本机的服务映射到外网。这样就可以很容易的完成调试。 具体步骤如下:下载 natapp客户端 https://natapp.cn/注册账号获取token运行客户端 natapp -authtoken=xxxx出现下图表示成功 附:还有...
  • 直接一点哈,用的是Java开发的、SpringMvc。自己只是把自己遇到的东西 写下来 ,方便以后查看,大家也可以了解一下。有什么问题可以一起探讨! 如果启用“开发者中心”,则微信公众平台本身的自动回复,自定义菜单则...
  • 首先,比如微信二次开发,可以用java或者php 来做服务器端语言来进行二次开发,那小程序呢?文档写着.js负责业务逻辑,难道服务器端就是纯JS实现? 包括对数据库的操作吗? 还是也可以用php?其实文档中在request...
  • 昨天跟一个朋友吃饭,谈到微信公众号的事情,说到帮他做一个微信公众号,于是今天在折腾这个,在微信页面添加服务器配置之后,点提交,自己搭建的web服务器收到了微信转发过来的请求,然后按要求返回传过来的随机...
  • 说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家...在这里可以通过微信渠道将品牌推广给上亿的微信用户,减少宣传成本,提高品牌知名度,打造更具影响力的品牌形象。 3. 公众平台 微信公众平...
  • 下图是配置完成后的样子,后面给大家详细介绍每一步的步骤:下图为微信公众号开发验证机制:由用户发送请求给微信服务器,微信服务器根据地址URL访问请求个人开发服务器,然后个人开发服务器响应返回给微信服务器(其中有...
  • 由于项目需要微信公众号的开发,弄了老半天,发现也不是那么难弄。对于微信公众号开发,首先要有开发者权限然后进行基本的配置。登录进微信公众号平台,首页最下面有个基本配置:进入基本配置后,会看到两个栏目,一...
  • 前期准备工作准备工具:Tomcat服务器,阿里云服务器Tomcat下载地址 阿里云服务器(云翼计划) 阿里云阿里云服务器购买:学生可以使用云翼计划购买阿里云服务器,平均一个月12块左右。正常阿里云购买一个月阿里云...
  • 微信用户发送微信消息给服务号的时候,消息先发送至微信服务器,然后微信服务器在把消息推送到公众号配置好的接口,第三方后台通过接口接收微信推送过来的消息,根据业务逻辑处理之后,在返回给微信服务器微信...
  • 微信公众号开发需要将项目运行在带有独立ip地址的主机上,可以选择内网穿透或者云服务器,我用的阿里云的服务器微信验证接入过程就是微信给你的服务器发送一个get请求,请求中携带signature、timestamp、nonce和...
  • 1.首先可以自行购买获取服务器,也可以在本地主机中设置虚拟机搭建服务器(这个方法没试过,但在设想中我认为是可行的,后续会自己尝试一下再发布),这里我购买的是腾讯云服务器Ubuntu16.04 64位版本。 2.推荐使用...
  •  各位肯定都知道,做微信开发,我们的开发服务器需要和微信服务器做交互,我们需要准备一台放置在公网的服务器,能够使得我们的服务器可以正常访问微信服务器,并且微信服务器也需要可以正常访问我们的开发服务器。...
  • 微信开发服务器主动发送微信消息,流程是自己的服务器向微信服务器发送消息请求,微信服务器接受请求后发消息给手机客户端。
  • 1 通过微信转发过来的用户请求在服务器端是否是消息排队机制,这个队列是否有长度限制? 2 如果有长度限制,当用户请求数量超过该限制,服务器端是如何处理的?
  • 如果你只是简单使用微信公众号,发送推文等简单需求,你就不需要的配置自己的开发服务器微信公众号平台功能十分强大,不懂技术的用户也可以简单开发一个自己公众号。如果你有像成绩推送等需求,你就需要知道用户的...
  • 服务器URL配置 是微信公众号开发里非常重要的一个步骤。 虽然微信公众平台已经给了我们很多 必要的功能 像:查看用户,查看用户消息,给用户回复消息,自动给用户回复消息,根据用户消息内容回复给用户图文消息等...
1 2 3 4 5 ... 20
收藏数 97,704
精华内容 39,081
关键字:

微信开发没有服务器