Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Q
qk_backend
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
quanku
qk_backend
Commits
17a61670
Commit
17a61670
authored
May 17, 2024
by
shiyu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
63de9a3c
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
95 additions
and
1 deletion
+95
-1
ch-core/src/main/java/com/wwdz/ch/core/api/OfficialAccountApi.java
...rc/main/java/com/wwdz/ch/core/api/OfficialAccountApi.java
+95
-1
No files found.
ch-core/src/main/java/com/wwdz/ch/core/api/OfficialAccountApi.java
View file @
17a61670
package
com.wwdz.ch.core.api
;
import
com.wwdz.ch.core.entity.ConsignSaleSubscribeMsg
;
import
com.wwdz.ch.core.type.Result
;
import
com.wwdz.ch.core.util.OkHttpUtil
;
import
com.wwdz.ch.core.util.RedisUtils
;
import
com.xxdxxs.utils.JsonUtils
;
...
...
@@ -10,8 +11,12 @@ import org.slf4j.LoggerFactory;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
java.security.MessageDigest
;
import
java.util.Formatter
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.UUID
;
import
java.util.concurrent.TimeUnit
;
/**
...
...
@@ -26,7 +31,7 @@ public class OfficialAccountApi {
private
final
static
String
SEND_MSG_URL
=
"https://api.weixin.qq.com/cgi-bin/message/template/send"
;
private
final
static
String
GET_JSAPI_TICKET
=
"https://api.weixin.qq.com/cgi-bin/ticket/getticket"
;
/**
* 测试环境和正式环境的url不同,相互隔离不会冲突
...
...
@@ -175,6 +180,95 @@ public class OfficialAccountApi {
}
public
String
getJsapiTicket
()
{
String
key
=
OFFICIAL_ACCOUNT_APPID
+
"_jsapi_ticket"
;
String
ticket
=
redisUtils
.
hasKey
(
key
)?
redisUtils
.
get
(
key
).
toString
()
:
null
;
if
(
StringUtils
.
isEmpty
(
ticket
))
{
String
token
=
getAccessToken
();
String
url
=
GET_JSAPI_TICKET
+
"?access_token="
+
token
+
"&type=jsapi"
;
OkHttpUtil
okHttpUtil
=
OkHttpUtil
.
builder
().
url
(
url
);
okHttpUtil
.
get
();
String
responseStr
=
okHttpUtil
.
async
();
logger
.
info
(
"获取JsapiTicket接口返回原文 :{}"
,
responseStr
);
if
(!
responseStr
.
contains
(
"ticket"
))
{
String
errorCode
=
JsonUtils
.
getValueByPath
(
responseStr
,
"errcode"
);
String
errmsg
=
JsonUtils
.
getValueByPath
(
responseStr
,
"errmsg"
);
//token失效
if
((
"40001"
).
equals
(
errorCode
))
{
refreshAccessToken
();
}
logger
.
error
(
">>>>>>>> 获取JsapiTicket失败: {} "
,
errmsg
);
}
else
{
ticket
=
JsonUtils
.
getValueByPath
(
responseStr
,
"ticket"
);
String
expires_in
=
JsonUtils
.
getValueByPath
(
responseStr
,
"expires_in"
);
redisUtils
.
set
(
key
,
ticket
,
Long
.
valueOf
(
expires_in
)
-
10
,
TimeUnit
.
SECONDS
);
}
}
return
ticket
;
}
public
Result
getSignature
(
String
url
)
{
try
{
String
ticket
=
getJsapiTicket
();
Map
<
String
,
String
>
map
=
new
HashMap
();
String
nonce_str
=
create_nonce_str
();
String
timestamp
=
create_timestamp
();
//注意这里参数名必须全部小写,且必须有序
String
str
=
"jsapi_ticket="
+
ticket
+
"&noncestr="
+
nonce_str
+
"×tamp="
+
timestamp
+
"&url="
+
url
;
logger
.
info
(
"公众号生成jsapi签名原串 : {}"
,
str
);
MessageDigest
crypt
=
MessageDigest
.
getInstance
(
"SHA-1"
);
crypt
.
reset
();
crypt
.
update
(
str
.
getBytes
(
"UTF-8"
));
String
signature
=
byteToHex
(
crypt
.
digest
());
map
.
put
(
"url"
,
url
);
map
.
put
(
"jsapi_ticket"
,
ticket
);
map
.
put
(
"nonceStr"
,
nonce_str
);
map
.
put
(
"timestamp"
,
timestamp
);
map
.
put
(
"signature"
,
signature
);
map
.
put
(
"appId"
,
OFFICIAL_ACCOUNT_APPID
);
//公众号appid
logger
.
info
(
"获取签名返回的数据 : {}"
,
map
);
return
Result
.
success
(
map
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"获取公众号jsapi签名 error :{}"
,
e
);
}
return
Result
.
failed
();
}
/**
* 随机加密
* @param hash
* @return
*/
private
static
String
byteToHex
(
final
byte
[]
hash
)
{
Formatter
formatter
=
new
Formatter
();
for
(
byte
b
:
hash
)
{
formatter
.
format
(
"%02x"
,
b
);
}
String
result
=
formatter
.
toString
();
formatter
.
close
();
return
result
;
}
/**
* 产生随机串--由程序自己随机产生
* @return
*/
private
String
create_nonce_str
()
{
return
UUID
.
randomUUID
().
toString
();
}
/**
* 由程序自己获取当前时间
* @return
*/
private
static
String
create_timestamp
()
{
return
Long
.
toString
(
System
.
currentTimeMillis
()
/
1000
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment