java微信开发---jsapi接口授权和解绑设备

本文详细介绍了微信JSAPI接口授权和解绑设备的步骤,包括关键的ticket值,提供了页面和后台的代码示例,适合正在开发微信硬件平台的开发者参考。文档阅读和相关QQ群支持是解决问题的重要途径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 在刚开始写关于微信jsapi的时候可以说是一窍不通
  • 资源又少幸好最终有笨笨大神帮忙终于搞定了
  • 于是我果断上传微博希望对大家开发微信有帮助

微信开发API文档是必看的

在api文档里面我们可以看到很多内容,然后需要我们去理解点击进微信硬件平台api[http://iot.weixin.qq.com/wiki/new/index.html?page=4-7.

例如

解绑设备 需要:

字段是否必须描述
access_token调用接口凭证
ticket绑定操作合法性的凭证(由微信后台生成,第三方H5通过客户端jsapi获得)
device_id设备id
openid用户对应的openid使用冒号来定义对齐方式

关于解绑设备里面的ticket 就是很关键的一个值了:
还是直接上代码吧!

页面代码块

代码块语法遵循标准markdown代码:

<html>
<script type="text/javascript"
src="${pageContext.request.contextPath}/js/jquery-1.2.6.pack.js">
</script>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js">
</script>

<button class="className" onclick="del()">解绑设备</button>

<script type="text/javascript">

var deviceId = "gh_62d23d084569_ced3197c64e6ce17";//设备ID测试可以先写死

//alert(location.href.split('#')[0]);//得到页面的地址用于后台的link

//config接口权限配置 这里在文档是有清晰的解释
wx.config( {
//都是从后台传过来的值

beta : true, // 开启内测接口调用,注入wx.invoke方法必填
debug : true, // 开启调试模式 必填
appId : '${config.appId}', // 第三方app唯一标识必填
timestamp : '${config.timestamp}', // 签名的时间戳必填
nonceStr : '${config.nonce}', // 生成签名的随机串必填
signature : '${config.signature}',//签名 必填
jsApiList : [
    //添加使用的函数
    'openWXDeviceLib', 'getWXDeviceTicket' ]
});

//ready权限验证
wx.ready(function() {
    wx.invoke('openWXDeviceLib', {}, function(res) {
        //alert(res.err_msg + "唯一");
        });
});
wx.error(function(res) {
    //alert("我是wx.error");
    });

//删除
function del() {
    if (confirm("确定要删除吗?") == false) {
        return false;
    } else {
        //获取的凭证
        wx.invoke('getWXDeviceTicket',{"deviceId" : deviceId,"type" : 2},function(res) {
        var ticket = res.ticket //就是要获取的凭证就是上面我说的解绑ticket值了
            alert(ticket + "获取的凭证了嘛");
        var url = "${pageContext.request.contextPath}/know.do?method=jiechu";//这里用ajax传到后台进行解绑操作
    $.post(url, {ticket : ticket}, function(data) {
                if (data != null) {
                    alert(ticket + "true");
                    alert("解绑成功");
                            }
                        });
                    });

    }

}
</script>
</html>

后台代码块

代码块语法遵循标准markdown代码:


    /**
     * 带签名等参数进解绑页面
     * 
     * @throws Exception
     */
    @RequestMapping(params = "method=unBind")
    public String unBind() throws Exception {
        JsAPIConfig config = Ticket
                .createConfig("http://upanupanupan.gicp.net/demo/sports.do?method=unBind");//得到解绑页面的地址
        request.setAttribute("config", config);
    return "/Unbound.jsp";
    }

/**
     * 获取jsTicket
     * 
     * @throws
     */
    public static String getTicket() {
        String ticket = null;
        // 有效期为7200秒
        String access_token = AccessTokenUtil.getTokenStr();
        System.out.println("得到access_token值:" + access_token);
        String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="
                + access_token + "&type=jsapi";
        try {
            HttpClient client = new DefaultHttpClient();
            HttpGet httpget = new HttpGet(url);
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            String response = client.execute(httpget, responseHandler);
            JSONObject userJSONO = JSONObject.fromObject(response);
            ticket = String.valueOf(userJSONO.get("ticket"));
            System.out.println("得到ticket值为::" + ticket);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return ticket;
    }



    /**
     * 生成JsAPIConfig 得到页面需要参数
     * 
     * @Title: createConfig
n: TODO
     * @param @param link 使用的AirKiss 链接地址
     * @param @return
     * @param @throws Exception
     * @return JsAPIConfig
     * @throws
     */
    public static JsAPIConfig createConfig(String link) throws Exception {
        JsAPIConfig config = new JsAPIConfig();
        config.setLink(link);//得到页面地址
        String nonce = UUID.randomUUID().toString();//得到生成签名的随机串
        String timestamp = Long.toString(System.currentTimeMillis() / 1000);//得到时间戳
        String src = "jsapi_ticket=" + Ticket.getTicket() + "&noncestr="
                + nonce + "&timestamp=" + timestamp + "&url="
                + config.getLink();
        String signature = SHA1.sha1(src);//根据以上的值得到签名

        String appId = WxConfig.APPID;
        config.setAppId(appId);
        config.setDebug(true);
        config.setNonce(nonce);
        config.setTimestamp(timestamp);
        config.setSignature(signature);

        System.out.println(config.getAppId() + "AppId来");
        System.out.println(config.getLink() + "Link来");
        System.out.println(config.getNonce() + "Nonce来");
        System.out.println(config.getTimestamp() + "Timestamp来");
    return config;      
}
/**
     * 排序并生成加密SHA1签名
     */
    public static String sha1(String src) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("SHA-1");

        // 将三个参数字符串拼接成一个字符串进行sha1加密
        byte[] digest = md.digest(src.getBytes());

        return byteToStr(digest);
    }

    /**
     * 将字节数组转换为十六进制字符串
     * 
     * @param byteArray
     * @return
     */
    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
     */
    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;
    }




//这里新建一个类,个人较懒就放在一起了
package com.bluelight.demo.util;
/**
 * 服务器端http请求工具类
 */
public class JsAPIConfig {

    private boolean debug;
    private String appId;
    private String timestamp;
    private String nonce;
    private String signature;
    private String title;
    private String link;
    private String signType;
    private String packageName;

    public JsAPIConfig() {
        signType = "MD5";
    }

    public boolean isDebug() {
        return debug;
    }

    public void setDebug(boolean debug) {
        this.debug = debug;
    }

    public String getAppId() {
        return appId;
    }

    public void setAppId(String appId) {
        this.appId = appId;
    }

    public String getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }

    public String getNonce() {
        return nonce;
    }

    public void setNonce(String nonce) {
        this.nonce = nonce;
    }

    public String getSignature() {
        return signature;
    }

    public void setSignature(String signature) {
        this.signature = signature;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getLink() {
        return link;
    }

    public void setLink(String link) {
        this.link = link;
    }

    public String getSignType() {
        return signType;
    }

    public void setSignType(String signType) {
        this.signType = signType;
    }

    public String getPackageName() {
        return packageName;
    }

    public void setPackageName(String packageName) {
        this.packageName = packageName;
    }

}

不懂可以去看文档或者找其他资料,或者加qq群(93472007)

目录

[TOC]来生成目录:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值