java微信js SDK页面签名
2015-07-12 13:27
981 查看
步骤一:绑定域名
先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。备注:登录后可在“开发者中心”查看对应的接口权限。
步骤二:引入JS文件
在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.jswx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: 'wxd11160e2fc3c7c58', // 必填,公众号的唯一标识 timestamp:1428481529, // 必填,生成签名的时间戳 nonceStr: '759e0b09-b5de-468f-abe6-1a666b502df7', // 必填,生成签名的随机串 signature: '5959b6fd18622a92a693311f727ded2dd5ec2da0',// 必填,签名,见附录1 jsApiList: ['checkJsApi', 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ']}
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxd11160e2fc3c7c58&secret=26a1ffd33cc4c829b815560966cc3977
{
access_token: "uP095wRKA72JPHUL2Jx3Jid79yHeMkggMMMqZTcWBBdRaeYDejCedsEUacfLA98HR_lo44Lo5aJQzmPIabIpIK9FT00HKI-m4VnrL_objWc",
expires_in: 7200
}
https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=uP095wRKA72JPHUL2Jx3Jid79yHeMkggMMMqZTcWBBdRaeYDejCedsEUacfLA98HR_lo44Lo5aJQzmPIabIpIK9FT00HKI-m4VnrL_objWc&type=jsapi
{
errcode: 0,
errmsg: "ok",
ticket: "bxLdikRXVbTPdHSM05e5u7gZL-LFacRDs8xFN1R-aMT6iHxDjECK0qxEdpER-wnw6L4aQQVKTK7fzkSBmIc5vQ",
expires_in: 7200
}
package upload;
import java.util.UUID;
import java.util.Map;
import java.util.HashMap;
import java.util.Formatter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.io.UnsupportedEncodingException;
public class Sign {
public static void main(String[] args) {
String jsapi_ticket = "bxLdikRXVbTPdHSM05e5u7gZL-LFacRDs8xFN1R-aMT6iHxDjECK0qxEdpER-wnw6L4aQQVKTK7fzkSBmIc5vQ";
// 注意 URL 一定要动态获取,不能 hardcode
String url = "http://sanchen.ismartinfo.cn:8082/";
Map<String, String> ret = sign(jsapi_ticket, url);
for (Map.Entry entry : ret.entrySet()) {
System.out.println(entry.getKey() + ", " + entry.getValue());
}
}
public static Map<String, String> sign(String jsapi_ticket, String url) {
Map<String, String> ret = new HashMap<String, String>();
String nonce_str = create_nonce_str();
String timestamp = create_timestamp();
String string1;
String signature = "";
//注意这里参数名必须全部小写,且必须有序
string1 = "jsapi_ticket=" + jsapi_ticket +
"&noncestr=" + nonce_str +
"×tamp=" + timestamp +
"&url=" + url;
System.out.println(string1);
try
{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(string1.getBytes("UTF-8"));
signature = byteToHex(crypt.digest());
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
ret.put("url", url);
ret.put("jsapi_ticket", jsapi_ticket);
ret.put("nonceStr", nonce_str);
ret.put("timestamp", timestamp);
ret.put("signature", signature);
return ret;
}
private static String byteToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
private static String create_nonce_str() {
return UUID.randomUUID().toString();
}
private static String create_timestamp() {
return Long.toString(System.currentTimeMillis() / 1000);
}
}
System.out.println结果:
jsapi_ticket=bxLdikRXVbTPdHSM05e5u7gZL-LFacRDs8xFN1R-aMT6iHxDjECK0qxEdpER-wnw6L4aQQVKTK7fzkSBmIc5vQ&noncestr=759e0b09-b5de-468f-abe6-1a666b502df7×tamp=1428481638&url=http://sanchen.ismartinfo.cn:8082/
gson:
{"timestamp":"1428481638","nonceStr":"759e0b09-b5de-468f-abe6-1a666b502df7","jsapi_ticket":"bxLdikRXVbTPdHSM05e5u7gZL-LFacRDs8xFN1R-aMT6iHxDjECK0qxEdpER-wnw6L4aQQVKTK7fzkSBmIc5vQ","signature":"5959b6fd18622a92a693311f727ded2dd5ec2da0","url":"http://sanchen.ismartinfo.cn:8082/"}
步骤三:通过config接口注入权限验证配置
所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)。wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: 'wxd11160e2fc3c7c58', // 必填,公众号的唯一标识 timestamp: 1428481529, // 必填,生成签名的时间戳 nonceStr: '759e0b09-b5de-468f-abe6-1a666b502df7', // 必填,生成签名的随机串 signature: '5959b6fd18622a92a693311f727ded2dd5ec2da0',// 必填,签名,见附录1 jsApiList: ['checkJsApi', 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'hideMenuItems', 'showMenuItems', 'hideAllNonBaseMenuItem', 'showAllNonBaseMenuItem', 'translateVoice', 'startRecord', 'stopRecord', 'onRecordEnd', 'playVoice', 'pauseVoice', 'stopVoice', 'uploadVoice', 'downloadVoice', 'chooseImage', 'previewImage', 'uploadImage', 'downloadImage', 'getNetworkType', 'openLocation', 'getLocation', 'hideOptionMenu', 'showOptionMenu', 'closeWindow', 'scanQRCode', 'chooseWXPay', 'openProductSpecificView', 'addCard', 'chooseCard', 'openCard'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 });
步骤四:通过ready接口处理成功验证
wx.ready(function () { // 1 判断当前版本是否支持指定 JS 接口,支持批量判断 document.querySelector('#checkJsApi').onclick = function () { wx.checkJsApi({ jsApiList: [ 'getNetworkType', 'previewImage' ], success: function (res) { alert(JSON.stringify(res)); } }); } });
/article/4596830.html
/article/4596830.html
http://www.45256.com/expand/wx/205.html http://www.2cto.com/weixin/201411/349213.html
相关文章推荐
- 【理解】一个利用递归打印对象路径下所有文件的小程序
- 微信PC版为什么这么设计?
- 微信开发
- 微信开发
- atitit。浏览器缓存机制 and 微信浏览器防止缓存的设计 attilax 总结
- atitit。浏览器缓存机制 and 微信浏览器防止缓存的设计 attilax 总结
- Java ArrayList小程序理解
- 微信公众平台开发教程1
- 微信公众号通过链接实现关注(盗用广告主流量主)
- android 微信支付,body为中文字符,签名错误
- 微信公众号开发之平台的选取------通过花生壳软件实现
- canvas礼花小程序
- 扫描二维码研究总结(高仿微信扫一扫,轻松实现定制扫描界面)
- 微信支付
- 微信二次开发接入,附带后台框架
- 公众号文章新增语音功能 让声音拉近粉丝的距离
- 本地调试微信 转的
- 微信智能硬件之CC3200设备跟服务器通信
- atitit.微信支付的教程文档 attilax总结
- atitit.微信支付的教程文档 attilax总结