Vue 实现微信 jssdk 扫码, 上传图片
流程
1: 配置微信公众号JS域名
2:前端发送URL后台获取JSSDK配置,
后台Service代码如下, 修改2处位置:
WeixinUtil.APPID => 当前公众号APPID
WeixinUtil.getAccessToken() => 当前公众号access_token
public interface IWxJssdkService {
Map<String, Object> getJssdkConfig(String url);
}
@Service
public class WxJssdkService implements IWxJssdkService { private Logger logger = LoggerFactory.getLogger(this.getClass()); @Override
public Map<String,Object> getJssdkConfig(String url) {
Map<String,Object> result = new Map<String,Object>();
try {
//生成签名的随机串
String nonceStr = create_nonce_str();
//生成签名的时间戳
String timestamp = create_timestamp();
//签名
String signature = createSignature(url, nonceStr, timestamp);
result.setErrCode("");
result.put("appId", WeixinUtil.APPID);
result.put("timestamp", timestamp);
result.put("nonceStr", nonceStr);
result.put("signature", signature);
} catch (Exception e) {
e.printStackTrace();
logger.info("wrong:" + e.getMessage());
result.setErrCode("-1");
}
return result;
} private String getJsapiTicket() {
String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + WeixinUtil.getAccessToken() + "&type=jsapi";
try {
String rs = RequestUtil.doGet(url, null);
JSONObject obj_content = new JSONObject(rs);
String jsapi_ticket = obj_content.getString("ticket");
return jsapi_ticket;
} catch (Exception e) {
e.printStackTrace();
logger.info("获取微信jsapiTicket错误.");
}
return null;
} private String create_timestamp() {
return Long.toString(System.currentTimeMillis() / );
} private String create_nonce_str() {
return UUID.randomUUID().toString();
} 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;
} /**
* 根据jsapi_ticket等参数进行SHA1加密
*
* @param url 当前页面url
*/
public String createSignature(String url, String nonceStr, String timestamp) {
String jsapiTicket = getJsapiTicket();
String signature = "jsapi_ticket=" + jsapiTicket;
signature += "&noncestr=" + nonceStr;
signature += "×tamp=" + timestamp;
signature += "&url=" + url; logger.info("jsapi_ticket:{}", jsapiTicket);
logger.info("noncestr:{}", nonceStr);
logger.info("timestamp:{}", timestamp);
logger.info("url:{}", url);
logger.info("signture before:{}", signature); try {
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(signature.getBytes("UTF-8"));
signature = byteToHex(crypt.digest()); logger.info("signture after:" + signature);
} catch (Exception e) {
logger.error("Signature for SHA-1 is error:{}", e);
} return signature;
}
}
3: 请先安装weixin-js-sdk, 命令:npm install weixin-js-sdk --save-dev
vue启动后axios请求后台并配置.
import wx from 'weixin-js-sdk';
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: result.appId, // 必填,公众号的唯一标识
timestamp: result.timestamp, // 必填,生成签名的时间戳
nonceStr: result.nonceStr, // 必填,生成签名的随机串
signature: result.signature,// 必填,签名
jsApiList: ['scanQRCode', 'chooseImage', 'uploadImage'] // 必填,需要使用的JS接口列表
});
4;相机 和 选择照片
5:浏览器打开如下url: 这个serverId(media_id)可以获取图片了.
https://api.weixin.qq.com/cgi-bin/media/get?access_token=微信access_token&media_id=serverId(media_id);
Vue 实现微信 jssdk 扫码, 上传图片的更多相关文章
- Win10环境前后端分离项目基于Vue.js+Django+Python3实现微信(wechat)扫码支付流程(2021年最新攻略)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_182 之前的一篇文章:mpvue1.0+python3.7+Django2.0.4实现微信小程序的支付功能,主要介绍了微信小程序内 ...
- Java实现微信客户端扫码登录
此篇文章记录自己开发中的微信客户端扫码登录的实例以及步骤,便于以后自行学习记起的关键,看到的网友有借鉴的地方就借鉴,看不懂的也请别吐槽,毕竟每个人的思维和思路以及记录东西的方式不一样: 1.首先需要一 ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_6-3.微信网站扫码支付介绍
笔记 3.微信网站扫码支付介绍 简介:讲解微信网页扫码支付 1.扫码支付文档:https://pay.weixin.qq.com/wiki/doc/api/native.php ...
- Java之微信支付(扫码支付模式二)案例实战
摘要:最近的一个项目中涉及到了支付业务,其中用到了微信支付和支付宝支付,在做的过程中也遇到些问题,所以现在总结梳理一下,分享给有需要的人,也为自己以后回顾留个思路. 一:微信支付接入准备工作: 首先, ...
- Spring Security整合企业微信的扫码登录,企微的API震惊到我了
本文代码: https://gitee.com/felord/spring-security-oauth2-tutorial/tree/wwopen/ 现在很多企业都接入了企业微信,作为私域社群工具, ...
- ASP.NET MVC做的微信WEBAPP中调用微信JSSDK扫一扫
今天做一个项目,是在微信上用的,微信WEB APP,里面用到了调用手机摄像头扫一扫二维码的功能,记得以前某个项目里写有的,但是找不到之前那个项目源码了,想复制粘贴也复制不了了,只好对着微信的那个开发文 ...
- (实用篇)微信支付扫码支付php版
本文实例为大家分享了php微信扫码支付源码,供大家参考,具体内容如下 代码中包含四个文件createUrl.php.ArrayToXML.php.returnGoodsUrl.php.notifyUr ...
- [支付]微信NATIVE扫码支付JAVA实现
步骤: 1.预订单 2.接受微信返回的url 3.将url转为二维码显示到页面上 4.扫码支付 5.接收微信的异步通知,在这步修改订单的状态 6.收到异步通知的同时给微信返回指定数据,告知对方已成功处 ...
- ThinkPHP 整合微信支付 扫码支付 模式二 图文教程
这篇文章主要介绍扫码支付场景二. 目前有两种模式,模式一比模式二稍微复杂点,至于模式一与模式二的具体内容,流程,微信开发文档都有详细介绍,这里就不多说废话,接下来赶紧上教程! [title]下载SDK ...
随机推荐
- lvs+keepalived+bind实现负载均衡高可用智能dns【转】
转:https://www.cnblogs.com/mikeluwen/p/7068356.html 整体架构: 1.IP地址规划: Dns1:172.28.0.54 Dns2:172.28.0.55 ...
- Collections中的各种方法
一.各种方法介绍 Counter 统计个数 elements most_common subtract defaultdict 字典默认值 ChainMap 合并多个映射对象(字典) Ord ...
- bzoj2120
题解: 可修改莫队 我们加入一个时间T 然后在排序的时候考虑一下时间 在计算的时候也要考虑 代码: #include<bits/stdc++.h> using namespace std; ...
- CSS用法
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- (转)Fiddler教程(Web调试工具)
转载地址:写得很不错的fildder教程 http://kb.cnblogs.com/page/130367/ Fiddler的基本介绍 Fiddler的官方网站: www.fiddler2.c ...
- HDU 2807
http://acm.hdu.edu.cn/showproblem.php?pid=2807 把矩阵相乘放在第二重循环,第三重循环只进行比较可以水过,优化的方法不懂 主要用这题练习floyd的写法 # ...
- .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
.NET/C# 程序从 Main 函数开始执行,基本上各种书籍资料都是这么写的.不过,我们可以写多个 Main 函数,然后在项目文件中设置应该选择哪一个 Main 函数. 你可能会觉得这样没有什么用, ...
- java编程排序之内置引用类型的排序规则实现,和自定义规则实现+冒泡排序运用
第一种排序:[冒泡排序]基本数据类型的排序. [1]最简易的冒泡排序.效率低.因为比较的次数和趟数最多. /** * 最原始的冒泡排序. * 效率低. * 因为趟数和次数最多.都是按最大化的循环次数进 ...
- LeetCode OJ - Best Time to Buy and Sell Stock
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/xiezhihua120/article/details/32939749 Say you have ...
- Javascript模块化编程require.js的用法
JS模块化工具requirejs教程(一):初识requirejs http://www.runoob.com/w3cnote/requirejs-tutorial-1.html JS模块化工具req ...