# jfinal-auth-api **Repository Path**: wz2520020/jfinal-auth-api ## Basic Information - **Project Name**: jfinal-auth-api - **Description**: No description available - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2016-05-06 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 按照腾讯openapi v3.0 模仿的服务端验证 http://wiki.open.qq.com/wiki/API3.0%E6%96%87%E6%A1%A3 http://wiki.open.qq.com/wiki/%E8%85%BE%E8%AE%AF%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%94%E7%94%A8%E7%AD%BE%E5%90%8D%E5%8F%82%E6%95%B0sig%E7%9A%84%E8%AF%B4%E6%98%8E # 获取appid和appkey # 签名参数sig生成说明 ## 构造原串 ### 第1步:将请求的URI路径进行URL编码(URI不含host,URI示例:/v3/user/get_info)。 请开发者关注:URL编码注意事项,否则容易导致后面签名不能通过验证。 ### 第二步:排除提交的sig 提交数据按key 进行升序排序 除非 文档中特别标注了某参数不参与签名,否则除sig外的所有参数都要参与签名。 ### 第三步:将第二步中排序后的参数(key=value)用&拼接起来,并进行URL编码。 ``` URLEncoder.encode(input, "UTF-8").replace("+", "%20").replace("*", "%2A"); ``` eg: (由于是通用说明,这里以/v3/user/get_info作为示例,且示例中的请求串不可直接复制访问) ``` 1. 原始请求信息: appkey:228bf094169a40a3bd188ba37ebe8723 HTTP请求方式:GET 请求的URI路径(不含HOST):/v3/user/get_info 请求参数:openid=11111111111111111&openkey=2222222222222222&appid=123456&pf=qzone&format=json&userip=112.90.139.30 2. 下面开始构造源串: 第1步:将请求的URI路径进行URL编码,得到: %2Fv3%2Fuser%2Fget_info 第2步:将除“sig”外的所有参数按key进行字典升序排列,排列结果为:appid,format,openid,openkey,pf,userip 第3步:将第2步中排序后的参数(key=value)用&拼接起来: appid=123456&format=json&openid=11111111111111111&openkey=2222222222222222&pf=qzone&userip=112.90.139.30 然后进行URL编码( 编码时请关注URL编码注意事项,否则容易导致后面签名不能通过验证),编码结果为: appid%3D123456%26format%3Djson%26openid%3D11111111111111111%26openkey%3D2222222222222222%26pf%3Dqzone%26 userip%3D112.90.139.30 第4步:将HTTP请求方式,第1步以及第3步中的到的字符串用&拼接起来,得到源串: GET&%2Fv3%2Fuser%2Fget_info&appid%3D123456%26format%3Djson%26openid%3D11111111111111111%26 openkey%3D2222222222222222%26pf%3Dqzone%26userip%3D112.90.139.30 ``` ## 构造密钥 得到密钥的方式:在应用的appkey末尾加上一个字节的“&”,即appkey&,例如: 228bf094169a40a3bd188ba37ebe8723& ## 生成签名值 ### 1. 使用HMAC-SHA1加密算法,使用Step2中得到的密钥对Step1中得到的源串加密。 (注:一般程序语言中会内置HMAC-SHA1加密算法的函数,例如PHP5.1.2之后的版本可直接调用hash_hmac函数。) ### 2. 然后将加密后的字符串经过Base64编码。 (注:一般程序语言中会内置Base64编码函数,例如PHP中可直接调用 base64_encode() 函数。) ### 3. 得到的签名值结果如下: FdJkiDYwMj5Aj1UG2RUPc83iokk=