微信公众平台 使用JS-SDK实现拍照上传功能

微信浏览器无法使用 调用相机功能(坑~/(ㄒoㄒ)/~~),本文使用微信公众平台jsjdk实现拍照上传图片功能。

众所周知,调用微信平台接口最大的诟病就是麻烦、流程多,什么token、code、ticket、签名等等。本次就js-sdk的拍照上传功能做一次梳理。最好的方式是阅读官方文档。

js-sdk文档地址:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html

流程:

  1. 登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
  2. 引入JS文件 http://res.wx.qq.com/open/js/jweixin-1.6.0.js
  3. 获取access_token   access_token获取文档
  4. 拿着access_token 获取 jsapi_ticket
  5. 拿着jsapi_ticket、一个随机串noncestr、一个时间戳timestamp、当前的url 去生成签名signature
  6. 拿着signature 进行config接口注入权限验证配置。
  7. 通过ready接口处理成功验证,验证成功,我们可以开始调用微信js-sdk的接口了。

获取access_token

GET请求

参数: 你的微信平台后台的 appid 和 secret ,grant_type默认填写client_credential即可

GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

获取jsapi_ticket

GET请求

参数:使用上一步获得的access_token

https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

生成signature

签名算法

签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。

即signature=sha1(string1)。

示例:

String str ="jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW&timestamp=1414587457&url=http://mp.weixin.qq.com?params=value";String signature = sha1(str); // 0f9de62fce790f9a083d5c99e95740ceb90c27ed

Java版 生成sha1算法代码:

    /*** sha1加密** @param data* @return* @throws NoSuchAlgorithmException*/public String sha1(String data) throws NoSuchAlgorithmException {//信息摘要器      算法名称MessageDigest md = MessageDigest.getInstance("SHA1");//把字符串转为字节数组byte[] b = data.getBytes();//使用指定的字节来更新我们的摘要md.update(b);//获取密文  (完成摘要计算)byte[] b2 = md.digest();//获取计算的长度int len = b2.length;//16进制字符串String str = "0123456789abcdef";//把字符串转为字符串数组char[] ch = str.toCharArray();//创建一个40位长度的字节数组char[] chs = new char[len * 2];//循环20次for (int i = 0, k = 0; i < len; i++) {byte b3 = b2[i];//获取摘要计算后的字节数组中的每个字节// >>>:无符号右移// &:按位与//0xf:0-15的数字chs[k++] = ch[b3 >>> 4 & 0xf];chs[k++] = ch[b3 & 0xf];}//字符数组转为字符串return new String(chs);}

config接口注入权限验证配置

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

ready接口处理成功验证

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

弹出wx ready. 说明配置成功。

调用拍照接口

调用接口需要在config配置时添加自己需要的接口,如拍照接口 chooseImage

wx.chooseImage({count: 1, // 默认9sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有success: function (res) {var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片}
});

拍照、上传、下载、获取本地图片接口

这里的上传仅仅只返回图片服务器端ID,继续调用下载,获取本地图片接口才可得到图片的base64数据,完整代码:

// 调用微信文件或相机,并上传图片function wxCamera() {wx.chooseImage({count: 1, // 默认9sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有success: function (res) {var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片// 上传图片接口wx.uploadImage({localId: localIds[0], // 需要上传的图片的本地ID,由chooseImage接口获得isShowProgressTips: 1, // 默认为1,显示进度提示success: function (res) {var serverId = res.serverId; // 返回图片的服务器端ID// 下载图片接口wx.downloadImage({serverId: serverId, // 需要下载的图片的服务器端ID,由uploadImage接口获得isShowProgressTips: 1, // 默认为1,显示进度提示success: function (res) {var localId = res.localId; // 返回图片下载后的本地ID// 获取本地图片接口wx.getLocalImgData({localId: localId, // 图片的localIDsuccess: function (res) {var localData = res.localData; // localData是图片的base64数据,可以用img标签显示dealImage(localData ); //处理图片}});}});}});}});}

到此,微信公众号的一个拍照上传功能终于完成了。

微信公众平台 使用JS-SDK实现拍照上传功能相关推荐

  1. 微信公众平台开发:接入JS-SDK和实现分享功能

    微信公众平台开发:接入JS-SDK和实现分享功能 一.本文是实现微信公众号自定义的分享功能开发,也是亲自实践实现该功的一些总结体会. 首先贴上微信JS-SDK说明文档地址:http://mp.weix ...

  2. android com.mylhyl,Android 高仿微信朋友圈拍照上传功能

    模仿微信朋友圈发布动态,输入文字支持文字多少高度自增,有一个最小输入框高度,输入文字有限制,不过这些都很easy! 1. photopicker的使用 这是一个支持选择多张图片,点击图片放大,图片之间 ...

  3. android 微信高仿,Android 高仿微信朋友圈拍照上传功能

    模仿微信朋友圈发布动态,输入文字支持文字多少高度自增,有一个最小输入框高度,输入文字有限制,不过这些都很easy! 1. PhotoPicker的使用 这是一个支持选择多张图片,点击图片放大,图片之间 ...

  4. PHP curl模拟表单上传文件 微信公众号素材管理接口crul文件上传核心源码

    PHP curl模拟表单上传文件  微信公众号素材管理接口crul文件上传核心源码 /*** curl 上传文件* @param $url* @param $filePath* @param stri ...

  5. 微信公众平台开发(44)历史上的今天

    微信公众平台开发 历史上的今天 当年今日 作者:方倍工作室  原文: http://www.cnblogs.com/txw1958/p/weixin-44-history.html 一.历史上的今天 ...

  6. 微信js调用摄像头拍照上传_微信JSSDK实现打开摄像头拍照再将相片保存到服务器...

    在微信端打开手机摄像头拍照,将拍照图片保存到服务器上需要使用到微信的JSSDK接口,主要使用到了拍照或从手机相册中选图接口(chooseImage),上传图片接口(uploadImage) 参考资料: ...

  7. 乌龟php微信复制统计系统,微信公众平台再次更新:强化后台数据统计功能

    微信公众平台再次进行了更新,比之前更加强化后台的数据统计功能,在单纯的阅读数据.粉丝数据统计基础上,新增了终端机型统计.阅读渠道统计等指标.具体更新如下: 1)用户增长页增加增长来源统计,可按来源查看 ...

  8. 微信公众号h5网站,图片裁剪上传成功案例分享

    1.裁剪插件 cropper 2.微信公众号内,微信sdk cropper挺简单的,如下: <VueCropper ref="cropper"                ...

  9. java拍照上传功能_js实现手机拍照上传功能

    在前段时间的项目开发中,用到了拍照上传的地方,后来发现了最为简单的一种方法,现总结如下: 上传部分的JS代码: $("input[type='file']").on('change ...

  10. uniapp拍照上传功能

    一.需求 留言板需求,上传留言时,可拍照或者上传图片 二.调用拍照/上传文件功能 点击拍照按钮,调取相机或者文件 <view class="upload-img">&l ...

最新文章

  1. 网易易盾李雨珂:服务性能+算法确定性优化,迎接5G时代内容安全爆发式流量增长...
  2. 调出sharepoint错误的详细页面
  3. 19什么情况下会帮助他人
  4. MS SQL SERVER 读取数据库中每个表的描述/注释以及表中字段/列的字段名,字段类型,字段描述/注释/说明等信息...
  5. RedHat6.4安装IBM MQ7.5
  6. 码表的理解(ASCII,GBK,Unicode,UTF-8等)。
  7. 学习使用Visual studio 时碰到的坑
  8. HTML语法结构及规范
  9. 【洛谷1137】旅行计划【拓扑排序模板】
  10. 【数学建模】二手房房价影响因素分析(描述性统计+推断统计综合应用、线性回归预测分析)
  11. 基于51单片机定时,数码管显示时间
  12. html的lang属性
  13. 32位,64位系统寻址空间及最大内存
  14. SSH常见问题及其解决方法
  15. python居然可以画樱花
  16. python接管已经打开ie浏览器_使用selenium控制(接管)已打开的浏览器(chrome),并通过WebDriver值检测...
  17. skylake服务器处理器M系列,配i系列Skylake处理器!华硕U305评测
  18. 42-表格表单和简单CSS引用
  19. 大蕉毕业三周年了,有话对你说 No.103
  20. 当当网资深DBA:DB运维四大现代化的实现

热门文章

  1. 银联 php hex2bin,银联支付
  2. Java垃圾回收的时间点
  3. 逆radon变换matlab,Radon变换及其Matlab代码实现
  4. 韩立刚计算机网络——第七章:Internet 上面的音频和视频
  5. html5 调用pc摄像头,H5调用PC端摄像头上传图片
  6. Windows配置maven环境变量
  7. 开氏温度与摄氏度换算_8789 单位换算小技巧
  8. c语言计算燃烧温度,f与c温度换算(温度f和c换算计算器)
  9. drozer工具介绍和使用
  10. c花体复制_【改名用】可复制的花体英文汇总