热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

配置并学习微信JSSDK(1)

<scriptsrc"http:res.wx.qq.comopenjsjweixin-1.0.0.js&qu
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js">script>

微信JS-SDK demo http://demo.open.weixin.qq.com/jssdk/#menu-device

微信JS-SDK 说明文档:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html

demo地址 http://www.qq210.com/shoutu/android

  1. 配置公众号:微信后台-公众号设置-功能设置-JS接口安全域名
  2. 引入JS文件:
    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js">script>
  3. 配置js接口接入的配置(根据附录1获取签名):
    wx.config({
              debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。上线需设置false
              appId: 'wx693f4c6207512348b33', // 必填,公众号的唯一标识 微信后台-开发者中心
              timestamp: , // 必填,生成签名的时间戳
              nonceStr: '', // 必填,生成签名的随机串
              signature: '',// 必填,签名,见附录1
              jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
          });
    1. access_token ,需要后台缓存jsapi_ticket,有效期7200秒
    2. 根据access_token获取jsapi_ticket ,需要后台缓存jsapi_ticket,有效期7200秒
    3. 根据sha1(jsapi_ticket+url+timestamp+自定义随机串)求出配置中的signature
      $this->load->driver( 'cache' );
      
              //获取access_token,jsapi_ticket缓存
              $access_token = $this->cache->kvdb->get( 'access_token' );
              $jsapi_ticket = $this->cache->kvdb->get( 'jsapi_ticket' );
              log_message('error', "获取access_token={$access_token},jsapi_ticket={$access_token}缓存");
      
              //如果不存在access_token缓存
              if ( ! $access_token AND ! $jsapi_ticket ) {
                  log_message('error', '如果不存在access_token缓存');
      
                  $this->load->library('MyFetchurl');
      
                  //1.获取access_token
                  $access_token_json = $this->myfetchurl->https_get( "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&app>APPSECRET );
      
                  //把 json_decode() 后的对象当作数组使用,需要加第二个参数才是数组返回
                  $access_token_decode = json_decode( $access_token_json, true );
      
                  $access_token = isset( $access_token_decode['access_token'] ) ? $access_token_decode['access_token'] : '';
                  log_message('error', "获取access_token={$access_token}");
      
                  //设置access_token缓存
                  $result = $this->cache->kvdb->save( 'access_token', $access_token, EXPIRE_TIME );
                  log_message('error', "设置access_token缓存$result");
      
                  //2.获取jsapi_ticket
                  $jsapi_ticket_json = $this->myfetchurl->https_get( "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={$access_token}&type=jsapi" );
                  $jsapi_ticket_decode = json_decode( $jsapi_ticket_json, true );
                  $jsapi_ticket = isset( $jsapi_ticket_decode['ticket'] ) ? $jsapi_ticket_decode['ticket'] : '';        
                  log_message('error', "获取jsapi_ticket=$jsapi_ticket");
      
                  //设置jsapi_ticket缓存
                  $result = $this->cache->kvdb->save( 'jsapi_ticket', $jsapi_ticket, EXPIRE_TIME );    
                  log_message('error', "设置jsapi_ticket缓存=$jsapi_ticket");

              //3.签名算法 
       
              // 3.1.构造拼接串
              $view_data['timestamp'] = $timestamp = time();
              $view_data['noncestr'] = $noncestr = md5($timestamp);
              $url = base_url();
              $string "jsapi_ticket={$jsapi_ticket}&nOncestr={$noncestr}×tamp={$timestamp}&url={$url}";
              log_message('error'"构造拼接串string=$string");
       
              // 3.2.sha1拼接串
              $view_data['signature'] = sha1($string);
              $this->load->view('index.html'$view_data);


    4.   总结下上面求取签名问题
      1. sae上的curl不支持https,换成SaeFetchurl去获取:封装成方法sae_fetchurl($url, $post_data)
      2. json_decode的结果是对象,折腾很久:传人第二个参数true就可以返回数组形式
      3. SAE版的CI缓存类数据缓存获取用get() 而不是demo里面的get_metadata(),这个是获取包括缓存时间数据
    5. 订阅号的可以调用的js接口以及最后配置文件如下
      wx.config({
                debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                appId: 'wx693f4c620712348b', // 必填,公众号的唯一标识
                timestamp: '', // 必填,生成签名的时间戳
                nonceStr: '', // 必填,生成签名的随机串
                signature: '',// 必填,签名,见附录1
                jsApiList: [// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
                  'checkJsApi',
                  'hideMenuItems',
                  'showMenuItems',
                  'hideAllNonBaseMenuItem',
                  'showAllNonBaseMenuItem',
                  'translateVoice',
                  'startRecord',
                  'stopRecord',
                  'onRecordEnd',
                  'playVoice',
                  'pauseVoice',
                  'stopVoice',
                  'uploadVoice',
                  'downloadVoice',
                  'chooseImage',
                  'previewImage',
                  'uploadImage',
                  'downloadImage',
                  'getNetworkType',
                  'openLocation',
                  'getLocation',
                  'hideOptionMenu',
                  'showOptionMenu',
                  'closeWindow',
                  'scanQRCode'
                ] 
            });
  4. 测试是否验证成功
    // 微信
    wx.error(function(res){
      console.log('验证失败');
    });
    
    wx.ready(function(){
      document.querySelector('#checkJsApi').Onclick= function() {
        wx.checkJsApi({
          jsApiList:[
            'getNetworkType',
            'previewImage'
          ],
          success:function(res){
            alert(JSON.string)
          }
        });
      }
    
      // 6 设备信息接口
      // 6.1 获取当前网络状态
      document.querySelector('#getNetworkType').Onclick= function () {
        wx.getNetworkType({
          success: function (res) {
            alert(res.networkType);
          },
          fail: function (res) {
            alert(JSON.stringify(res));
          }
        });
      };
    });

在微信浏览器测试,调用结果功能成功! 配置并学习微信JS-SDK(1)

测试demo http://www.qq210.com/shoutu/android

因为漏了copy签名算法上来,补充上 如蓝色部分 谢谢陆先生的提示


推荐阅读
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了腾讯最近开源的BERT推理模型TurboTransformers,该模型在推理速度上比PyTorch快1~4倍。TurboTransformers采用了分层设计的思想,通过简化问题和加速开发,实现了快速推理能力。同时,文章还探讨了PyTorch在中间层延迟和深度神经网络中存在的问题,并提出了合并计算的解决方案。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
author-avatar
手机用户2502938557
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有