自有封装公开了: https://git.oschina.net/zhuqiang/wx_sdk
1.消息接入后,每次请求的session都不同。不要想着用一个用户用session来保存数据
设置 -> 公众号设置 -> 功能设置
报错:
1. 进入授权页面报错:无效的domain
场景使用举例:获取附近有哪些网点。
关键点是:获取到 用户的地理位置信息:在微信中有两种方法,1:就是使用该功能 2:用户主动发送地理位置给公众号
1. 操作上:
1. 用户主动发送地理位置给公众号:需要用户主动发送。(繁琐)
2. 获取用户地理位置:是微信客户端为你做的(前提是关注公众号后,会弹出一个授权框,让用户同意获取地址位置信息,如果该功能是后来加上去的,需要之前关注过的用户在公众号详情页面中打开提供地理位置信息的选项,在这种情况下是比较繁琐的。然后如果是新关注者,则一本万利. 还有一种提示就是。如果地理位置是关闭的。你每次进入公众号的时候就会弹出授权框)
2. 数据实时性
1. 用户主动发送地理位置给公众号:因为是户主动发送,所以很实时
2. 获取用户地理位置:客户端自动处理。它有两种模式:
1. 每次会话的时候:触发事件(通过测试发现,只有从联系人列表/点击公众号进入到对话框页面的时候会触发)相对1来说不是很实时(但是根据概率来说,这种操作很低,除非用户一直停留在这个会话页面,但是我们可以使用把每个openid的地理位置存起来。外加提示来解决这个问题)
2. 用户进入微信公众号后每隔5s触发一次上报事件:只要停留在公众号里面就会一直上报(数据很实时,但是浪费流量)
综合的处理办法是:
使用 获取用户地理位置 方式:并把模式设置为 每次会话的时候上报地理位置, 把位置更新到session中(这个方法行不通,可以使用全局map加周期线程task来巡查清除过期的地理位置),如果用户使用到相关功能则判断是否有位置,有则回馈,如果没有则有3个可能:
1. 用户拒绝了获取地址位置信息
2. 使用该功能的是老关注者
3. 由于手机系统问题,禁用了该权限
针对以上问题:
1. 引导老用户在公众号详细信息里面打开该地理位置授权
2. 告知用户主动发送地理位置信息
3. 由于系统问题的话。就没办法了(操作起来比较复杂)
1.提示:redirect_uri 参数不对
拼接授权url的时候,如果你是按照文档拼接的。和别人拼接的url差不多的话,跳转也提示你这个错误,那么应该是:该接口的授权回调页面域名:和你当前需要授权的url不匹配。
wx.ready(function(){
alert("debug:jsSDK授权成功,该方法,实际测试来看,无论是否成功 都会在 调用 config之后调用该方法,不知道是什么原因");
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});
完整的自动授权js:使用方式:把微信的jssdk引入,再引入该js文件。就能对当前页面自动授权了
/**
* Created by win on 2015/9/16.
* 微信jssdk公用js文件
*/
$(function () {
$.ajax({
url: $contextPath + "/wx/jssdk/getConfigData.action",
type: "POST",
dataType: "json",
data: {
"appId": "xxxxxx",
"url": window.location.href
},
success: function (data) {
if (data) {
wxConfig(data);
} else {
alert("获取jssdk授权参数失败");
}
},
error: function (a, b, c) {
alert("出现了一个错误,未能请求成功!")
}
});
function wxConfig (data){
/*
* 注意:
* 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
* 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
* 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
*
* 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈:
* 邮箱地址:[email protected]
* 邮件主题:【微信JS-SDK反馈】具体问题
* 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。
*/
wx.config({
debug: true,
"appId": data.appId,
"nonceStr": data.nonceStr,
"signature": data.signature,
"timestamp": data.timestamp,
jsApiList: [
'checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQQ',
'onMenuShareWeibo',
'hideMenuItems',
'showMenuItems',
'hideAllNonBaseMenuItem',
'showAllNonBaseMenuItem',
'translateVoice',
'startRecord',
'stopRecord',
'onRecordEnd',
'playVoice',
'pauseVoice',
'stopVoice',
'uploadVoice',
'downloadVoice',
'chooseImage',
'previewImage',
'uploadImage',
'downloadImage',
'getNetworkType',
'openLocation',
'getLocation',
'hideOptionMenu',
'showOptionMenu',
'closeWindow',
'scanQRCode',
'chooseWXPay',
'openProductSpecificView',
'addCard',
'chooseCard',
'openCard'
]
});
}
});
wx.ready(function(){
//alert("debug:jsSDK授权成功,该方法,实际测试来看,无论是否成功 都会在 调用 config之后调用该方法,不知道是什么原因");
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});
wx.error(function(res){
alert("debug:jsSDK授权失败:" + JSON.stringify(res));
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});
首先js授权要通过。发起支付的话。弹出如下提示:
{“errMsg”:”chooseWXPay:fail”} 之后,告知支付非法。
需要检测的地方有两个:
流程:
map.put("appId",unifiedorder.getAppid());
map.put("timeStamp", new Date().getTime()+""); //该timeStamp和js中的timestamp 有一个驼峰写法。不要错了
map.put("nonceStr", RandomStringGenerator.getRandomStringByLength(32));
map.put("package","prepay_id=" + unifiedorder.getPrepay_id());
map.put("signType","MD5");
String sign = PaySignature.getMapSignStr(map, key); //这里的签名:要使用支付的签名,也就是需要key参与。(我之前就是用错了,一直报 支付签名验证错误)
map.put("paySign", sign); //签名