微信程序开发之微信接入篇

导读:本篇文章讲解 微信程序开发之微信接入篇,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

微信公众平台

微信程序开发之微信接入篇

订阅号:个人

服务号:    支付 : 公司-工商营业执照,个体户-工商营业执照

企业号:公司-工商营业执照

测试号: 拥有所有接口   测试号

进入  微信官方文档         微信公众号平台接口调试工具

图片当中的appid何secret填测试号信息里面的东西,然后我们点击检查问题的按钮就会生成一个密钥

我们创建完测试号之后是什么都没有的,只能发消息,没有菜单栏

请注意:

  1. 自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
  2. 一级菜单最多4个汉字,二级菜单最多8个汉字,多出来的部分将会以“…”代替。
  3. 创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。​自定义菜单接口可实现多种类型按钮,如下
  4. click:点击推事件用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;
  5. view:跳转URL用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息。
  6. scancode_push:扫码推事件用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后显示扫描结果(如果是URL,将进入URL),且会将扫码的结果传给开发者,开发者可以下发消息。
  7. scancode_waitmsg:扫码推事件且弹出“消息接收中”提示框用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后,将扫码的结果传给开发者,同时收起扫一扫工具,然后弹出“消息接收中”提示框,随后可能会收到开发者下发的消息。
  8. pic_sysphoto:弹出系统拍照发图用户点击按钮后,微信客户端将调起系统相机,完成拍照操作后,会将拍摄的相片发送给开发者,并推送事件给开发者,同时收起系统相机,随后可能会收到开发者下发的消息。
  9. pic_photo_or_album:弹出拍照或者相册发图用户点击按钮后,微信客户端将弹出选择器供用户选择“拍照”或者“从手机相册选择”。用户选择后即走其他两种流程。
  10. pic_weixin:弹出微信相册发图器用户点击按钮后,微信客户端将调起微信相册,完成选择操作后,将选择的相片发送给开发者的服务器,并推送事件给开发者,同时收起相册,随后可能会收到开发者下发的消息。
  11. location_select:弹出地理位置选择器用户点击按钮后,微信客户端将调起地理位置选择工具,完成选择操作后,将选择的地理位置发送给开发者的服务器,同时收起位置选择工具,随后可能会收到开发者下发的消息。
  12. media_id:下发消息(除文本消息)用户点击media_id类型按钮后,微信服务器会将开发者填写的永久素材id对应的素材下发给用户,永久素材类型可以是图片、音频、视频 、图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。
  13. article_id:用户点击 article_id 类型按钮后,微信客户端将会以卡片形式,下发开发者在按钮中填写的图文消息
  14. article_view_limited:类似 view_limited,但不使用 media_id 而使用 article_id
  15. 注意: 草稿接口灰度完成后,将不再支持图文信息类型的 media_id 和 view_limited,有需要的,请使用 article_id 和 article_view_limited 代替

    请注意,3到8的所有事件,仅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用户,旧版本微信用户点击后将没有回应,开发者也不能正常接收到事件推送。9~12,是专门给第三方平台旗下未微信认证(具体而言,是资质认证未通过)的订阅号准备的事件类型,它们是没有事件推送的,能力相对受限,其他类型的公众号不必使用。

    接口调用请求说明

    http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

 创建菜单

把接口类型改为  自定义菜单

接口列表改为   自定义菜单创建接口

access_token  这个令牌填我们之前生成的那个token令牌

body    就是我们要定义的菜单内容了

 body源码

{
    "button": [
        {
            "name": "扫码", 
            "sub_button": [
                {
                    "type": "scancode_waitmsg", 
                    "name": "扫码带提示", 
                    "key": "rselfmenu_0_0", 
                    "sub_button": [ ]
                }, 
                {
                    "type": "scancode_push", 
                    "name": "扫码推事件", 
                    "key": "rselfmenu_0_1", 
                    "sub_button": [ ]
                }
            ]
        }
    ]
}

微信程序开发之微信接入篇                                                                                                                                                                                                                                                 此时我们再去进行扫码就可以发现有菜单栏了

注注注!!!:创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果

内网穿透

natapp

微信程序开发之微信接入篇

 下载之后我们注册一个账号  并且还要进行实名认证

购买隧道  像我们当然是买免费的啦

微信程序开发之微信接入篇

 购买了之后会获得一个隧道,隧道中有一个authtoken,我们把authtoken拿出来就可以了

之后找到config.ini文件,去里面修改内容,把拿到的authtoken放入其中

#将本文件放置于natapp同级目录,程序将读取[default]段
#在命令行参数模式如natapp-authtoken=xxx 等相同参数将会覆盖此配置
#命令行参数 -config=可指定任意config.ini文件
[default]
authtoken=		#对应一条隧道的authtoken
clienttoken=			#对应客服端的clienttoken,将会忽略authtoken,若无请留空
log=none			#log日志文件,可指定本地文件,none=不做记录,stdout=直接屏幕输出,默认none
loglevel=ERROR		#日志等级DEBUG,INFO,WARNING,ERROR默认为DEBUG
http_proxy=			#代理设置 如http://10.123.10.10:3128 非代理上网用户请留空

之后在改文件目录地下输入cmd进入黑窗口,输入natapp.exe运行命令

微信程序开发之微信接入篇

 会得到以上结果(隐私就隐藏了)

打开idea运行已经写好的项目,目的就是为了打开8080的端口

微信程序开发之微信接入篇

 我们再访问之前的端口路径,此时已经能访问进去了

微信程序开发之微信接入篇

 再把端口路径放入接口配置信息中,后面还要加一个jieru关键字,因为在idea中,有一个关于微信的接入controller类

微信程序开发之微信接入篇

当中的token内容是与idea中的weixin4j.properties文件相关的,两者名字必须一样

微信程序开发之微信接入篇

 

 weixin4j.properties文件(为了隐私我把一些删了,大家填与自己对应的就行了)

#\u5FAE\u4FE1SDK\u914D\u7F6E\u6587\u4EF6
#\u8BFB\u53D6\u89C4\u5219\uFF1A\u4F18\u5148\u8BFB\u53D6System.getProperty()
#\u518D\u4ECEweixin4j.properties\u8BFB\u53D6,key
#\u5982\u679CSystem.getProperty()\u4E0Eweixin4j.properties\u90FD\u6CA1\u8BBE\u7F6E\uFF0C\u5219\u9ED8\u8BA4\u672ANULL
#\u5F00\u53D1\u8005\u8C03\u8BD5\u8BBE\u7F6E
weixin4j.debug=true
#\u516C\u4F17\u53F7Token
weixin4j.token=weixin4j
#\u516C\u4F17\u53F7\u539F\u59CBID
weixin4j.oauth.originalid=
#\u5F00\u53D1\u8005\u7B2C\u4E09\u65B9\u7528\u6237\u552F\u4E00\u51ED\u8BC1
weixin4j.oauth.appid=
#\u5F00\u53D1\u8005\u7B2C\u4E09\u65B9\u7528\u6237\u552F\u4E00\u51ED\u8BC1\u5BC6\u94A5
weixin4j.oauth.secret=
#\u6D88\u606F\u52A0\u5BC6\u65B9\u5F0F 0:\u660E\u6587\u6A21\u5F0F(\u9ED8\u8BA4), 1:\u517C\u5BB9\u6A21\u5F0F, 2:\u5B89\u5168\u6A21\u5F0F(\u63A8\u8350)
weixin4j.oauth.encodingtype=0
#\u6D88\u606F\u52A0\u5BC6\u5BC6\u94A5(43\u4F4D\u5B57\u7B26\u7EC4\u6210A-Za-z0-9)
weixin4j.oauth.encodingaeskey=
#\u7F51\u9875\u5B89\u5168\u6388\u6743URL
weixin4j.oauth.url=
#\u516C\u4F17\u5E73\u53F0\u63A5\u53E3\u57DF\u540D
#\u901A\u7528\u57DF\u540D(api.weixin.qq.com)\uFF0C\u4F7F\u7528\u8BE5\u57DF\u540D\u5C06\u8BBF\u95EE\u5B98\u65B9\u6307\u5B9A\u5C31\u8FD1\u7684\u63A5\u5165\u70B9\uFF1B
#\u4E0A\u6D77\u57DF\u540D(sh.api.weixin.qq.com)\uFF0C\u4F7F\u7528\u8BE5\u57DF\u540D\u5C06\u8BBF\u95EE\u4E0A\u6D77\u7684\u63A5\u5165\u70B9\uFF1B
#\u6DF1\u5733\u57DF\u540D(sz.api.weixin.qq.com)\uFF0C\u4F7F\u7528\u8BE5\u57DF\u540D\u5C06\u8BBF\u95EE\u6DF1\u5733\u7684\u63A5\u5165\u70B9\uFF1B
#\u9999\u6E2F\u57DF\u540D(hk.api.weixin.qq.com)\uFF0C\u4F7F\u7528\u8BE5\u57DF\u540D\u5C06\u8BBF\u95EE\u9999\u6E2F\u7684\u63A5\u5165\u70B9\u3002
weixin4j.api.domain=api.weixin.qq.com
#\u5FAE\u4FE1\u652F\u4ED8_\u5546\u6237ID
weixin4j.pay.partner.id=
#\u5FAE\u4FE1\u652F\u4ED8_\u5546\u6237\u5BC6\u94A5
weixin4j.pay.partner.key=
#\u5FAE\u4FE1\u652F\u4ED8_\u901A\u77E5URL
weixin4j.pay.notify_url=
#\u8FDE\u63A5\u8D85\u65F6\u8BBE\u7F6E
weixin4j.http.connectionTimeout=25000
#\u8BF7\u6C42\u8D85\u65F6\u8BBE\u7F6E
weixin4j.http.readTimeout=25000
#\u8BC1\u4E66\u8DEF\u5F84
weixin4j.http.cert.path=
weixin4j.http.cert.secret=
#\u9ED8\u8BA4\u6D88\u606F\u5904\u7406\u51FD\u6570
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.yk.wx.weixin.MyAtsNormalMessageHandler
weixin4j.message.handler.event=com.yk.wx.weixin.MyAtsEventMessageHandler

此依赖是用来连接微信的 

<dependency>
            <groupId>org.weixin4j.spring.boot</groupId>
            <artifactId>weixin4j-spring-boot-starter</artifactId>
            <version>1.0.0</version>
        </dependency>

再次扫码进入测试号,我们发送消息:Java

微信程序开发之微信接入篇

此时idea控制器中就会显示

 微信程序开发之微信接入篇

创建菜单

项目代码创建菜单

 

package com.yk.wx.controller;


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.weixin4j.Configuration;
import org.weixin4j.Weixin;
import org.weixin4j.component.MenuComponent;
import org.weixin4j.model.base.Token;
import org.weixin4j.model.menu.Menu;
import org.weixin4j.model.menu.SingleButton;
import org.weixin4j.model.menu.ViewButton;
import org.weixin4j.spring.WeixinTemplate;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/wx")
@Slf4j
@SuppressWarnings("all")
public class WeixinController {

    private WeixinTemplate weixinTemplate;

    @Autowired
    public WeixinController(WeixinTemplate weixinTemplate) {
        this.weixinTemplate = weixinTemplate;
    }

    public static void main(String[] args) throws Exception {
        Weixin weixin = new Weixin();
        weixin.base().token();
        Token token = weixin.getToken();
        System.out.println(token);
    }

    @RequestMapping("/createMenu")
    @ResponseBody
    public Map<String, Object> createMenu(Model model, HttpServletRequest request) {
        log.info("WeixinController.createMenu");
        String ctx = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
        log.info("ctx=" + ctx);
        Map<String, Object> jsonData = new HashMap<String, Object>();
        jsonData.put("code", 0);
        jsonData.put("message", "微信菜单创建成功,ts=" + System.currentTimeMillis());
        try {
            Menu menu = new Menu();
            //创建菜单按钮
            List<SingleButton> buttons = new ArrayList<SingleButton>();
            menu.setButton(buttons);
            SingleButton btn1 = new ViewButton("主界面", ctx + "/toMain");
            buttons.add(btn1);
            SingleButton btn2 = new ViewButton("更多", ctx + "/toHello");
            buttons.add(btn2);
            SingleButton btn3 = new ViewButton("还想要", ctx + "/toHello");
            buttons.add(btn3);
            //设置子菜单
            System.out.println(menu.toJSONObject().toString());
            //创建自定义菜单
            Weixin weixin = weixinTemplate.getWeixinFactory().getWeixin();
            MenuComponent menu1 = weixin.menu();
            menu1.create(menu);
            model.addAttribute("message", "微信菜单创建成功");
        } catch (Exception e) {
            log.error(e.getMessage());
            jsonData.put("code", -1);
            jsonData.put("message", "微信菜单创建失败,原因:" + e.getMessage());
        }
        return jsonData;
    }

    @RequestMapping("/test1")
    @ResponseBody
    public Map<String, Object> test1() {
        log.info("WeixinController.test1");
        Map<String, Object> jsonData = new HashMap<String, Object>();
        System.out.println("test");
        String s1 = Configuration.getProperty("weixin4j.message.handler.normal");
        String s2 = Configuration.getProperty("weixin4j.message.handler.event");
        jsonData.put("weixin4j.message.handler.normal", s1);
        jsonData.put("weixin4j.message.handler.event", s2);
        return jsonData;
    }

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/12180.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!