您的位置:首页 > 移动开发 > 微信开发

微信JS-SDK之图像接口开发详解

2015-06-19 12:38 627 查看
  由于现在手头的项目中有一个上传证件照认证的功能(手机端),之前的思路是直接点击上传,然后直接将图片上传到服务器去,这篇文章有讲到(/article/5238924.html),但在微信里打开网页去上传,速度并不快,而且,假如我上传一张2M大的图片,也没有对其进行压缩处理,这样很影响上传和下载的速度。

  所以,我这里借助微信JSSDK的图像接口对其进行开发实现图片上传的功能,为何我选择此接口?第一,目前的项目是在微信中打开的网页,利用此接口,性能肯定是好一点的啦,毕竟是微信自己的东西;第二,用此接口,开发效率更高嘛;第三,最重要的一点,就是它能对图片进行压缩,假如一张2M的图片,通过微信图片上传接口可以将图片压缩成几百K的大小,这对网站的性能是很有帮助的。

  一、我的思路是:

先调用“拍照或从手机相册选择图片接口”—>选择成功图片后—>调用“上传图片接口”—>上传成功后(也就是图片上传到了微信服务器上)—>调用“下载图片接口”—>将图片下载到自己的服务器存储。

  二、JSSDK的使用步骤

  1、概述 

  微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。

  通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。

  2、使用步骤

  步骤一:绑定域名

  先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

  备注:登录后可在“开发者中心”查看对应的接口权限。

  步骤二:引入JS文件

  在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js

  步骤三:通过config接口注入权限验证配置

  所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用)

wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名,见附录1
jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});


  步骤四:通过ready接口处理成功验证

  

wx.ready(function(){

// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});


  步骤五:通过error接口处理失败验证

wx.error(function(res){

// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。

});


  接口调用说明

  所有接口通过wx对象(也可使用jWeixin对象)来调用,参数是一个对象,除了每个接口本身需要传的参数之外,还有以下通用参数:

success:接口调用成功时执行的回调函数。

fail:接口调用失败时执行的回调函数。

complete:接口调用完成时执行的回调函数,无论成功或失败都会执行。

cancel:用户点击取消时的回调函数,仅部分有用户取消操作的api才会用到。

trigger: 监听Menu中的按钮点击时触发的方法,该方法仅支持Menu中的相关接口。

  备注:不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回。

  以上几个函数都带有一个参数,类型为对象,其中除了每个接口本身返回的数据之外,还有一个通用属性errMsg,其值格式如下:

调用成功时:"xxx:ok" ,其中xxx为调用的接口名

用户取消时:"xxx:cancel",其中xxx为调用的接口名

调用失败时:其值为具体错误信息

  

  三、开发及代码分析详解(用的是CI框架,只要是MVC模式都可以)

  1、先在服务器端取到:公众号的唯一标识appId、生成签名的时间戳timestamp、生成签名的随机串nonceStr、签名signature。

  wx_upload.php

if(typeof($util)=='undefined')$util={};

$.util.wxMenuImage = function(json) {
if (json.length == 0) return;
//解析json变成js对象
wxJsApi = JSON.parse(json);

//通过config接口注入权限验证配置
wx.config({
debug: false,   //开启调试模式,调用的所有api的返回值会在客户端alert出来
appId: wxJsApi.signPackage.appId,   //公众号的唯一标识
timestamp: wxJsApi.signPackage.timestamp,   //生成签名的时间戳
nonceStr: wxJsApi.signPackage.nonceStr, //生成签名的随机串
signature: wxJsApi.signPackage.signature,   //签名
jsApiList: ['chooseImage', 'uploadImage']   //需要使用的JS接口列表 这里我用了选择图片和上传图片接口
});

//通过ready接口处理成功验证,config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后
wx.ready(function(){
//得到上传图片按钮
document.querySelector('#uploadImage').onclick = function() {
var images = {localId:[],serverId:[]};
//调用 拍照或从手机相册中选图接口
wx.chooseImage({
success: function(res) {
if (res.localIds.length != 1) {
alert('只能上传一张图片');
return;
}
//返回选定照片的本地ID列表
iamges.localId = res.localIds;
images.serverId = [];
//上传图片函数
function upload() {
//调用上传图片接口
wx.uploadImage({
localId: images.localId[0], // 需要上传的图片的本地ID,由chooseImage接口获得
isShowProcess: 1,   // 默认为1,显示进度提示
success: function(res) {
//返回图片的服务器端ID res.serverId,然后调用wxImgCallback函数进行下载图片操作
wxImgCallback(res.serverId);
},
fail: function(res) {
alert('上传失败');
}
});
}
upload();
}
});
}
});
}

function wxImgCallback(serverId) {
//将serverId传给wx_upload.php的upload方法
var url = 'wx_upload/upload/'+serverId;
$.getJSON(url, function(data){
if (data.code == 0) {
alert(data.msg);
} else if (data.code == 1) {
//存储到服务器成功后的处理
//
}
});
}


uploadImg.js
  代码中有些方法没有贴出来,大家要是想看看,可以到/article/5238924.html 这篇博文去看。

  本次讲解就到此,这篇博文是给对微信接口开发有兴趣的朋友参考,如果你是高手,完全可以绕道。

  如果此博文中有哪里讲得让人难以理解,欢迎留言交流,若有讲解错的地方欢迎指出。

  如果您觉得您能在此博文学到了新知识,请为我顶一个,如文章中有解释错的地方,欢迎指出。

  互相学习,共同进步!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: