一,首先在公众号管理后台“公众号设置”的“功能设置”里填写JS接口安全域名,域名需要通过ICP备案,没有备案域名可以用SAE、BAE等平台。此外,自定义分享功能需要通过 认证才能使用,没有认证的可以跟关系好的朋友借用权限,在他的JS接口安全域名设置这里填上你的域名和共享同一个开发者ID。二,在需要调用JS接口的页面引入 JSSDK的JS文件:这个文件在需要分享的页面是必须要引用的,单独特别重申一下,其他方面请阅读官方文档。
查看公众号是否有使用JSSDK的权限
服务号、订阅号可以通过登录微信公众平台查看开发>接口权限
使用JSSDK主要包括
1、判断当前客户端版本是否支持指定JS接口、
2、分享接口(微信认证)
3、图像接口
4、音频接口
5、智能接口(识别语音并返回结果)
6、设备信息(获取网络状态)
7、地理位置
8、界面操作
9、微信扫一扫
10、微信小店(服务号必须通过微信认证)
11、微信卡券 (微信认证)
12、微信支付(服务号必须通过微信认证)
河南新华
通过 微信公众平台---->权限接口 可以得知 微信的订阅号是没有授权登录接口的,只有服务号才有该权限。这点微信公众平台在多处反复强调
最终的事实是:微信订阅号是可以实现授权登录的!
二:具体实现步骤:
1 首先在 微信公众平台(https://mpweixinqqcom/) 开发----> 基本配置----->服务器配置完成基本的配置信息
URL: 这里的地址我写的是我们HTML5项目的某个Controller或Servlet的地址,例如 http://wwwexamplecom/weixin/checkSignaturedo
注意这个CheckSignatureController中是要写代码的,代码的业务逻辑是要验证签名并返回echostr字段;还需要注意wwwexamplecom 这个地址必须是外网地址(内网不行的), 因为当你配置完所有的基本信息时,当提交的时候,微信公众平台会回答你刚才填的URL地址即http://wwwexamplecom/weixin/checkSignaturedo, 如果你填内网的地址,那么这个URL调不到,如果签名验证不过去,这个基本配置就配置不成功。当你写好这个CheckSignatureController后,还要将代码放到测试环境中去,以便微信公众平台可以回调你这个Controller
[java] view plain copy
@Controller
@RequestMapping(value="/weixin")
public class CheckSignatureController extends BaseController {
private static transient final Logger log = LoggerFactorygetLogger(CheckSignatureControllerclass);
public static String WEIXIN_TOKEN = "Token";
@RequestMapping(value ="checkSignaturedo", produces = "application/json; charset=utf-8")
@ResponseBody
public String checkSignature(HttpServletRequest request) {
String echostr = requestgetParameter("echostr"); // 随机字符串
if (isSignature(request)) {
return echostr;
}
return null;
}
// 检查签名
public boolean isSignature(HttpServletRequest request) {
String signature = requestgetParameter("signature"); // 微信加密签名
String timestamp = requestgetParameter("timestamp"); // 时间戳
String nonce = requestgetParameter("nonce"); // 随机数
String[] arr = new String[] {timestamp, nonce, WEIXIN_TOKEN};
Arrayssort(arr);
String s = arr[0] + arr[1] + arr[2];
MessageDigest md;
byte[] digest = null;
try {
md = MessageDigestgetInstance("SHA-1");
digest = mddigest(sgetBytes("utf-8"));
} catch (Exception e) {
eprintStackTrace();
}
String sign = bytesToHexString(digest);
return signatureequals(sign);
}
public static final String bytesToHexString(byte[] bArray) {
StringBuffer sb = new StringBuffer(bArraylength);
String sTemp;
for (int i = 0; i < bArraylength; i++) {
sTemp = IntegertoHexString(0xFF & bArray[i]);
if (sTemplength() < 2)
sbappend(0);
sbappend(sTemptoUpperCase());
}
return sbtoString()toLowerCase();
}
}
当你点击基本信息的提交按钮时,微信公众平台会向你项目发送http请求:
http://wwwexamplecom/weixin/checkSignaturedosignature=d96625be6855baa013e6c66cb9155dd38ed8deb5&echostr=8312595572152199567×tamp=1460511115&nonce=534926942
如果这个地址能返回http请求中的echostr参数,就能提交成功,否则提交还会提示报错
Token:是一个字符串,自己随意写,但是要保证一点CheckSignatureController中会用到Token这个值,两者要保证完全一致即可
EncodingAESKey: 我选择的是随机生成的
2: 测试号管理
登录这个地址,进行配置:http://mpweixinqqcom/debug/cgi-bin/sandboxinfoaction=showinfo&t=sandbox/index
在这个地址中要配置完所有信息
接口配置信息
URL: http://wwwexamplecom/weixin/checkSignaturedo 和基本信息配置一样
Token:和基本配置中的token保持一致
JS接口安全域名
域名:http://wwwexamplecom
登录微信公众平台。
点击公众平台名称,选择 功能设置。
在下方 JS安全接口域名 右侧点击 设置。
在弹出来的界面输入自己网站的域名,点击确定。
设置JS接口安全域名后,就可在该域名下调用微信开放的JS接口了。
请问你是否注册使用第三方平台?如果是使用第三方平台的的你需要添加你的公众号到平台里,一般的平台都可以提供你的操作给你提示来操作接入开发者并且给你提供URL配置的接口的。如果是使用微信官方的自定义菜单就不需要做以上的操作来。
另外需要注意一下,没认证的微信订阅号不能发外部链接做菜单,如果是接入微信平台,那就不能设置自定义菜单。