微信公众号开发api_微信公众号开发教程api - CSDN
精华内容
参与话题
  • 微信公众号开发(一)服务器及接口的配置

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

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

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

     

    在开始微信号开发之前需要准备好两样东西,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网页授权

    展开全文
  • 微信公众号开发文档

    千次阅读 2019-02-19 17:24:07
    微信公众号开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=mp1445241432 微信小程序API开发文档:...

    微信公众号开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432

    微信小程序API开发文档:https://developers.weixin.qq.com/miniprogram/dev/api/network/download/wx.downloadFile.html

    微信小程序支付接口文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=3

    微信扫码支付文档:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=2_1

    微信委托代扣模式开发文档:https://pay.weixin.qq.com/wiki/doc/api/pap.php?chapter=17_2

    微信各种支付文档入口:https://pay.weixin.qq.com/wiki/doc/api/index.html

    微信小程序之获取并解密用户数据(获取openId、unionId)登录功能:https://my.oschina.net/magicalSam/blog/832895#comment-list
    --------------------- 
    作者:@能能 
    来源:CSDN 
    原文:https://blog.csdn.net/qq_41971087/article/details/82466647 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 微信公众号开发框架 For Java 微信公共平台API。 功能列表 公共API 发送客服消息(文本、图片、语音、视频、音乐、图文) 菜单操作(查询、创建、删除、个性化菜单) 二维码(创建临时、永久二维码,查看二维码URL...

    微信公众号开发框架 For Java

    微信公共平台API。

    功能列表

    • 公共API
    • 发送客服消息(文本、图片、语音、视频、音乐、图文)
    • 菜单操作(查询、创建、删除、个性化菜单)
    • 二维码(创建临时、永久二维码,查看二维码URL)
    • 分组操作(查询、创建、修改、移动用户到分组)
    • 用户信息(查询用户基本信息、获取关注者列表)
    • 媒体文件(上传、获取)
    • 群发消息(文本、图片、语音、视频、图文)
    • 客服记录(查询客服记录,查看客服、查看在线客服)
    • 公众号支付(发货通知、订单查询)
    • 微信小店(商品管理、库存管理、邮费模板管理、分组管理、货架管理、订单管理、功能接口)
    • 模版消息
    • 网址缩短
    • 语义查询
    • 数据分析
    • JSSDK服务端支持
    • 素材管理
    • 摇一摇周边
    • 卡劵管理
    • 小程序

    Git

    https://github.com/muzin/wechatapi

    详细文档:
    https://github.com/muzin/wechatapi/blob/master/ReadMe.md

    Installtion

    需手动在项目中加入如下jar:

    // 需引入以下 jar 包
    
    // https://mvnrepository.com/artifact/com.google.code.gson/gson
    compile group: 'com.google.code.gson', name: 'gson', version: '2.8.2'
    
    // https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient
    compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.6'
    
    // https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime
    compile group: 'org.apache.httpcomponents', name: 'httpmime', version: '4.5.6'
    
    

    组建jar包后,将jar包放入项目下,
    在build.gradle的repositoriesdependencies加入如下代码:

    repositories {
         flatDir {  dirs 'lib' }     //   lib 代表存放jar包的目录
    }
    
    dependencies {
        compile group: 'com.fangle', name:"wechatapi", version:'1.0.0'
    }
    
    

    组建jar

    gradle jar
    

    或者,使用idea中gradle可视化工具组建

    Usage

    import com.fangle.WechatAPI;
    
    WechatAPI api = new WechatAPI(appid, appsecret);
    

    多进程

    当多进程时,token需要全局维护,以下为保存token的接口:

    WechatAPI api = new WechatAPI(appid, appsecret, new TokenStorageResolver() {
    
        /**
         * 获取token
         * 程序内部将通过此方法获取token
         */
        @Override
        public AccessToken getToken() {
            AccessToken token = 从文件、redis等渠道获取保存的accessToken
            return token;
        }
        
        /**
         * 保存token
         * 程序内部每次更新accessToken时,将会通知此方法
         * 在此时将accessToken持久化
         */
        @Override
        public void saveToken(AccessToken accessToken) {
            // code...
            // 保存到文件、redis等渠道
        }
    });
    
    

    Demo

    public WechatAPI wechatAPI = new WechatAPI("appid", "appsecret");
    
    // or
    
    WechatAPI api = new WechatAPI(appid, appsecret, new TokenStorageResolver() {
    
       /**
        * 获取token
        * 程序内部将通过此方法获取token
        */
       @Override
       public AccessToken getToken() {
       	// ... code  ...
       	String tokenStr = 从文件、redis等渠道获取保存的accessToken
       	JsonParser jsonParser = new JsonParser();
       	JsonObject token = jsonParser.parse(tokenStr);
           AccessToken token = new AccessToken(token.accessToken, token.expire_in)
           return token;
       }
       
       /**
        * 保存token
        * 程序内部每次更新accessToken时,将会通知此方法
        * 在此时将accessToken持久化
        */
       @Override
       public void saveToken(AccessToken accessToken) {
           // code...
       	Map<String, Object> token = new HashMap<String, Object>();
       	token.put("accessToken", accessToken.getAccessToken());
       	token.put("expire_in", accessToken.getExpireTime());
       	Gson gson = new Gson();
       	String tokenStr = gson.toString(token)
           // 将 tokenStr 保存到文件、redis等渠道
       }
    });
    

    调用业务函数

    public WechatAPI wechatAPI = new WechatAPI("appid", "appsecret");
    
    // 获取用户信息
    wechatAPI.getUser("openid");
    
    // 获取微信服务器IP
    wechatAPI.getIp("openid");
    
    展开全文
  • 2.按照上篇文章,先成功接入微信接口 3.由于winxin4j使用redis进行缓存Token,所以请先配置springboot+redis的集成,它的access_token每2小时变换一次。 1)启动redis,连接radis 2)配置项目中的redis信息 导入依赖...

    1.新建Module wechat
    在这里插入图片描述
    2.按照上篇文章,先成功接入微信接口
    3.由于winxin4j使用redis进行缓存Token,所以请先配置springboot+redis的集成,它的access_token每2小时变换一次。

    1)启动redis,连接radis
    2)配置项目中的redis信息

    导入依赖到pom.xml文件

    	 <!--引入redis的依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
    

    新建radis包,和RedisConfig.java类

    package com.springboot.wechat.redis;
    
    
    import org.springframework.cache.annotation.CachingConfigurerSupport;
    import org.springframework.cache.annotation.EnableCaching;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.core.StringRedisTemplate;
    
    /**
     * redis配置类
     **/
    @Configuration
    @EnableCaching//开启注解式缓存
    //继承CachingConfigurerSupport,为了自定义生成KEY的策略。可以不继承。
    public class RedisConfig extends CachingConfigurerSupport {
    
        @Bean
        public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) {
            StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
            stringRedisTemplate.setConnectionFactory(factory);
            return stringRedisTemplate;
        }
    
    }
    

    weixin4j.properties

    #微信SDK配置文件
    #读取规则:优先读取System.getProperty()
    #再从weixin4j.properties读取,key
    #如果System.getProperty()与weixin4j.properties都没设置,则默认未NULL
    
    #开发者调试设置
    weixin4j.debug=true
    #公众号Token
    weixin4j.token=myToken
    
    #公众号原始ID
    weixin4j.oauth.originalid=gh_da433f9665e5
    #开发者第三方用户唯一凭证
    weixin4j.oauth.appid=wx2086f4cf7d2a0274
    #开发者第三方用户唯一凭证密钥
    weixin4j.oauth.secret=57f0ea52a5fdb7a93c5babc2a452d438
    
    
    #消息加密方式 0:明文模式(默认), 1:兼容模式, 2:安全模式(推荐)
    weixin4j.oauth.encodingtype=0
    #消息加密密钥(43位字符组成A-Za-z0-9)
    weixin4j.oauth.encodingaeskey=0123456789abcedfghijklmnopqrstuvwxyzZXCVBNM
    #网页安全授权URL
    weixin4j.oauth.url=
    
    #公众平台接口域名
    #通用域名(api.weixin.qq.com),使用该域名将访问官方指定就近的接入点;
    #上海域名(sh.api.weixin.qq.com),使用该域名将访问上海的接入点;
    #深圳域名(sz.api.weixin.qq.com),使用该域名将访问深圳的接入点;
    #香港域名(hk.api.weixin.qq.com),使用该域名将访问香港的接入点。
    weixin4j.api.domain=api.weixin.qq.com
    
    #微信支付_商户ID
    weixin4j.pay.partner.id=
    #微信支付_商户密钥
    weixin4j.pay.partner.key=
    #微信支付_通知URL
    weixin4j.pay.notify_url=
    
    #连接超时设置
    weixin4j.http.connectionTimeout=25000
    #请求超时设置
    weixin4j.http.readTimeout=25000
    #证书路径
    weixin4j.http.cert.path=
    weixin4j.http.cert.secret=
    
    #默认消息处理函数
    weixin4j.handler=org.weixin4j.spi.DefaultMessageHandler
    #weixin4j.message.handler.normal=org.weixin4j.spi.DefaultNormalMessageHandler
    #weixin4j.message.handler.event=org.weixin4j.spi.DefaultEventMessageHandler
    
    weixin4j.message.handler.normal=com.springboot.wechat.weixin.MyAtsNormalMessageHandler
    weixin4j.message.handler.event=com.springboot.wechat.weixin.MyAtsEventMessageHandler
    
    
    

    在这里插入图片描述
    在这里插入图片描述
    application.properties

    server.port=80
    
    
    
    spring.datasource.username=root
    spring.datasource.password=
    spring.datasource.url=jdbc:mysql://localhost:3306/quartz?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    
    
    #指定HttpServletRequest的属性是否可以覆盖controller的model的同名项
    spring.freemarker.allow-request-override=false
    #req访问request
    spring.freemarker.request-context-attribute=req
    #后缀名freemarker默认后缀为.ftl,当然你也可以改成自己习惯的.html
    spring.freemarker.suffix=.ftl
    #设置响应的内容类型
    spring.freemarker.content-type=text/html;charset=utf-8
    #是否允许mvc使用freemarker
    spring.freemarker.enabled=true
    #是否开启template caching
    spring.freemarker.cache=false
    #设定模板的加载路径,多个以逗号分隔,默认: [“classpath:/templates/”]
    spring.freemarker.template-loader-path=classpath:/templates/
    #设定Template的编码
    spring.freemarker.charset=UTF-8
    #数字格式化,无小数点
    spring.freemarker.number_format=0.##
    
    
    # REDIS (RedisProperties)
    # Redis数据库索引(默认为0)
    spring.redis.database=0
    # Redis服务器地址
    spring.redis.host=192.168.110.128
    # Redis服务器连接端口
    spring.redis.port=6379
    # 连接池最大连接数(使用负值表示没有限制)
    spring.redis.jedis.pool.max-active=8
    # 连接池最大阻塞等待时间(使用负值表示没有限制)
    spring.redis.jedis.pool.max-wait=-1
    # 连接池中的最大空闲连接
    spring.redis.lettuce.pool.max-idle=8
    # 连接池中的最小空闲连接
    spring.redis.jedis.pool.min-idle=0
    # 连接超时时间(毫秒)
    spring.redis.timeout=5000
    

    在这里插入图片描述
    打开redis的服务,输入命令查询
    在这里插入图片描述
    如果能够查询到该键,说明键已经存入

    项目结构图
    在这里插入图片描述

    容易报错的地方:
    ①配置文件没有修改本机的ipconfig,不能查询到access_token
    ②jar包下载有问题,工厂不能实例化某些对象

    在这里插入图片描述
    修改URL重新提交时,如若配置失败,可能时natapp的穿透网络的问题,不影响访问
    在这里插入图片描述
    关注公众号的样本
    在这里插入图片描述
    在这里插入图片描述
    案例的完整代码:https://download.csdn.net/download/zeal9s/10811324
    说在最后的话:编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~

    展开全文
  • 微信公众号开发之分享接口实现

    万次阅读 2018-07-10 18:08:21
    微信公众号开发之分享接口实现第一步:先登录微信公众平台设置JS接口安全域名("域名不能包含http://")。如图:第二步:配置config接口权限验证首先需要通过access_token 采用http GET方式请求获得jsapi_...
  • android跳转微信指定公众号界面

    万次阅读 2016-12-01 14:41:03
    android跳转微信指定公众号界面注:跳转到微信公众号,首先需要到微信开发平台,绑定对应的公众号String appId = "你的ID";//开发者平台ID IWXAPI api = WXAPIFactory.createWXAPI(getActivity(), appId, false); ...
  • 微信公众号Unauthorized API function

    千次阅读 2016-10-16 19:16:56
    微信公众号Unauthorized API function
  • **微信公众号开发 Face++人脸识别, 简单接口,大神可绕路~**
  • Android跳转到微信公众号

    万次阅读 2016-07-01 14:43:39
    Android跳转到微信公众号
  • 微信公众号开发--获取用户信息中文乱码的解决方案,获取自定义菜单中文乱码解决方案
  • 微信公众号是另一家公司运营管理,现在我们需要在公众号加个功能菜单,该功能菜单需要获取当前用户信息,我们平台能不能部署在2级域名的地址上?从而连接微信的api接口
  • android开发如何实现一键关注微信公众号功能,微信有提供api吗? 求大神指导。。谢谢
  • 微信公众号支付(PHP完全版)

    万次阅读 2018-08-17 14:49:31
    1.前期准备工作:取得微信公众号的appId、secret、微信商户的商户id、支付key 下载好微信官方提供的sdk:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 下载好微信商户平台的API安全证书:...
  • 判断用户是否已关注微信公众号

    万次阅读 2017-10-19 15:47:14
    后来才发现这些用户没有关注公众号。所以需要判断该用户是否关注了公众号再推送。访问下面的URL就可以判断https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid."&lang=zh...
  • # 内置腾讯地图可以标记多个自己定义的位置吗?请求各位大神帮忙,如有做过此类功能麻烦解答
  • 微信公众号微信网页调用摄像头录制视频,不想用input方法。 找了很久找到了腾讯优图.活体检测示例(http://open.youtu.qq.com/h5_ctl/living_detect),这里面采用的是WeixinJSBridge.invoke,关键是它能限制录制...
  • 本人刚刚开始学习微信公众号开发,想要实现点击按钮后群发一段图文并茂的文本,可是实现了之后才发现: {"articles":[ {"author":"","content":"欢迎 Welcome!&...
  • 下载微信开发者工具 https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 下载好后界面如下: 二.在命令行运行项目,npm run dev 三.在上张图片的红框内输入项目URL地址,如:...
  • 微信公众号中增加地图位置标识

    万次阅读 2017-04-17 11:32:37
    对于地图标识,首先想到用百度地图,但是百度地图的展示效果不好,而且还有提示下载百度地图。 于是开始尝试腾讯地图,毕竟是一家公司的,应该...尝试使用api测试: http://apis.map.qq.com/uri/v1/marker?marker=
  • 微信公众号开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=mp1445241432 微信小程序API开发文档:...
1 2 3 4 5 ... 20
收藏数 38,893
精华内容 15,557
关键字:

微信公众号开发api