Commit 18bab57a by 庄冰

wxsign

parent eb42dcc8
...@@ -40,8 +40,8 @@ class PolicyAPI extends APIBase { ...@@ -40,8 +40,8 @@ class PolicyAPI extends APIBase {
case "submitPolicyNeedNotes"://申请信息备注提交 case "submitPolicyNeedNotes"://申请信息备注提交
opResult = this.policySve.submitPolicyNeedNotes(pobj); opResult = this.policySve.submitPolicyNeedNotes(pobj);
break; break;
case "getWxToken"://申请信息备注提交 case "getWxSign"://获取微信签名信息
opResult = this.policySve.getWxToken(); opResult = this.policySve.getWxSign(action_body.url);
break; break;
default: default:
opResult = system.getResult(null, "action_type参数错误"); opResult = system.getResult(null, "action_type参数错误");
......
const CacheBase=require("../cache.base");
const system=require("../../system");
// const OpenplatformWxop = require("../../wxop/impl/openplatformWxop");
/**
* 微信开放平台 公众号或小程序的接口调用凭据(授权方令牌)缓存(2小时后失效)
*/
class WxJsapiTicketCache extends CacheBase{
constructor(){
super();
this.prefix="wx_ticket_wx8aa8a8d4ff3da8bd";
this.restClient = system.getObject("util.restClient");
this.wxTokenSve = system.getObject("service.common.wxTokenSve");
}
desc() {
return "应用UI配置缓存";
}
prefix() {
return "wx_ticket_wx8aa8a8d4ff3da8bd";
}
async get(access_token){//公众号appid
var key = this.prefix;
var result = await this.redisClient.get(key);
var obj = null;
if(result){
console.log(result,"缓存中获取token+++++++++++++++++++++++");
obj=JSON.parse(result);
}
if(!obj){//无缓存
var newobj = await this.wxTokenSve.getJsapiTicket(access_token);
console.log(newobj);
if(newobj){
var newobjstring=JSON.stringify(newobj);
await this.redisClient.setWithEx(key,newobjstring,7000);
return newobj;
}else{
return null;
}
}
return obj;
}
}
module.exports=WxJsapiTicketCache;
\ No newline at end of file
...@@ -26,6 +26,20 @@ class WxTokenService{ ...@@ -26,6 +26,20 @@ class WxTokenService{
return null; return null;
} }
} }
/**
* 获取微信getJsapiTicket
*/
async getJsapiTicket(access_token){
try{
var url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + access_token + "&type=jsapi";
var rtn=await this.rc.execGet({},url);
console.log(rtn);
var result=JSON.parse(rtn.stdout);
return result;
}catch(e){
return null;
}
}
} }
module.exports=WxTokenService; module.exports=WxTokenService;
\ No newline at end of file
const system = require("../../../system"); const system = require("../../../system");
const crypto = require('crypto');
var settings = require("../../../../config/settings"); var settings = require("../../../../config/settings");
class PolicyService{ class PolicyService{
constructor() { constructor() {
...@@ -6,12 +7,77 @@ class PolicyService{ ...@@ -6,12 +7,77 @@ class PolicyService{
this.execClient = system.getObject("util.execClient"); this.execClient = system.getObject("util.execClient");
this.cacheManager = system.getObject("db.common.cacheManager"); this.cacheManager = system.getObject("db.common.cacheManager");
}; };
async getWxToken(){ // sha1加密
var data = await this.cacheManager["WxTokenCache"].get(); sha1(str) {
if(data){ let shasum = crypto.createHash("sha1")
return system.getResultSuccess(data); shasum.update(str)
str = shasum.digest("hex")
return str
} }
return system.getResult();
/**
* 生成签名的时间戳
* @return {字符串}
*/
createTimestamp() {
return parseInt(new Date().getTime() / 1000) + ''
}
/**
* 生成签名的随机串
* @return {字符串}
*/
createNonceStr() {
return Math.random().toString(36).substr(2, 15)
}
/**
* 对参数对象进行字典排序
* @param {对象} args 签名所需参数对象
* @return {字符串} 排序后生成字符串
*/
raw(args) {
var keys = Object.keys(args)
keys = keys.sort()
var newArgs = {}
keys.forEach(function (key) {
newArgs[key.toLowerCase()] = args[key]
})
var string = ''
for (var k in newArgs) {
string += '&' + k + '=' + newArgs[k]
}
string = string.substr(1)
return string
}
async getWxSign(url){
try {
if(!url){
return system.getResult("url不能为空");
}
var tokenRes = await this.cacheManager["WxTokenCache"].get();
if(tokenRes && tokenRes.access_token){
var ticketRes = await this.cacheManager["WxJsapiTicketCache"].get(tokenRes.access_token);
if(ticketRes && ticketRes.ticket){
var ret = {
jsapi_ticket: ticketRes.ticket,
nonceStr: "zhengcepolicy",
timestamp: parseInt(new Date().getTime() / 1000),
url: url
};
var string = this.raw(ret)
ret.signature = this.sha1(string)
ret.appId = "wx8aa8a8d4ff3da8bd";
console.log('ret', ret)
return system.getResultSuccess(ret);
}
}
return system.getResult("获取微信配置参数失败");
} catch (e) {
return system.getResult(e.stack);
}
} }
async policyQuery(pobj) { async policyQuery(pobj) {
var url = this.centerOrderUrl + "action/policy/springBoard"; var url = this.centerOrderUrl + "action/policy/springBoard";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment