首先又是坑的要死的签名,这里第一个前端配置就是:
wx.config({
debug: false, // 因为在手机上测试没法打印,当debug为true时,所有的返回值都会在手机上alert出来
appId: res.body.data.appid, // 必填,公众号唯一标识
timestamp: res.body.data.timestamp, // 必填,生成签名的时间戳
nonceStr: res.body.data.noncestr, // 必填,生成签名的随机串
signature: res.body.data.sign,// 必填,签名
jsApiList: ['chooseImage','uploadImage'] // 必填,需要使用的JS接口列表,需要用到什么接口就去开发者文档查看相应的字段名
});
wx.config把微信公众号开发的一些参数配置在里面
debug:解决手机上无法console测试数据 true为现实
appid:后台传过来的appid
timestamp:后台传过来的时间戳,必须一致
nonceStr:同上 随机串
signature:签名,拿到一串数据进行SHA1加密后的签名
jsApiList:需要调用哪些接口 写在里面 ------ 我写的是选择图片和上传图片接口
后台访问URL:
https://api.weixin.qq.com/cgi-bin/token?
grant_type=client_credential&appid="+PayConfigUtil.appid+"&secret="+PayConfigUtil.key;
这是获取access_token的接口 get请求2个参数过去 分别是appid跟appsecret
成功后会返回一个access_token给你
然后需要拿着access_token去访问:
https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+ acces +"&type=jsapi
同样 , 给上之前接口返回的access_token会返回一个jsapi_ticket给你 这个东西一天只能请求2000次的样子
最后,把jsapi_ticket ,时间戳,随机串封装到一个String里
String str = "jsapi_ticket="+tickets+"&noncestr="+noncestr+"×tamp="+timestamp+"&url="+url2;
url是你当前操作的url全路径,url上的参数也有带进去#号后的就不用了
用SHA1算法加密,这两步好坑- - 算法官方文档没有 网上也很多是很老的用不了 URL也是个坑 写错了一直调
public class SHA1 {
public static String getSignature(String string1) {
String signature="";
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();
}
System.out.println("签名1:"+signature);
// System.out.println("签名2:"+ SHA1Util.encode(string1) );
return signature;
}
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;
}
}
附上SHA1加密算法
把时间戳、随机串、签名返回到前端,包括APPID。
调起wx.chooseImage选择图片,可选择原图、压缩图,可选择相册、相机。
wx.chooseImage({
count: 1, // 默认9
sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
sourceType: ['camera','album'], // 可以指定来源是相册还是相机,默认二者都有
success: function (respos) {
localIds = respos.localIds
alert("JSON3"+localIds);
wx.uploadImage({
localId: localIds.toString(), // 需要上传的图片的本地ID,由chooseImage接口获得
isShowProgressTips: 1, // 默认为1,显示进度提示
success: function (resp) {
mediaId = resp.serverId;
alert("resp:"+resp);
alert("mediaId:"+mediaId);
wx.getLocalImgData({
localId: localIds.toString(), // 图片的localID
success: function (respo) {
var localData = respo.localData; // localData是图片的base64数据,可以用img标签显示
if (localData.indexOf('data:image') != 0) {
//判断是否有这样的头部
localData = 'data:image/jpeg;base64,' + localData
}
localData = localData.replace(/\r|\n/g, '').replace('data:image/jgp', 'data:image/jpeg')
this.img_url = localData;
alert(localData);
},fail:function(respo){
alert("显示失败:"+JSON.stringify(respo));
}
});
},fail: function (error) {
var picPath = '';
//localIds = '';
alert(JSON.stringify(error));
}
});
}
});
好吧我直接粘过来了 - -
wx.uploadImage是图片上传的接口 图片上传到微信的服务器 暂存3天,可再调用微信的下载图片接口进行下载
差不多快做完的时候就被BOSS废掉了 然后就做原生的上传 。