先
说明本人是个新手,负责人要求我在公司的微信公众号H5界面中添加一个扫一扫功能,这对于我来说还是个不小的挑战,因为之前的公众号开发大部分都是公司的前辈的开发的。对于微信接口的使用,我一点都不熟悉。
废话少说,现在我分享一下调用微信扫一扫的过程及代码,系统框架采用的是SSH框架。
开发扫一扫的满足条件:
一、需要微信公众号的APP_ID
二、需要微信公众号的开发者密码AppSecret(如何查看AppSecreti:开发-基本配置-开发者密码-重置 管理员扫码即可看到)
三、需要一个内网穿透的软件,我使用的是natapp
四、在微信公众号中将自己的本机Ip添加到IP白名单中
满足以上条件,那么我们就可以进行微信扫一扫的接口调用
首先创建微信配置工具类(部分代码是来自网上的大牛们的代码,由于浏览了几天几夜的网页,具体是谁的我也搞不清了)
微信签名类
package com.item.config;
import java.util.UUID;
import java.util.Map;
import java.util.HashMap;
import java.util.Formatter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.io.UnsupportedEncodingException;
public class Sign {
/* public static void main(String[] args) {
//获取ticket
String ticket = WxUtils.getTicket();
// 注意 URL 一定要动态获取,不能 hardcode
String url = "http://"+WxUtils.APP_DOMAIN+"/RAFFLE/gotoLetter";
Map<String, String> ret = sign(ticket, url);
for (Map.Entry entry : ret.entrySet()) {
System.out.println(entry.getKey() + ", " + entry.getValue());
}
}*/
/**
* 用于微信签名
* //签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分)
* @param jsapi_ticket
* @param url 当前网页的URL,不包含#及其后面部分
* @return
*/
public static Map<String, String> sign(String jsapi_ticket, String url) {
Map<String, String> ret = new HashMap<String, String>();
//保证每次请求的签名都不一样
String nonce_str = create_nonce_str();
String timestamp = create_timestamp();
String string1;
String signature = "";
//注意这里参数名必须全部小写,且必须有序
string1 = "jsapi_ticket=" + jsapi_ticket +
"&noncestr=" + nonce_str +
"×tamp=" + timestamp +
"&url=" + url;
System.out.println(string1);
try