微信开放JS-SDK,助理网页开发
微信公众平台面向开发者开放微信内网页开发工具包(微信JS-SDK)
JS-SDK这个工具包提供了以下 11 类的接口集,开发者从今天开始可以调用以下功能,让基于微信的Web-App 提供更好的体验给用户。
- 分享类接口;
- 图像类接口;
- 音频类接口;
- 智能类接口;
- 设备信息类接口;
- 地理位置类接口;
- 界面操作类接口;
- 微信扫一扫接口;
- 微信小店接口;
- 微信卡券接口;
- 微信支付接口;
这些接口中,除了图像类接口和地理位置类接口中的部分功能,其他大多数本身就是微信才有的功能,无法靠标准浏览器提供的接口获得。所以有了这个 JS-SDK,今后基于微信的 Web-App 能提供给用户的功能一下子变多了起来:语音聊天、识别语音转成文字、跳转到指定的微信小店商品页购买并和客服沟通、调起微信卡包等。这对舍弃原生 App,专注做基于微信的 H5 Web-App 的开发者来说是极大的利好。
另外,这些接口集所提供的功能甚至足够开发者做出一个“只能在微信内使用的网页版微信”了
微信开发JS-SDK的步骤
1.注册微信平台账号。
需要注册微信平台账号,然后去获取相应的权限。
https://mp.weixin.qq.com/
注册账号需要一个审核期,审核期过了之后可以继续使用。点击开发者中心,获得应用ID(AppID),应用秘钥(AppSecret)。这里会有不完全显示,如果想完全显示,点击“完整显示”,按照相应的提示进行操作即可。
2. 绑定域名。
登陆进微信公众平台,点击"设置" -->"公众号设置" 下的 "功能设置" ,设置JS接口安全域名,可以填写3个域名,需要注意的是这个域名必须是备案过后的域名。
3.下载官方的JS-SDK。
登陆进微信公众平台,点击"开发者文档", 选择微信公众平台开发者文档下的 “微信 JS-SDK” 。第一种引入方式 在需要调用JS接口的页面引入如下JS文件,(支持https):
http://res.wx.qq.com/open/js/jweixin-1.0.0.js
第二种引入方式 打开以上的js文件,保存到本地。
因为没有通过微信认证,这里没办法进行"分享内容到朋友","分享内容到朋友圈"等功能的讲解,这里讲解基本基础接口"判断当前客户端版本是否支持指定JS接口" , 可以根据需求获取相应的权限。
微信验证代码入下。
1 import java.util.UUID; 2 import java.util.Map; 3 import java.util.HashMap; 4 import java.util.Formatter; 5 import java.security.MessageDigest; 6 import java.security.NoSuchAlgorithmException; 7 import java.io.UnsupportedEncodingException; 8 9 class Sign { 10 public static void main(String[] args) { 11 String jsapi_ticket = "jsapi_ticket"; 12 13 // 注意 URL 一定要动态获取,不能 hardcode 14 String url = "http://example.com"; 15 Map<String, String> ret = sign(jsapi_ticket, url); 16 for (Map.Entry entry : ret.entrySet()) { 17 System.out.println(entry.getKey() + ", " + entry.getValue()); 18 } 19 }; 20 21 public static Map<String, String> sign(String jsapi_ticket, String url) { 22 Map<String, String> ret = new HashMap<String, String>(); 23 String nonce_str = create_nonce_str(); 24 String timestamp = create_timestamp(); 25 String string1; 26 String signature = ""; 27 28 //注意这里参数名必须全部小写,且必须有序 29 string1 = "jsapi_ticket=" + jsapi_ticket + 30 "&noncestr=" + nonce_str + 31 "×tamp=" + timestamp + 32 "&url=" + url; 33 System.out.println(string1); 34 35 try 36 { 37 MessageDigest crypt = MessageDigest.getInstance("SHA-1"); 38 crypt.reset(); 39 crypt.update(string1.getBytes("UTF-8")); 40 signature = byteToHex(crypt.digest()); 41 } 42 catch (NoSuchAlgorithmException e) 43 { 44 e.printStackTrace(); 45 } 46 catch (UnsupportedEncodingException e) 47 { 48 e.printStackTrace(); 49 } 50 51 ret.put("url", url); 52 ret.put("jsapi_ticket", jsapi_ticket); 53 ret.put("nonceStr", nonce_str); 54 ret.put("timestamp", timestamp); 55 ret.put("signature", signature); 56 57 return ret; 58 } 59 60 private static String byteToHex(final byte[] hash) { 61 Formatter formatter = new Formatter(); 62 for (byte b : hash) 63 { 64 formatter.format("%02x", b); 65 } 66 String result = formatter.toString(); 67 formatter.close(); 68 return result; 69 } 70 71 private static String create_nonce_str() { 72 return UUID.randomUUID().toString(); 73 } 74 75 private static String create_timestamp() { 76 return Long.toString(System.currentTimeMillis() / 1000); 77 } 78 }