微信公众号调用手机相册并将图片上传到本地服务器

最近有一个需求,用公众号调用本地相册,并将图片上传到本地服务器(不是微信服务器)。
步骤一:引入JS文件
在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.4.0.js

如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:http://res2.wx.qq.com/open/js/jweixin-1.4.0.js (支持https)。

步骤二:
在调用本地相册页面加入以下代码:
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: ‘’, // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: ‘’, // 必填,生成签名的随机串
signature: ‘’,// 必填,签名
jsApiList: [‘chooseImage’, ‘uploadImage’] // 必填,需要使用的JS接口列表,

});
下面通过java代码获取timestamp、nonceStr、signature
//获得jsapi_ticket,noncestr,timestamp
requestUrl:为jsp所在目录(这里一定要弄对,不然一直报签名错误)

public static  Map<String ,String> getJSSDKData(String requestUrl,String appid,String appsecret){
	log.info("=================getJSSDKData-start");
	//1)获取access_token
	AccessToken accessToken =  getAccessToken(appid, appsecret,false);
	String token = accessToken.getToken();
	log.info("accessToken:"+accessToken);
	
	//2)获取jsapi_ticket(有效期7200秒
	String jsapi_ticket = getJsapi_ticket_cache(token);
	log.info("jsapi_ticket:"+jsapi_ticket);
	
	//3)获取//随机字符串 
	String noncestr  = Double.toString(Math.random()).substring(2, 15);//随机字符串
	
	//4)获取 随机时间戳
	String timeStamp =((int)(new Date().getTime()/1000))+"";//随机时间戳

	//5)获取签名
	String str = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + noncestr + "&timestamp="+ timeStamp +"&url=" + requestUrl;
    String signature = SHA1Util.Sha1(str); 
	
    Map<String ,String>  map =  new HashMap<String, String>();
    
    map.put("appid", appid);
	map.put("noncestr", noncestr);
	map.put("timestamp", timeStamp);
	map.put("signature", signature);
	map.put("url", requestUrl);
	 
	log.info("=================getJSSDKData-end");
	
	return map;
} 
	public final static String access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";

public static AccessToken getAccessToken(String appid, String appsecret,boolean flag) {
log.info("=============getAccessToken-start");
long now = System.currentTimeMillis();
if( (!flag) && (accessToken != null) && ( now <= (accessToken.getCreateTime() + accessToken.getExpiresIn() * 1000) ) ){
log.info("读取缓存accessToken
"+accessToken);
return accessToken;
}else{
//不在有效期内 重新获取, 并且存到缓存中去
String requestUrl = access_token_url.replace(“APPID”, appid).replace(“APPSECRET”, appsecret);
JSONObject jsonObject = httpRequest(requestUrl, “GET”, null);
// 如果请求成功
if (null != jsonObject) {
try {
accessToken = new AccessToken();
accessToken.setCreateTime(now);
accessToken.setToken(jsonObject.getString(“access_token”));
accessToken.setExpiresIn(jsonObject.getInt(“expires_in”) - 300);
CacheInstance.getCacheInterface().set( Md5Util.MD5Encode(“AccessToken”) ,accessToken);
log.info("重新获取accessToken成功
"+accessToken);
} catch (JSONException e) {
accessToken = null;
// 获取token失败
log.info(“获取token失败 errcode:{} errmsg:{}”+jsonObject.getInt(“errcode”)+jsonObject.getString(“errmsg”));
e.printStackTrace();
}
}
}
log.info("=================getAccessToken-end");
return accessToken;

}

至此微信接口初始化完毕。
调用wx.chooseImage({
count: 1, // 默认9
sizeType: [‘original’, ‘compressed’], // 可以指定是原图还是压缩图,默认二者都有
sourceType: [‘album’, ‘camera’], // 可以指定来源是相册还是相机,默认二者都有
success: function (res) {
var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
”;
wx.uploadImage({
localId: localId.toString(), // 需要上传的图片的本地ID,由chooseImage接口获得
isShowProgressTips: 1, // 默认为1,显示进度提示
success: function (res) {
var serverId = res.serverId; // 返回图片的服务器端ID
//以下逻辑上传本地服务器
uploadServe(serverId);

			        	}

}
});
//一下逻辑上传本地服务器
function uploadServe(serverId){

		$.ajax({
       		type: "POST",
       		url: "uploadImage.action",
       		data: {
       			serverId:serverId
       				
       			},
       		dataType: "json",
       		success: function (data) {
       			id+=data.info+",";
       			$("#attachIds").val(id);
       			//alert($("#attachIds").val());

       		}
       	})
	}
		public static String uploadImageByWX = "https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=serverId";获取图片二进制流的接口
		其中ACCESS_TOKEN可以上面方法获得
		       serverId 从前台传过来
		       然后获得图片二进制流
		       然后将二进制流保存到服务器即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值