企业微信 js-sdk 签名认证
整体开发步骤:(springboot+redis+nacos)
1.首先找到企业微信API中关于JS-SDK的开发说明
链接附上:JS-SDK使用权限签名算法
从这个图片中我们看到生成签名需要四个参数 : jsapi_ticket、nonceStr、timestamp、url.下面我们分别说说这四个参数的获取.
2.参与签名的四个参数的获取
1.url:获取方式在下面的汇总代码里
2.timestamp: 获取方式在下面的汇总代码里
3.nonceStr:随机数,不重复就行,我这里使用的是UUID,各位看官,也可以按照自己的喜好生成随机数
4.jsapi_ticket:这个也是今天的重中之重
从企业微信api的说明中我们知道jsapi_ticket的获取和access_token一样是有有效期,并且调用次数有限,需要缓存到自己的全局服务中的,为了满足这些要求,我们首先想到的是通过redis来实现.
为了获取jsapi_ticket我们需要一个参数access_token。获取access_token的api链接:
获取access_token
3.获取到四个参数后 对参数按照api说明 拼接成一个完整的String,后对string进行sha1算法加密进行返回。完整代码如下:
@Slf4j
@AllArgsConstructor
@RestController
@RequestMapping("/JSApiTicketUtil")
public class JSTicketWxController {
private final static String WORK_WECHAT_PREFIX = "wechat:work:secret:";
private final TempUrlConfig workWechatConfig;
private final RestTemplate restTemplate;
private final StringRedisTemplate stringRedisTemplate;
/**
* 获取微信参数,因为前端传来的url为json形式,采用@ResponsBody来接收
*
* @param param
* @return
*/
@PostMapping(value = "/util")
public AppResult<SignatureVo> getWechatParam(@RequestBody JSONObject param) {
String urlStr = param.getString("url");
SignatureVo signatureVo = new SignatureVo();
String nonceStr = nonceStr();
String timestamp = createTimestamp();
String signature = getSignature(non