• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >微信公众号 > 详解微信开发模式之自定义菜单实现代码

详解微信开发模式之自定义菜单实现代码

作者:匿名 字体:[增加 减小] 来源:互联网

匿名通过本文主要向大家介绍了微信开发等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
最近有做了关于微信公众号和自己网站用户进行用户关联授权登录的一个功能,主要是用户关注该公众号,点击会员中心,则会弹出需要关联授权的网页授权:OAuth2.0网页授权,然后用户同意获取用户信息,进行用户和网站的关联,然后用户则可以使用微信进行登录。

本次做的是一个在Java的http:///java/java-Action.html" target="_blank">Action层处理各个返回参数获取数据。

一、 使用到的工具:

1、ngrok,将你自己的本机映射到公网,这样保证可以随时测试开发;

1、下载ngrok,网址:http://www.tunnel.mobi/

2、将文件放到Tomcat目录下,在cmd中运行ngrok -config ngrok.cfg -subdomain xinzhi 8080

3、ngrok工具为在慕课网@LAOBI 看到的

2、微信公众号测试账号,随时测试,首先保证在测试账号下没有问题后在进行公众号的移植。

二、使用到在Java中发送一个Http请求,然后返回JSON参数,获得JSON参数,然后进行处理。

首先,获取将公众号测试号放到properties文件中,以便我们进行调用或者更换,如:url请用https

Properties代码 收藏代码

AppID = wxf00**c3dd2ebfa0  
AppSecret = 3cb220755f****506dc35391aa5c03ec  
url = https://xinzhi.tunnel.mobi

这里url为我们映射到外网的地址,一会需要用到。然后需要两个工具类,该工具类作用是在Java的Action中发送http请求后获取到去返回值

启用自己有相应的改动,以适应本项目的需求:

WeixinUtil.java 和 MyX509TrustManager.java

Java代码 收藏代码

package com.zhtx.common.util;  
import java.io.BufferedReader;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import java.io.OutputStream;  
import java.net.ConnectException;  
import java.net.URL;  
import javax.net.ssl.HttpsURLConnection;  
import javax.net.ssl.SSLContext;  
import javax.net.ssl.SSLSocketFactory;  
import javax.net.ssl.TrustManager;  
import org.slf4j.Logger;  
import org.slf4j.LoggerFactory;  
/**
 * 公众平台通用接口工具类
 * 
 * @author xinz
 * @date 2015-10-14
 */
public class WeixinUtil {  
    private static Logger log = LoggerFactory.getLogger(WeixinUtil.class);  
    /**
     * 发起https请求并获取结果
     * 
     * @param requestUrl 请求地址
     * @param requestMethod 请求方式(GET、POST)
     * @param outputStr 提交的数据
     * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
     */
    public static String httpRequest(String requestUrl, String requestMethod, String outputStr) {  
        StringBuffer buffer = new StringBuffer();  
        try {  
            // 创建SSLContext对象,并使用我们指定的信任管理器初始化
            TrustManager[] tm = { new MyX509TrustManager() };  
            SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");  
            sslContext.init(null, tm, new java.security.SecureRandom());  
            // 从上述SSLContext对象中得到SSLSocketFactory对象
            SSLSocketFactory ssf = sslContext.getSocketFactory();  
            URL url = new URL(requestUrl);  
            HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();  
            httpUrlConn.setSSLSocketFactory(ssf);  
            httpUrlConn.setDoOutput(true);  
            httpUrlConn.setDoInput(true);  
            httpUrlConn.setUseCaches(false);  
            // 设置请求方式(GET/POST)
            httpUrlConn.setRequestMethod(requestMethod);  
            if ("GET".equalsIgnoreCase(requestMethod))  
                httpUrlConn.connect();  
            // 当有数据需要提交时
            if (null != outputStr) {  
                OutputStream outputStream = httpUrlConn.getOutputStream();  
                // 注意编码格式,防止中文乱码
                outputStream.write(outputStr.getBytes("UTF-8"));  
                outputStream.close();  
            }  
            // 将返回的输入流转换成字符串
            InputStream inputStream = httpUrlConn.getInputStream();  
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");  
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  
            String str = null;  
            while ((str = bufferedReader.readLine()) != null) {  
                buffer.append(str);  
            }  
            bufferedReader.close();  
            inputStreamReader.close();  
            // 释放资源
            inputStream.close();  
            inputStream = null;  
            httpUrlConn.disconnect();  
        } catch (ConnectException ce) {  
            log.error("Weixin server connection timed out.");  
        } catch (Exception e) {  
            log.error("https request error:{}", e);  
        }  
        return buffer.toString();  
    }  
}

对于https请求,我们需要一个证书信任管理器,这个管理器类需要自己定义,但需要实现X509TrustManager接口,代码如下:

Java代码 收藏代码

package com.zhtx.common.util;  
import java.security.cert.CertificateException;  
import java.security.cert.X509Certificate;  
import javax.net.ssl.X509TrustManager;  
/**
 * 证书信任管理器(用于https请求)
 * 
 * @author xinz
 * @date 2015-10-14
 */
public class MyX509TrustManager implements X509TrustManager {  
    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {  
    }  
    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {  
    }  
    public X509Certificate[] getAcceptedIssuers() {  
        return null;  
    }  
}

微信返回参数的一个POJO类:

Java代码 收藏代码

private String  openid;  //用户的唯一标识 
private String  nickname;//用户昵称 
private Integer sex;// 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知 
private String  province;//用户个人资料填写的省份 
private String  city;//普通用户个人资料填写的城市 
private String  country;// 国家,如中国为CN 
private String  headimgurl;  // 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。 
private String  privilege;// 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom) 
private String  unionid;// 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。详见:获取用户个人信息(UnionID机制) 
private String access_token;

授权凭证验证的类:

Java代码 收藏代码

private String errcode;  
private String errmsg;

通过code换取网页授权access_token

Java代码 收藏代码

private String access_token;  
private String expires_in;  
private String refresh_token;  
private String openid;  
private String sc



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 微信公众平台开发功能整合
  • 微信开发中服务号的详细介绍
  • 微信公众平台开发教程(四) 实例入门:机器人
  • 微信支付验证或签名失败是什么原因?附三种解决方案
  • 微信二次开发之各类型消息封装
  • 关于WeUI的10篇文章推荐
  • C#开发微信门户及应用-微信多客服功能及开发集成
  • ASP.NET实现微信抢红包代码实例
  • 怎么创建微信公众号自定义菜单栏?这里给出了权威解答
  • 教你如何用JS和JAVA 判断是否是微信浏览器

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 微信小游戏基于微信开发工具入门讲解
    • 微信公众平台消息接口开发图片识别之人脸识别
    • 微信开发Emoji表情的实例教程
    • 微信公众平台开发--公交换乘
    • 微信开发之处理微信客户端发来的消息
    • 解析微信公众平台开发之发送图文消息.Net代码
    • 微信公众平台消息接口开发地理位置查询附近商家实例
    • 关于支付开发的文章推荐10篇
    • 微信公众平台开发微信支付
    • 微信实现分享链接的缩略图和标题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有