• 调用微信扫一扫接口


    微信扫一扫,由JS去发起

    在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js

    请注意,如果你的页面启用了https,务必引入 https://res.wx.qq.com/open/js/jweixin-1.0.0.js ,否则将无法在iOS9.0以上系统中成功使用JSSDK

    wx.config({
        debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: '', // 必填,公众号的唯一标识
        timestamp: , // 必填,生成签名的时间戳
        nonceStr: '', // 必填,生成签名的随机串
        signature: '',// 必填,签名
        jsApiList: [] // 必填,需要使用的JS接口列表
    });

    通过ready接口处理成功验证

    wx.ready(function(){
    
        // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,
         config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
    });

    通过error接口处理失败验证

    wx.error(function(res){
    
        // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
    
    });

    获取上述签名signature的方式:

    1.先获取access_token

    http请求方式: GET
    https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET


    请求参数说明:

    grant_type:获取access_token填写client_credential
    appid:第三方用户唯一凭证
    secret:第三方用户唯一凭证密钥

    返回参数:
    {"access_token":"ACCESS_TOKEN","expires_in":7200}

    2.获取到access_token之后获取,采用http GET方式请求获得jsapi_ticket:

    https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

    成功返回:

    {
    "errcode":0,
    "errmsg":"ok",
    "ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
    "expires_in":7200
    }

    3.进行扫一扫签名:

    需要的参数:

    示例:

    • noncestr=Wm3WZYTPz0wzccnW
    • jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg
    • timestamp=1414587457
    • url=http://mp.weixin.qq.com?params=value
    注意:URL如果是http://mp.weixin.qq.com,后面必须跟上“/”. 
    url=http://mp,weixin.qq.com/


    对这些上述参数进行签名:

    签名算法:
    签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。
    对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。
    这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。


    步骤1. 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1:
    jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW&timestamp=1414587457&url=http://mp.weixin.qq.com?params=value

    步骤2. 对string1进行sha1签名:signature=sha1(string1),得到signature:

    0f9de62fce790f9a083d5c99e95740ceb90c27ed
    在后台程序生成一个数组,js可以通过异步请求,得到该数组,这样js就能获取到相应的值发送扫一扫请求啦!
    $signPackage = array(
      "appId"     => $appId,
      "nonceStr"  => $nonceStr,
      "timestamp" => $timestamp,
      "url"       => $url,
      "signature" => $signature,
      "rawString" => $string
    );



    示例代码可以从微信公众平台开发者文档下载

    这里给一个下载链接:

    http://demo.open.weixin.qq.com/jssdk/sample.zip

  • 相关阅读:
    Embedding技术在商业搜索与推荐场景的实践
    Elasticsearch 性能调优:段合并(Segment merge)
    elasticsearch关于index性能优化
    nginx优化图片防盗链
    NextCloud搭建
    nginx优化限制连接请求limit_req
    Android 去除标题栏和状态栏的方法
    Struts2 集合属性接收问题探讨
    解决JAVA调用mysqldump备份数据库时文件为空的问题
    Hibernate自定义字段查询 注意事项
  • 原文地址:https://www.cnblogs.com/fangjiali/p/6655182.html
Copyright © 2020-2023  润新知