网站首页 > java教程 正文
概述
客户需求在h5调用扫一扫来识别二维码,经调研发现使用微信sdk是最好的方式。官网的文档(https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html)写的很好,就是太伤肝,坑太多。下面我给大家详细描述一下实现过程。
步骤
1、绑定域名
先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。ip白名单记得也需要配置,不然后端会报错,无法调用接口。
2、引入JS文件
npm方式安装,npm install jweixin-module --save ,uniapp需要建立package.json
var jWeixin = require('jweixin-module')
3、通过config接口注入权限验证配置
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳,与后端保持一致
nonceStr: '', // 必填,生成签名的随机串,与后端保持一致
signature: '',// 必填,签名,后端返回的值,需要把当前页面的url传递到后端,不然签名会无效
jsApiList: [] // 必填,需要使用的JS接口列表
});
4、java获取token,ticket,签名
下面的三步一个参数都不能错,不然就很难搞,token和ticket需要缓存起来,有访问次数限制。
- 获取token
String tokenData =
"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
+ APPID
+ "&secret="
+ SECRET;
String resp = HttpUtils.sendGet(tokenData);
- 获取ticket
String ticketUrl =
"https://api.weixin.qq.com/cgi-bin/ticket/getticket?"
+ "access_token="
+ accessToken
+ "&type=jsapi";
String resp = HttpUtils.sendGet(ticketUrl);
- 获取签名
String url = ??? // 前端的请求页面
String ticket = String.valueOf(jsonObject.get("ticket"));
String nonceStr = UUID.randomUUID().toString();
String timestamp = Long.toString(System.currentTimeMillis() / 1000);
String string1 =
new StringBuilder("jsapi_ticket=")
.append(ticket)
.append("&noncestr=")
.append(nonceStr)
.append("×tamp=")
.append(timestamp)
.append("&url=")
.append(url)
.toString();
// 得到签名
String signature = encryptSHA(string1);
/**
* sha
*/
private static String encryptSHA(String signStr) {
StringBuffer hexValue = new StringBuffer();
try {
MessageDigest sha = MessageDigest.getInstance("SHA-1");
byte[] byteArray = signStr.getBytes("UTF-8");
byte[] md5Bytes = sha.digest(byteArray);
for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16) {
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
}
} catch (Exception e) {
e.printStackTrace();
return "";
}
return hexValue.toString();
}
5、调用扫码
this.$wx.scanQRCode((res) => {this.$u.route('pages/my/device', {serialNo:res.resultStr});
避坑指南
1、通过后端同学获取调用微信sdk所需的签名过程中,需要注意跨域问题;
2、用微信sdk前提必须是微信容器,换句话说就是微信浏览器打开,才能使用微信sdk;
3、如何在开发本地环境去测试微信sdk的调用情况,可以做内网穿透,使用微信开发者工具调试;
4、在微信容器使用微信sdk报错,config报错:config:invalid signature,这一步卡了我很久,严格执行步骤4,可以少走很多弯路;如果你是IOS,请记住SPA不会即时改变url,需要全局缓存页面地址;
5、报错config:fail,invalid url domain,微信公众号接口提前配置好;
最后,祝你好运。
如若转载,请注明出处:开源字节 https://sourcebyte.vip/article/349.html
猜你喜欢
- 2024-12-24 Java 8 新增6接口:Optional、Consumer等
- 2024-12-24 java小知识-纳秒 纳秒是什么
- 2024-12-24 弃用 Java 8,Apache Kafka 3.0 发布
- 2024-12-24 Sharding Sphere-JDBC从入门到实战,一顿饭的时间让你学懂
- 2024-12-24 Java虚拟机之 XX:+UseGCLogFileRotation 解析
- 2024-12-24 阿里Java三面:分布式延时任务方案解析,万字长文一篇点通你
- 2024-12-24 拯救Java应用:Arthas监控术,让你事半功倍
- 2024-12-24 filebeat收集K8S日志,写入自动创建的索引
- 2024-12-24 Java 动态调试技术原理及实践 java动态配置
- 2024-12-24 美团高并发分布式架构下的唯一ID生成方式,看这篇就够了
你 发表评论:
欢迎- 04-27微服务部署架构设计详解(图文全面总结)
- 04-27Java微服务架构选型与对比:一场技术流派的巅峰对决
- 04-27微服务架构下Java的最佳实践
- 04-27Java微服务架构选型:优雅拆分与高效整合
- 04-27微服务架构下的Java代码拆分策略:像拼图一样构建系统
- 04-27微服务架构下的Java最佳实践
- 04-27微服务架构下Java的挑战与机遇
- 04-27微服务架构下Java事务管理的艺术
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)