微信公众号开发之如何使用JSSDK

JavaScript07

微信公众号开发之如何使用JSSDK,第1张

微信开发交流群:148540125

欢迎留言、转发、打赏

系列文章参考地址 极速开发微信公众号

项目源码参考地址 点我点我--欢迎Start

服务号、订阅号可以通过登录 微信公众平台 查看 开发>接口权限

使用JSSDK主要包括

1、判断当前客户端版本是否支持指定JS接口、

2、分享接口(微信认证)

3、图像接口

4、音频接口

5、智能接口(识别语音并返回结果)

6、设备信息(获取网络状态)

7、地理位置

8、界面操作

9、微信扫一扫

10、微信小店(服务号必须通过微信认证)

11、微信卡券 (微信认证)

12、微信支付(服务号必须通过微信认证)

官方参考文档

步骤一:绑定域名

先登录微信公众平台进入 公众号设置 的 功能设置 里填写 JS接口安全域名 。

步骤二:引入JS文件

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

如需使用摇一摇周边功能,请引入 http://res.wx.qq.com/open/js/jweixin-1.1.0.js

备注:支持使用 AMD/CMD 标准模块加载方法加载

步骤三:通过config接口注入权限验证配置

签名算法生成规则

请 官方参考文档

下面具体来讲讲 开源项目 weixin_guide 中的封装。

使用的时候只要在Controller方法上添加一个拦截器 JSSDKInterceptor 来实现签名验证再将 wx.config 需要的参数设置对应的属性在页面上进行获取。

拦截器实现如下:

在Controller中使用

JSP页面上面使用

测试结果

在AppConfig 中添加路由 me.add("/jssdk", JSSDKController.class,"/view")手机中访问 http://域名[/项目名称]/jssdk ,如果设置了 debug= true 成功了就会弹出

如果出现 {"errorMsg":"config:invalid url domian"} 请检查 步骤一:绑定域名 与你访问的域名是否在安全域名列表当中

步骤四:通过ready接口处理成功验证

步骤五:通过error接口处理失败验证

步骤六:接口调用

拦截器具体实现 参考地址 点这里

js 接口调用参考地址 点这里

以上就是JSSDK使用的介绍。

欢迎留言、转发、打赏项目

源码参考地址 点我点我--欢迎Start

config({

debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。

appId: '', // 必填,公众号的唯一标识

timestamp: , // 必填,生成签名的时间戳

nonceStr: '', // 必填,生成签名的随机串

signature: '',// 必填,签名,见附录1

jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2

})

其中主要获取signature这个参数,官方文档地址 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

获取signature主要分四部

1、使用APPID和APPSecret获取access_token;

2、使用access_token获取jsapi_ticket ;

3、用时间戳、随机数、jsapi_ticket和要访问的url按照签名算法拼接字符串;

4、对第三步的字符串进行SHA1加密,得到签名。

注意事项:

1、签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。

2、签名用的url必须是调用JS接口页面的完整URL。

3、出于安全考虑,开发者必须在服务器端实现签名的逻辑。

第一步:获取access_token(需要在服务器上 )

/**

* 微信小程序获取accessToken

*

* @author Mr.Wen

* @time 2017年8月28日

*/

public class GetAccessTokenUtil {

// 网页授权接口

public final static String GetPageAccessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET"

public static Map<String, String>getAccessToken(String appid, String appsecret) {

String requestUrl = GetPageAccessTokenUrl.replace("APPID", appid).replace("SECRET", appsecret)

HttpClient client = null

Map<String, String>result = new HashMap<String, String>()

String accessToken = null

try {

client = new DefaultHttpClient()

HttpGet httpget = new HttpGet(requestUrl)

ResponseHandler<String>responseHandler = new BasicResponseHandler()

String response = client.execute(httpget, responseHandler)

JSONObject OpenidJSONO = JSONObject.fromObject(response)

accessToken = String.valueOf(OpenidJSONO.get("access_token"))

result.put("accessToken", accessToken)

} catch (Exception e) {

e.printStackTrace()

} finally {

client.getConnectionManager().shutdown()

}

return result

}

}

第二步:获取jsapi_ticket

/**

* @author Mr.Wen

* @description 获取ticket

* @date 2018/3/29

*/

public class JsapiTicketUtil {

// 网页授权接口

public final static String GetPageAccessTokenUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi"

public static Map<String, String>JsapiTicket(String accessToken) {

String requestUrl = GetPageAccessTokenUrl.replace("ACCESS_TOKEN", accessToken)

HttpClient client = null

Map<String, String>result = new HashMap<String, String>()

try {

client = new DefaultHttpClient()

HttpGet httpget = new HttpGet(requestUrl)

ResponseHandler<String>responseHandler = new BasicResponseHandler()

String response = client.execute(httpget, responseHandler)

JSONObject OpenidJSONO = JSONObject.fromObject(response)

String errcode = String.valueOf(OpenidJSONO.get("errcode"))

String errmsg = String.valueOf(OpenidJSONO.get("errmsg"))

String ticket = String.valueOf(OpenidJSONO.get("ticket"))

String expires_in = String.valueOf(OpenidJSONO.get("expires_in"))

result.put("errcode", errcode)

result.put("errmsg", errmsg)

result.put("ticket", ticket)

result.put("expires_in", expires_in)

} catch (Exception e) {

e.printStackTrace()

} finally {

client.getConnectionManager().shutdown()

}

return result

}

}

第三部:用时间戳、随机数、jsapi_ticket和要访问的url按照签名算法拼接字符串

String noncestr = WXUtil.generate()//随机字符串

String timestamp = String.valueOf(System.currentTimeMillis() / 1000)//时间戳

//4获取url

//5、将参数排序并拼接字符串

String str = "jsapi_ticket="+ticket+"&noncestr="+noncestr+"&timestamp="+timestamp+"&url="+url

第四部:对第三步的字符串进行SHA1加密,得到签名,并返回结果

String str = "jsapi_ticket="+ticket+"&noncestr="+noncestr+"&timestamp="+timestamp+"&url="+url

//6、将字符串进行sha1加密

String signature = SHA1.SHA1(str)

Map<String,String>map=new HashMap()

map.put("timestamp",timestamp)

map.put("accessToken",accessToken)

map.put("ticket",ticket)

map.put("noncestr",noncestr)

map.put("signature",signature)

登录你的微信平台,点击“公众号设置”

点击“功能设置”,然后点击“设置”。

设置JS接口安全域名。这里填写的是一级域名,不带www和http。最多可以设置三个域名。设置完后点击确定。

在开发者中心中获取你的AppID和AppSecret,接下来在获取令牌时,需要这两个信息。

获取令牌。在服务器端完成,

获取jsapi的ticket。jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。

签名,将jsapi_ticket、noncestr、timestamp、分享的url按字母顺序连接起来,进行sha1签名