页面调用微信扫一扫功能

1.页面代码

//调用扫一扫功能

    function callScaning() {
        wx.config({
            debug: false,
            appId: '${wxJson.appId}',
            timestamp: '${wxJson.timestamp}',
            nonceStr: '${wxJson.nonceStr}',
            signature: '${wxJson.signature}',
            jsApiList: [  'scanQRCode' ]

        });

        wx.error(function(res) {
            alert("出错了:" + res.errMsg);//这个地方就是wx.config配置错误,会弹出窗口哪里错误,然后根据微信文档查询即可。
        });

        wx.scanQRCode({
            needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
            scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
            success: function (res) {
                var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
                alert("扫一扫结果:" + result);
            }
        });

    }

2.后台代码

//获取参数

public String getParameter() {
StringBuffer url = new StringBuffer();
url="页面签名";
JSONObject wxJson = TicketUtil.sign(wxJson, TicketUtil.getJsApiTicket(), url.toString());
return SUCCESS;

}

public class TicketUtil {
public static JSONObject sign(JSONObject json, String jsapi_ticket, String url) {
String nonce_str = create_nonce_str();
String timestamp = create_timestamp();
String signature = "";
// 注意这里参数名必须全部小写,且必须有序
String string1 = "jsapi_ticket=" + jsapi_ticket + "&noncestr="
+ nonce_str + "&timestamp=" + timestamp + "&url=" + url;
try {
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(string1.getBytes("UTF-8"));
signature = byteToHex(crypt.digest());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
WXConfigReader configReader = WXConfigReader.getInstance();
String appId = configReader.getConfigValue("weixin.appid");
json.put("appId", appId);
json.put("url", url);
json.put("jsapi_ticket", jsapi_ticket);
json.put("nonceStr", nonce_str);
json.put("timestamp", timestamp);
json.put("signature", signature);
json.put("signUrl", url);
return json;
}

public 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;
}

public static String create_nonce_str() {
return UUID.randomUUID().toString();
}

public static String create_timestamp() {
return Long.toString(System.currentTimeMillis() / 1000);
}

public static String getJsApiTicket() {
String jsApiTicket = null;
WXConfigReader configReader = WXConfigReader.getInstance();
String appid = configReader.getConfigValue("weixin.appid");
String secret = configReader.getConfigValue("weixin.secret");
String tokenUrl = configReader.getConfigValue("weixin.access_tokenUrl") + "?grant_type=client_credential&appid=" + appid + "&secret=" + secret;
String jsapi_ticketUrl = configReader.getConfigValue("weixin.jsapi_ticketUrl");

RestAPIClient client = RestAPIClient.getInstance();
JSONObject accessTokenResult = client.call(tokenUrl);
if (accessTokenResult != null && StringUtils.isNotEmpty(accessTokenResult
.getString("access_token"))) {
String accessToken = accessTokenResult.getString("access_token");
String apiTicketUrl = jsapi_ticketUrl + "&access_token=" + accessToken;
JSONObject apiTicketResult = client.call(apiTicketUrl);
if (apiTicketResult != null
&& "ok".equalsIgnoreCase(apiTicketResult.get("errmsg") + "")) {
jsApiTicket = apiTicketResult.get("ticket") + "";
}
}
return jsApiTicket;
}

public static String accessToken() {
String accessToken = null;
WXConfigReader configReader = WXConfigReader.getInstance();
String appid = configReader.getConfigValue("weixin.appid");
String secret = configReader.getConfigValue("weixin.secret");
String tokenUrl = configReader.getConfigValue("weixin.access_tokenUrl") + "?grant_type=client_credential&appid=" + appid + "&secret=" + secret;

RestAPIClient client = RestAPIClient.getInstance();
JSONObject accessTokenResult = client.call(tokenUrl);
if (accessTokenResult != null && StringUtils.isNotEmpty(accessTokenResult.getString("access_token"))) {
accessToken = accessTokenResult.getString("access_token");
 
}
return accessToken;
}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值