微信浏览器调用扫一扫,需要微信公众号的appid和app_secret
然后微信设置里面设置上,js安全域名和ip白名单即可

1.首先根据appid和secret获得ticket
2.然后获取随机字符串等参与签名
3.返回给h5端掉用扫一扫相关参数

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;import net.sf.json.JSONObject;public class Test {public static String weixin_app_id;public static String weixin_app_secret;public static String mobile_realm_name;public static void main(String[] args) {//获取签名相关参数Map<String, String> sign = getSign();System.out.println(sign);}public static JSONObject doGetJson(String url) throws IOException {System.out.println("请求url:"+url);JSONObject jsonObject = null;DefaultHttpClient client = new DefaultHttpClient();HttpGet httpGet = new HttpGet(url);HttpResponse response = client.execute(httpGet);HttpEntity entity = response.getEntity();if(entity != null){String result = EntityUtils.toString(entity,"utf-8");jsonObject = JSONObject.fromObject(result);}httpGet.releaseConnection();return jsonObject;}/*** 产生随机串--由程序自己随机产生* @return*/private static String create_nonce_str() {return UUID.randomUUID().toString();}/*** 由程序自己获取当前时间* @return*/private static String create_timestamp() {return Long.toString(System.currentTimeMillis() / 1000);}private static JSONObject getTicket() {//System.out.println("进入获取ticket");JSONObject accesTokenObject;try {String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+weixin_app_id+"&secret="+weixin_app_secret;accesTokenObject = doGetJson(ACCESS_TOKEN_URL);String accesToken = (String) accesTokenObject.get("access_token");// System.out.println("微信返回accesTokenObject"+accesTokenObject);JSONObject jsapiTicketObject = doGetJson("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accesToken + "&type=jsapi");return jsapiTicketObject;} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}/*** 随机加密* @param hash* @return*/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;} /***   最终获取出签名的相关参数,然后把四个参数给h5端,h5端再浏览器便能调起来微信扫一扫* @return*/public static Map<String, String> getSign()  {Map<String, String> ret = new HashMap<String, String>();try {String jsapiTicket = "";Integer expires_in = 0;JSONObject jsapiTicketObject = getTicket();jsapiTicket = (String) jsapiTicketObject.get("ticket");expires_in = (Integer)jsapiTicketObject.get("expires_in");String nonce_str = create_nonce_str();String timestamp = create_timestamp();String string1;String signature = "";//注意这里参数名必须全部小写,且必须有序string1 = "jsapi_ticket=" + jsapiTicket +"&noncestr=" + nonce_str +"&timestamp=" + timestamp +"&url=" + mobile_realm_name;System.out.println("String1:"+string1);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();}ret.put("appId", weixin_app_id);ret.put("nonceStr", nonce_str);ret.put("timestamp", timestamp);ret.put("signature", signature);}catch(Exception e) {e.printStackTrace();}return ret;}}

问题总结:
mobile_realm_name参数为当地址的url地址比如:
url = “http://mobile.xxx.com/”;
或者
url = url.split("#")[0];
遇到过一个坑,再微信浏览器获取过一次openid后,然后调用扫一扫
总是报错签名错误,然后前端打印url发现
location.href=‘http://mobile.xxx.com/code=dk2313313?#/xxx’;
i地址里面给加了一点参数,导致签名错误
解决办法为:h5端在获取签名参数时候,h5端先获取出当前页面地址
然后把地址传给服务端,服务端截取 “#"号,保留之前的url,然后参与签名
问题便能解决。

微信浏览器调起来扫一扫和问题总结相关推荐

  1. 微信扫一扫直接打开手机外部浏览器

    在微信中,打开app下载链接,或者使用微信扫一扫app下载二维码,都是无法下载app的. 因为腾讯为了自身利益,屏蔽了其他app直接在微信中下载.下面给分享下,找到的2种有效的解决方案. 方案一:弹出 ...

  2. vue调起微信扫一扫

    npm install weixin-js-sdk --save 导入 jq vue调起微信扫一扫,两个注意的点 1.url必须是不带参的地址栏,如果传了带参数的地址url有可能会出现安卓机能调,苹果 ...

  3. php接入微信支付,扫码支付和H5支付(非微信浏览器),基于thinkPHP框架 WeChatDeveloper支付类包 踩坑指南

    此文章入选<PHP领域内容榜>第4名 文章介绍 本文主要介绍通过thinkPHP5和第三方支付类包(WeChatDeveloper)实现快速接入微信扫码支付和微信H5手机网站支付(非微信浏 ...

  4. h5中如何调起微信的扫一扫功能?

    看到这个需求的时候有点懵,第一反应就是去找文档,最后在微信官方文档-公众号-微信网页开发中-js-sdk文档说明中找到了这个调起微信扫一扫接口的功能. 接下来记录下是如何实现的吧. 首先我们肯定是要引 ...

  5. HTML——微信浏览器H5页面调用微信扫一扫

    使用JS-SDK调用微信扫一扫,需要有公众号支持,通过公众号生成JS-SDK使用权限签名.本文直接调用已封装好的接口来获取随机数(noncestr).时间戳(timestamp).签名(signatu ...

  6. ios浏览器微信支付回调页面_微信支付:手机系统自带的浏览器,调用微信支付如何实现(非扫码)...

    如果您是使用浏览器的移动网页进行支付,那就是调用微信H5支付,如果是使用APP客户端进行支付,那就要调用微信APP支付. H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使 ...

  7. 微信JSSDK使用步骤(用于在微信浏览器中自定义分享,分享到朋友圈,拍照,扫一扫等功能)

    一.使用JSSDK需要一个公众号(需要认证!): (1).把自己项目的服务器地址输入. (2).把MP_verify_m7Qp93BAuIGDWRVO.txt  文件下载下来,放到该服务器域名指向的根 ...

  8. asp源码爱好者福利,asp调用微信扫一扫代码,用asp写的调用微信内置扫一扫功能源码下载

    接到一个用户的需求,要在他的手机版网页里实现扫一扫功能,扫出他的产品编号入库,这太简单了,花了几分种时间给他实现一下. 微信扫一扫必须使用微信内置浏览器访问此页面才能查看效果: 程序功能: 通过微信J ...

  9. 微信公众号H5页面实现扫一扫功能

    uniappH5实现扫一扫功能 最近遇到一个需求,H5页面使用扫码绑定设备功能,因为uniapp uni.scanCode API H5不支持,网上找了很多方案不合适,因为这个项目是在公众里面运行的, ...

最新文章

  1. 变焦即可判断物体的距离
  2. 在ListCtrl控件中插入图标
  3. 关于python2.7的md5加密遇到的问题(TypeError: Unicode-objects must be encoded before hashing)...
  4. LeetCode 1121. 将数组分成几个递增序列
  5. Windows学习总结(19)——Windows必备神器Cmder使用教程
  6. 驱动人生安装驱动计算机无法启动,驱动人生打开时出错怎么办
  7. 学习《Python核心编程》做一下知识点提要,方便复习(二)
  8. oracle通过dblink连接mysql配置详解(全Windows下)
  9. python函数 模块先加载到内存后执行_Python从内存中使用编译后的模块
  10. Windows核心编程_添加开机自启动
  11. sklearn,SVM 和文本分类
  12. 攻防世界 REVERSE 新手区/logmein
  13. 百奥虫草:科学养生健康梦想航天城里笑声朗
  14. 安卓下微信内置浏览器视频出现解析错误
  15. java对象的内存分配流程
  16. 2021年3月电子学会Python等级考试试卷(一级)考题解析
  17. 【读书笔记】c和指针
  18. 17~19 函数(上)
  19. 解决不良贷款清收难 创新新对策
  20. lnmp运行php原理,lnmp安装管理运行

热门文章

  1. 金融数据挖掘(一):A股上市公司2021年年报
  2. Pytorch C++/CUDA Extension
  3. Android 11.0 12.0遥控器点击输入框 弹不出输入法
  4. 如何用Scrum做变革管理的落地实施
  5. 矩阵--范德蒙德行列式
  6. 【技巧】使用微信进行简单的拼接长图
  7. mysql server安装报错_安装VtigerCRM报错:MySQL Server should be configured with
  8. 知识图谱辅助的个性化推荐系统
  9. WIN7中“我的电脑”上方的“工具栏”消失解决方案
  10. C语言中什么叫做左值?右值?