之前在做微信的时候,在微信支付还有调起微信扫一扫的时候,用过js-sdk。最近,被几个做前端的同学问到了具体的流程,想想,还是写下来好点。
 
 

微信js-sdk,是微信提供给网页开发设计者使用的,在页面上使用部分微信功能的SDK。关于它的文档,可以通过微信公众平台上获取获取。http://mp.weixin.qq.com/wiki/11/74ad127cc054f6b80759c40f77ec03db.html
 
关于如何开发,其实在微信的文档上面已经说得蛮清楚的了,只要按照文档来,大概就能够调得出自己想要的功能了。
调起微信js-sdk,可以分为两个部分,配置部分和编码部分。
配置部分,需要开发者登录到微信公众平台上,对能够进行js-sdk调起的域名进行授权,只有通过授权的域名,才能调起。主要的配置在 公众号设置”的“功能设置”里填写“JS接口安全域名”。设置完成后,在需要调起的页面,导入微信官方给出的js  https://res.wx.qq.com/open/js/jweixin-1.0.0.js,前期的工作就大部分完成了。
 
编码部分主要分为前端编码和后台编码,因为微信的js-sdk调起的时候,需要向微信服务器传一些验签的参数,而这些参数,在微信官方是推荐由后台进行加密后再传回前端的。
在开始编码之前,首先了解一下从用户使用开始,到调起js-sdk进行操作得当整个流程:

大致的流程如图所示,用户通过微信客户端访问程序员开发的H5页面,该页面要调起js-sdk的某些功能,则需要在页面加载完成之后,首先请求企业的服务器,申请入appscrte等参数,然后将参数填入wx.config()函数中,该函数主要确定该页面是否可以调起js-sdk,该函数执行完成之后,默认会调用wx.ready(),如果需要页面加载完成后立马调起js-sdk的话,需要将调用的代码放在
wx.ready()中。如果不需要,就只需要在根据情况在页面上出发对应的js-sdk提供的函数即可。每个函数,都会有对应的成功与失败的回调函数,前端通过该函数,来实现对应的结果展示就行了。
 
在这个过程中,前端所需要做的,其实就是根据需求来调起微信js-sdk中的函数。前端重中之中在于页面加载完成之后的wx.config()接入,而后台的任务则是根据微信的算法,对参数进行加密,然后将数据打包返回给前端。
 
调起js-sdk所后台需要做的可以分为以下几步:
1、通过请求微信服务器获取 access_token;
2.、通过 access_token获取到调起js-sdk所需要用到的 jsapi_ticket;
3、将 noncestr(随机字符串), jsapi_ticket, timestamp(时间错), url(调起js-sdk的网址)四个参数进行排序并加密生产一串加密字符
4、将appId(公众号的唯一标识), timestamp, nonceStr:,signature(签名)返回给前端
 
具体需要涉及到的算法如下:

 public static String signatureSHA1(Map<String, String> map) {

 Set<String> keySet = map.keySet();

 String[] str = new String[map.size()];

 StringBuilder tmp = new StringBuilder();

 // 进行字典排序

 str = keySet.toArray(str);

 Arrays.sort(str);

 for (int i = 0; i < str.length; i++) {

 String t = str[i] + "=" + map.get(str[i]) + "&";

 tmp.append(t);

 }

 String tosend = tmp.toString().substring(0, tmp.length() - 1);

 MessageDigest md = null;

 byte[] bytes = null;

 try {

 md = MessageDigest.getInstance("SHA-1");

 bytes = md.digest(tosend.getBytes("utf-8"));

 } catch (Exception e) {

 e.printStackTrace();

 }

 String singe = byteToStr(bytes);

 return singe.toLowerCase();

 }
 
需要注意的是,在前端进行调试的过程中,苹果版的微信会在调出js-sdk出错的时候弹出更加详细的信息,而安卓版有时候只是没反应,连信息都不会弹出,所以建议如果确定后台算法正确的情况下,可以在苹果的微信下进行调试。
 
具体的项目实例可以看https://github.com/Seanid/wechatPay中页面调起微信支付部分

微信js-sdk调用的更多相关文章

  1. 实战微信JS SDK开发:贺卡制作与播放(1)

    前段时间忙于CanTK 2.0的开发,所以博客一直没有更新.CanTK 2.0主要增强了游戏和富媒体的开发,现在编码和测试基本完成了,等文档完成了再正式发布,里面有不少激动人心的功能,等发布时再一一细 ...

  2. 微信JS SDK接入的几点注意事项

    微信JS SDK接入,主要可以先参考官网说明文档,总结起来有几个步骤: 1.绑定域名:先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”.备注:登录后可在“开发者中心”查看对 ...

  3. 微信js sdk上传多张图片

    微信js sdk上传多张图片,微信上传多张图片 该案例已tp3.2商城为例 直接上代码: php代码: public function ind(){ $appid="111111111111 ...

  4. 调用微信js sdk

    场景:需要调用微信获取当前位置的借口. 途径:查看微信 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 .后 ...

  5. 微信JS SDK配置授权,实现分享接口

    微信开放的JS-SDK面向网页开发者提供了基于微信内的网页开发工具包,最直接的好处就是我们可以使用微信分享.扫一扫.卡券.支付等微信特有的能力.7月份的时候,因为这个分享的证书获取问题深深的栽了一坑, ...

  6. 微信js SDK接口

    微信JS-SDK说明文档 http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html 一.微信登录功能 在进行微信OAut ...

  7. 微信JS SDK使用权限签名算法

    jsapi_ticket 生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据.正常情况下,jsapi_ticket的有效期为7200秒, ...

  8. 微信js sdk分享开发摘记java版

    绑定域名和引入js的就不说了 废话不说直接上代码 public void share(HttpServletRequest request) throws Exception { StringBuff ...

  9. 微信JS SDK Demo 官方案例[转]

    摘要: 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用 ...

  10. 微信JS SDK PHP Demo

    一.JSSDK类定义 <?php class JSSDK { private $appId; private $appSecret; public function __construct($a ...

随机推荐

  1. JAVA学习:异常

    一.异常官方定义: 1.就是不正常.程序在运行时出现的不正常情况.其实就是程序中出现的问题.这个问题按照面向对象思想进行描述,并封装成了对象.因为问题的产生有产生的原因.有问题的名称.有问题的描述等多 ...

  2. .Net 异步随手记(三)

    从<.Net 异步随手记(二)>来看,总感觉还差点儿什么,就是对不同情况的处理.比如当一个 Task 完成了后,我想让它继续执行 T1,如果被取消了就去执行 T2,如果...就去执行 T3 ...

  3. HTTP method GET is not supported by this URL(转)

    源地址:http://blog.csdn.net/qfs_v/article/details/2545168 Servlet  eroor:HTTP method GET is not support ...

  4. IOS学习之路五(代码实现UITableView)

    先展示一下运行结果: 代码实现: 1.先创建一个空项目: 2.创建一个Controller:(TableViewController) 在AppDelegate.h中声明属性: //  AppDele ...

  5. GeoHash核心解析

    GeoHash核心解析 引子 机机是个好动又好学的孩子,平日里就喜欢拿着手机地图点点按按来查询一些好玩的东西.某一天机机到北海公园游玩,肚肚饿了,于是乎打开手机地图,搜索北海公园附近的餐馆,并选了其中 ...

  6. 我的Pandas应用场景(2)

    上文交代了一些啰嗦事,本文开始,就要来点实际的了. 先来一个比较简单的场景: Given:一个包括N(极其复杂,这里取3个)个列的DataFrame:df,df包括index: And:对df所有列元 ...

  7. cocos2d-x 3.0 cocos run Couldn't find the gcc toolchain.

    出现这个错误是NDK_ROOT环境变量没有设置好,要么设置错了,要么没有重启终端(也就是环境变量还没有生效).我就是因为没有重启终端坑了一个晚上,我只能帮你到这了,玩cocos2d-x 3.0的朋友, ...

  8. 对Git的一些理解

    使用Git都快2年了,能够说熟练使用git,遇到不会的也可以自己查询git帮助手册.平时可以根据shell的管道命令,组合一些命令比如git show commitID | grep “diff”来看 ...

  9. C#中 如何执行带GO的sql 语句

    C#中是不允许执行带GO的sql 语句的, 如何做呢? 思路就是将带GO的sql语句转化为分段执行, 但在同一事务内执行. 扩展方法是个很不错的主意, 但是尽量不要影响原来的cmd的一些东东, 如 c ...

  10. hdu 2828 Buy Tickets(线段树)

    一道不算复杂的线段树,就是数据处理需要好好想一下. 将输入的所有数据从后往前输入,对于最后一个值,如果它想插入第i个位置,那么他就必须在前面留下i-1个位置.对于倒数第二个人,如果他想插入j位置,那么 ...