diff --git a/mini-program-test/.eslintrc.js b/mini-program-test/.eslintrc.js
new file mode 100755
index 000000000..115cc02b0
--- /dev/null
+++ b/mini-program-test/.eslintrc.js
@@ -0,0 +1,31 @@
+/*
+ * Eslint config file
+ * Documentation: https://eslint.org/docs/user-guide/configuring/
+ * Install the Eslint extension before using this feature.
+ */
+module.exports = {
+ env: {
+ es6: true,
+ browser: true,
+ node: true,
+ },
+ ecmaFeatures: {
+ modules: true,
+ },
+ parserOptions: {
+ ecmaVersion: 2018,
+ sourceType: 'module',
+ },
+ globals: {
+ wx: true,
+ App: true,
+ Page: true,
+ getCurrentPages: true,
+ getApp: true,
+ Component: true,
+ requirePlugin: true,
+ requireMiniProgram: true,
+ },
+ // extends: 'eslint:recommended',
+ rules: {},
+}
diff --git a/mini-program-test/README.md b/mini-program-test/README.md
new file mode 100644
index 000000000..4e5737ccb
--- /dev/null
+++ b/mini-program-test/README.md
@@ -0,0 +1 @@
+临时项目,作为测试微信小程序登陆之用
diff --git a/mini-program-test/app.js b/mini-program-test/app.js
new file mode 100755
index 000000000..1ed57c47f
--- /dev/null
+++ b/mini-program-test/app.js
@@ -0,0 +1,19 @@
+// app.js
+App({
+ onLaunch() {
+ // 展示本地存储能力
+ const logs = wx.getStorageSync('logs') || []
+ logs.unshift(Date.now())
+ wx.setStorageSync('logs', logs)
+
+ // 登录
+ wx.login({
+ success: res => {
+ // 发送 res.code 到后台换取 openId, sessionKey, unionId
+ }
+ })
+ },
+ globalData: {
+ userInfo: null
+ }
+})
diff --git a/mini-program-test/app.json b/mini-program-test/app.json
new file mode 100755
index 000000000..3d7616ff4
--- /dev/null
+++ b/mini-program-test/app.json
@@ -0,0 +1,14 @@
+{
+ "pages":[
+ "pages/index/index",
+ "pages/logs/logs"
+ ],
+ "window":{
+ "backgroundTextStyle":"light",
+ "navigationBarBackgroundColor": "#fff",
+ "navigationBarTitleText": "Weixin",
+ "navigationBarTextStyle":"black"
+ },
+ "style": "v2",
+ "sitemapLocation": "sitemap.json"
+}
diff --git a/mini-program-test/app.wxss b/mini-program-test/app.wxss
new file mode 100755
index 000000000..06c6fc9ce
--- /dev/null
+++ b/mini-program-test/app.wxss
@@ -0,0 +1,10 @@
+/**app.wxss**/
+.container {
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-between;
+ padding: 200rpx 0;
+ box-sizing: border-box;
+}
diff --git a/mini-program-test/pages/index/index.js b/mini-program-test/pages/index/index.js
new file mode 100755
index 000000000..eadb684cf
--- /dev/null
+++ b/mini-program-test/pages/index/index.js
@@ -0,0 +1,91 @@
+// index.js
+
+const common=require('../../utils/common.js')
+// 获取应用实例
+const app = getApp()
+
+Page({
+ data: {
+ motto: 'Hello World',
+ userInfo: {},
+ hasUserInfo: false,
+ canIUse: wx.canIUse('button.open-type.getUserInfo'),
+ canIUseGetUserProfile: false,
+ canIUseOpenData: wx.canIUse('open-data.type.userAvatarUrl') && wx.canIUse('open-data.type.userNickName'), // 如需尝试获取用户信息可改为false
+ holderText: 'to be auth'
+ },
+ // 事件处理函数
+ bindViewTap() {
+ wx.navigateTo({
+ url: '../logs/logs'
+ })
+ },
+ onLoad() {
+ if (wx.getUserProfile) {
+ this.setData({
+ canIUseGetUserProfile: true
+ })
+ }
+ },
+ getUserProfile(e) {
+ // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
+ wx.getUserProfile({
+ desc: '展示用户信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
+ success: (res) => {
+ console.log(res)
+ this.setData({
+ userInfo: res.userInfo,
+ hasUserInfo: true
+ })
+ }
+ })
+ },
+ getUserInfo(e) {
+ // 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息
+ console.log(e)
+ this.setData({
+ userInfo: e.detail.userInfo,
+ hasUserInfo: true
+ })
+ },
+ // 小程序登录 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
+ wxLogin(e){
+ let page=this;
+ wx.login({
+ success (res) {
+ console.log("res:")
+ console.log(res)
+ if (res.code) {
+ //发起网络请求
+ console.log('发起网络请求'+common.baseurl)
+ wx.request({
+ url: common.baseurl+'/api/social-login2',
+ method: "POST",
+ data: {
+ code: res.code,
+ state: 'empty',
+ type: 33,
+ username: '15601691300',
+ password: 'admin123'
+ },
+ header: {
+ 'content-type': 'application/json' // 默认值
+ },
+ success: function(res) {
+ console.log(res.data)
+ let holder="auth success, token:"+res.data.data.token
+ page.setData({holderText: holder})
+ },
+ fail: function(data){
+ console.error("请求出错");
+ console.error(data)
+ }
+
+ })
+ } else {
+ console.log('登录失败!' + res.errMsg)
+ }
+ }
+ })
+ }
+})
diff --git a/mini-program-test/pages/index/index.json b/mini-program-test/pages/index/index.json
new file mode 100755
index 000000000..8835af069
--- /dev/null
+++ b/mini-program-test/pages/index/index.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/mini-program-test/pages/index/index.wxml b/mini-program-test/pages/index/index.wxml
new file mode 100755
index 000000000..e3243c3e0
--- /dev/null
+++ b/mini-program-test/pages/index/index.wxml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+ 请使用1.4.4及以上版本基础库
+
+
+
+ {{userInfo.nickName}}
+
+
+
+
+
+
+
+
+ 授权登录测试1024
+
+
+
+ {{holderText}}
+
diff --git a/mini-program-test/pages/index/index.wxss b/mini-program-test/pages/index/index.wxss
new file mode 100755
index 000000000..eb642035f
--- /dev/null
+++ b/mini-program-test/pages/index/index.wxss
@@ -0,0 +1,19 @@
+/**index.wxss**/
+.userinfo {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ color: #aaa;
+}
+
+.userinfo-avatar {
+ overflow: hidden;
+ width: 128rpx;
+ height: 128rpx;
+ margin: 20rpx;
+ border-radius: 50%;
+}
+
+.usermotto {
+ margin-top: 200px;
+}
\ No newline at end of file
diff --git a/mini-program-test/pages/logs/logs.js b/mini-program-test/pages/logs/logs.js
new file mode 100755
index 000000000..85f6aac5a
--- /dev/null
+++ b/mini-program-test/pages/logs/logs.js
@@ -0,0 +1,18 @@
+// logs.js
+const util = require('../../utils/util.js')
+
+Page({
+ data: {
+ logs: []
+ },
+ onLoad() {
+ this.setData({
+ logs: (wx.getStorageSync('logs') || []).map(log => {
+ return {
+ date: util.formatTime(new Date(log)),
+ timeStamp: log
+ }
+ })
+ })
+ }
+})
diff --git a/mini-program-test/pages/logs/logs.json b/mini-program-test/pages/logs/logs.json
new file mode 100755
index 000000000..3ee76c183
--- /dev/null
+++ b/mini-program-test/pages/logs/logs.json
@@ -0,0 +1,4 @@
+{
+ "navigationBarTitleText": "查看启动日志",
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/mini-program-test/pages/logs/logs.wxml b/mini-program-test/pages/logs/logs.wxml
new file mode 100755
index 000000000..0b6b6456f
--- /dev/null
+++ b/mini-program-test/pages/logs/logs.wxml
@@ -0,0 +1,6 @@
+
+
+
+ {{index + 1}}. {{log.date}}
+
+
diff --git a/mini-program-test/pages/logs/logs.wxss b/mini-program-test/pages/logs/logs.wxss
new file mode 100755
index 000000000..94d4b88a2
--- /dev/null
+++ b/mini-program-test/pages/logs/logs.wxss
@@ -0,0 +1,8 @@
+.log-list {
+ display: flex;
+ flex-direction: column;
+ padding: 40rpx;
+}
+.log-item {
+ margin: 10rpx;
+}
diff --git a/mini-program-test/project.config.json b/mini-program-test/project.config.json
new file mode 100755
index 000000000..2fbe955c6
--- /dev/null
+++ b/mini-program-test/project.config.json
@@ -0,0 +1,75 @@
+{
+ "description": "项目配置文件",
+ "packOptions": {
+ "ignore": [
+ {
+ "type": "file",
+ "value": ".eslintrc.js"
+ }
+ ]
+ },
+ "setting": {
+ "bundle": false,
+ "userConfirmedBundleSwitch": false,
+ "urlCheck": true,
+ "scopeDataCheck": false,
+ "coverView": true,
+ "es6": true,
+ "postcss": true,
+ "compileHotReLoad": false,
+ "lazyloadPlaceholderEnable": false,
+ "preloadBackgroundData": false,
+ "minified": true,
+ "autoAudits": false,
+ "newFeature": false,
+ "uglifyFileName": false,
+ "uploadWithSourceMap": true,
+ "useIsolateContext": true,
+ "nodeModules": false,
+ "enhance": true,
+ "useMultiFrameRuntime": true,
+ "useApiHook": true,
+ "useApiHostProcess": true,
+ "showShadowRootInWxmlPanel": true,
+ "packNpmManually": false,
+ "enableEngineNative": false,
+ "packNpmRelationList": [],
+ "minifyWXSS": true,
+ "showES6CompileOption": false,
+ "minifyWXML": true
+ },
+ "compileType": "miniprogram",
+ "libVersion": "2.19.4",
+ "appid": "wx44d047d87e6284d8",
+ "appid1": "wx63c280fe3248a3e7",
+ "projectname": "mini-program-test",
+ "debugOptions": {
+ "hidedInDevtools": []
+ },
+ "scripts": {},
+ "staticServerOptions": {
+ "baseURL": "",
+ "servePath": ""
+ },
+ "isGameTourist": false,
+ "condition": {
+ "search": {
+ "list": []
+ },
+ "conversation": {
+ "list": []
+ },
+ "game": {
+ "list": []
+ },
+ "plugin": {
+ "list": []
+ },
+ "gamePlugin": {
+ "list": []
+ },
+ "miniprogram": {
+ "list": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/mini-program-test/sitemap.json b/mini-program-test/sitemap.json
new file mode 100755
index 000000000..ca02add20
--- /dev/null
+++ b/mini-program-test/sitemap.json
@@ -0,0 +1,7 @@
+{
+ "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
+ "rules": [{
+ "action": "allow",
+ "page": "*"
+ }]
+}
\ No newline at end of file
diff --git a/mini-program-test/utils/common.js b/mini-program-test/utils/common.js
new file mode 100755
index 000000000..a52d72520
--- /dev/null
+++ b/mini-program-test/utils/common.js
@@ -0,0 +1,3 @@
+module.exports = {
+ baseurl: "http://127.0.0.1:28080"
+}
diff --git a/mini-program-test/utils/util.js b/mini-program-test/utils/util.js
new file mode 100755
index 000000000..764bc2ce2
--- /dev/null
+++ b/mini-program-test/utils/util.js
@@ -0,0 +1,19 @@
+const formatTime = date => {
+ const year = date.getFullYear()
+ const month = date.getMonth() + 1
+ const day = date.getDate()
+ const hour = date.getHours()
+ const minute = date.getMinutes()
+ const second = date.getSeconds()
+
+ return `${[year, month, day].map(formatNumber).join('/')} ${[hour, minute, second].map(formatNumber).join(':')}`
+}
+
+const formatNumber = n => {
+ n = n.toString()
+ return n[1] ? n : `0${n}`
+}
+
+module.exports = {
+ formatTime
+}
diff --git a/pom.xml b/pom.xml
index 1ca158c9f..b6290c1d6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@
https://github.com/YunaiV/ruoyi-vue-pro
- 1.1.0-snapshot
+ 1.2.0-snapshot
1.8
${java.version}
diff --git a/sql/ruoyi-vue-pro.sql b/sql/ruoyi-vue-pro.sql
index 2b9c359dd..d79dddb2c 100644
--- a/sql/ruoyi-vue-pro.sql
+++ b/sql/ruoyi-vue-pro.sql
@@ -11,7 +11,7 @@
Target Server Version : 80026
File Encoding : 65001
- Date: 12/10/2021 21:21:14
+ Date: 29/10/2021 08:21:35
*/
SET NAMES utf8mb4;
@@ -43,12 +43,614 @@ CREATE TABLE `inf_api_access_log` (
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=1571 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='API 访问日志表';
+) ENGINE=InnoDB AUTO_INCREMENT=2173 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='API 访问日志表';
-- ----------------------------
-- Records of inf_api_access_log
-- ----------------------------
BEGIN;
+INSERT INTO `inf_api_access_log` VALUES (1571, '', 0, 0, 'yudao-user-server', 'GET', '/api/wx/mp/get-jsapi-ticket', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2021-10-24 12:39:14', '2021-10-24 12:39:15', 562, 0, '', NULL, '2021-10-24 12:39:15', NULL, '2021-10-24 12:39:15', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1572, '', 0, 0, 'yudao-user-server', 'GET', '/api/wx/mp/get-jsapi-ticket', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2021-10-24 12:39:25', '2021-10-24 12:39:25', 10, 0, '', NULL, '2021-10-24 12:39:25', NULL, '2021-10-24 12:39:25', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1573, '', 0, 0, 'yudao-user-server', 'GET', '/api/wx/mp/get-jsapi-ticket', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2021-10-24 12:39:28', '2021-10-24 12:39:28', 8, 0, '', NULL, '2021-10-24 12:39:28', NULL, '2021-10-24 12:39:28', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1574, '', 0, 0, 'yudao-user-server', 'GET', '/api/pay/order/index', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 21:55:32', '2021-10-24 21:55:32', 66, 0, '', NULL, '2021-10-24 21:55:32', NULL, '2021-10-24 21:55:32', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1575, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay.html', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:00:40', '2021-10-24 22:00:40', 39, 0, '', NULL, '2021-10-24 22:00:40', NULL, '2021-10-24 22:00:40', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1576, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay.html', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:00:42', '2021-10-24 22:00:42', 11, 0, '', NULL, '2021-10-24 22:00:42', NULL, '2021-10-24 22:00:42', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1577, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay.html', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:00:42', '2021-10-24 22:00:42', 8, 0, '', NULL, '2021-10-24 22:00:42', NULL, '2021-10-24 22:00:42', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1578, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:00:45', '2021-10-24 22:00:45', 7, 0, '', NULL, '2021-10-24 22:00:45', NULL, '2021-10-24 22:00:45', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1579, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:01:01', '2021-10-24 22:01:01', 5, 0, '', NULL, '2021-10-24 22:01:01', NULL, '2021-10-24 22:01:01', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1580, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:01:07', '2021-10-24 22:01:07', 5, 0, '', NULL, '2021-10-24 22:01:07', NULL, '2021-10-24 22:01:07', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1581, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:01:08', '2021-10-24 22:01:08', 5, 0, '', NULL, '2021-10-24 22:01:08', NULL, '2021-10-24 22:01:08', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1582, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:01:22', '2021-10-24 22:01:22', 4, 0, '', NULL, '2021-10-24 22:01:22', NULL, '2021-10-24 22:01:22', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1583, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:01:22', '2021-10-24 22:01:22', 4, 0, '', NULL, '2021-10-24 22:01:22', NULL, '2021-10-24 22:01:22', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1584, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:01:34', '2021-10-24 22:01:34', 3, 0, '', NULL, '2021-10-24 22:01:34', NULL, '2021-10-24 22:01:34', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1585, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:01:34', '2021-10-24 22:01:34', 3, 0, '', NULL, '2021-10-24 22:01:34', NULL, '2021-10-24 22:01:34', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1586, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:01:35', '2021-10-24 22:01:35', 4, 0, '', NULL, '2021-10-24 22:01:35', NULL, '2021-10-24 22:01:35', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1587, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:01:35', '2021-10-24 22:01:35', 4, 0, '', NULL, '2021-10-24 22:01:35', NULL, '2021-10-24 22:01:35', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1588, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:01:53', '2021-10-24 22:01:53', 3, 0, '', NULL, '2021-10-24 22:01:53', NULL, '2021-10-24 22:01:53', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1589, '', 0, 0, 'yudao-user-server', 'GET', '/api/wx/mp/get-jsapi-ticket', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', '2021-10-24 22:02:43', '2021-10-24 22:02:44', 904, 0, '', NULL, '2021-10-24 22:02:44', NULL, '2021-10-24 22:02:44', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1590, '', 0, 0, 'yudao-user-server', 'GET', '/api/', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:02:55', '2021-10-24 22:02:55', 4, 0, '', NULL, '2021-10-24 22:02:55', NULL, '2021-10-24 22:02:55', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1591, '', 0, 0, 'yudao-user-server', 'GET', '/api/', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:03:39', '2021-10-24 22:03:39', 58, 0, '', NULL, '2021-10-24 22:03:39', NULL, '2021-10-24 22:03:39', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1592, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:03:44', '2021-10-24 22:03:44', 7, 0, '', NULL, '2021-10-24 22:03:44', NULL, '2021-10-24 22:03:44', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1593, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:03:45', '2021-10-24 22:03:45', 6, 0, '', NULL, '2021-10-24 22:03:45', NULL, '2021-10-24 22:03:45', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1594, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:03:52', '2021-10-24 22:03:52', 6, 0, '', NULL, '2021-10-24 22:03:52', NULL, '2021-10-24 22:03:52', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1595, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:05:52', '2021-10-24 22:05:54', 2094, 0, '', NULL, '2021-10-24 22:05:54', NULL, '2021-10-24 22:05:54', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1596, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:06:34', '2021-10-24 22:06:35', 203, 0, '', NULL, '2021-10-24 22:06:35', NULL, '2021-10-24 22:06:35', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1597, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:06:54', '2021-10-24 22:06:54', 9, 0, '', NULL, '2021-10-24 22:06:54', NULL, '2021-10-24 22:06:54', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1598, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:06:55', '2021-10-24 22:06:55', 6, 0, '', NULL, '2021-10-24 22:06:55', NULL, '2021-10-24 22:06:55', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1599, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:06:57', '2021-10-24 22:06:57', 5, 0, '', NULL, '2021-10-24 22:06:57', NULL, '2021-10-24 22:06:57', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1600, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:06:58', '2021-10-24 22:06:58', 4, 0, '', NULL, '2021-10-24 22:06:58', NULL, '2021-10-24 22:06:58', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1601, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:07:20', '2021-10-24 22:07:20', 26, 0, '', NULL, '2021-10-24 22:07:20', NULL, '2021-10-24 22:07:20', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1602, '', 0, 0, 'yudao-user-server', 'GET', '/api/demo/pay', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:07:21', '2021-10-24 22:07:21', 7, 0, '', NULL, '2021-10-24 22:07:21', NULL, '2021-10-24 22:07:21', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1603, '', 0, 0, 'yudao-user-server', 'GET', '/api/wx/mp//get-jsapi-ticket', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:23:54', '2021-10-24 22:23:54', 6, 500, 'RequestRejectedException: The request was rejected because the URL contained a potentially malicious String \"//\"', NULL, '2021-10-24 22:23:54', NULL, '2021-10-24 22:23:54', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1604, '', 0, 0, 'yudao-user-server', 'GET', '/api/wx/mp//get-jsapi-ticket', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:24:07', '2021-10-24 22:24:07', 0, 500, 'RequestRejectedException: The request was rejected because the URL contained a potentially malicious String \"//\"', NULL, '2021-10-24 22:24:07', NULL, '2021-10-24 22:24:07', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1605, '', 0, 0, 'yudao-user-server', 'GET', '/api/wx/mp//get-jsapi-ticket', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:24:27', '2021-10-24 22:24:27', 0, 500, 'RequestRejectedException: The request was rejected because the URL contained a potentially malicious String \"//\"', NULL, '2021-10-24 22:24:27', NULL, '2021-10-24 22:24:27', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1606, '', 0, 0, 'yudao-user-server', 'GET', '/api/wx/mp/get-jsapi-ticket', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:24:47', '2021-10-24 22:24:47', 71, 0, '', NULL, '2021-10-24 22:24:47', NULL, '2021-10-24 22:24:47', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1607, '', 0, 0, 'yudao-user-server', 'GET', '/api/wx/mp/get-jsapi-ticket', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:25:54', '2021-10-24 22:25:54', 9, 0, '', NULL, '2021-10-24 22:25:54', NULL, '2021-10-24 22:25:54', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1608, '', 0, 0, 'yudao-user-server', 'GET', '/api/wx/mp/get-jsapi-ticket', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:32:58', '2021-10-24 22:32:58', 6, 0, '', NULL, '2021-10-24 22:32:58', NULL, '2021-10-24 22:32:58', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1609, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/get-jsapi-ticket', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:44:14', '2021-10-24 22:44:14', 15, 0, '', NULL, '2021-10-24 22:44:14', NULL, '2021-10-24 22:44:14', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1610, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:44:52', '2021-10-24 22:44:53', 186, 0, '', NULL, '2021-10-24 22:44:53', NULL, '2021-10-24 22:44:53', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1611, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:45:32', '2021-10-24 22:45:32', 8, 0, '', NULL, '2021-10-24 22:45:32', NULL, '2021-10-24 22:45:32', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1612, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:47:48', '2021-10-24 22:47:48', 6, 0, '', NULL, '2021-10-24 22:47:48', NULL, '2021-10-24 22:47:48', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1613, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:48:00', '2021-10-24 22:48:00', 7, 0, '', NULL, '2021-10-24 22:48:00', NULL, '2021-10-24 22:48:00', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1614, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:48:04', '2021-10-24 22:48:04', 8, 0, '', NULL, '2021-10-24 22:48:04', NULL, '2021-10-24 22:48:04', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1615, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:48:06', '2021-10-24 22:48:06', 7, 0, '', NULL, '2021-10-24 22:48:06', NULL, '2021-10-24 22:48:06', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1616, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:48:18', '2021-10-24 22:48:18', 17, 0, '', NULL, '2021-10-24 22:48:18', NULL, '2021-10-24 22:48:18', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1617, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:48:22', '2021-10-24 22:48:22', 8, 0, '', NULL, '2021-10-24 22:48:22', NULL, '2021-10-24 22:48:22', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1618, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:50:13', '2021-10-24 22:50:13', 7, 0, '', NULL, '2021-10-24 22:50:13', NULL, '2021-10-24 22:50:13', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1619, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:50:14', '2021-10-24 22:50:14', 9, 0, '', NULL, '2021-10-24 22:50:14', NULL, '2021-10-24 22:50:14', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1620, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:50:15', '2021-10-24 22:50:15', 6, 0, '', NULL, '2021-10-24 22:50:15', NULL, '2021-10-24 22:50:15', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1621, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:50:16', '2021-10-24 22:50:16', 7, 0, '', NULL, '2021-10-24 22:50:16', NULL, '2021-10-24 22:50:16', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1622, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:50:16', '2021-10-24 22:50:16', 7, 0, '', NULL, '2021-10-24 22:50:16', NULL, '2021-10-24 22:50:16', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1623, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:50:16', '2021-10-24 22:50:16', 6, 0, '', NULL, '2021-10-24 22:50:16', NULL, '2021-10-24 22:50:16', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1624, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:50:16', '2021-10-24 22:50:16', 8, 0, '', NULL, '2021-10-24 22:50:16', NULL, '2021-10-24 22:50:16', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1625, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:50:17', '2021-10-24 22:50:17', 10, 0, '', NULL, '2021-10-24 22:50:17', NULL, '2021-10-24 22:50:17', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1626, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:50:17', '2021-10-24 22:50:18', 8, 0, '', NULL, '2021-10-24 22:50:18', NULL, '2021-10-24 22:50:18', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1627, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 22:53:23', '2021-10-24 22:53:23', 8, 0, '', NULL, '2021-10-24 22:53:23', NULL, '2021-10-24 22:53:23', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1628, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=ib9jd3p9ptgc8fglr7ern2ten4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:53:32', '2021-10-24 22:53:32', 7, 0, '', NULL, '2021-10-24 22:53:32', NULL, '2021-10-24 22:53:32', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1629, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=ib9jd3p9ptgc8fglr7ern2ten4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:53:38', '2021-10-24 22:53:38', 8, 0, '', NULL, '2021-10-24 22:53:38', NULL, '2021-10-24 22:53:38', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1630, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=ib9jd3p9ptgc8fglr7ern2ten4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:53:44', '2021-10-24 22:53:44', 7, 0, '', NULL, '2021-10-24 22:53:44', NULL, '2021-10-24 22:53:44', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1631, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=ib9jd3p9ptgc8fglr7ern2ten4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:53:51', '2021-10-24 22:53:51', 8, 0, '', NULL, '2021-10-24 22:53:51', NULL, '2021-10-24 22:53:51', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1632, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=ib9jd3p9ptgc8fglr7ern2ten4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:53:52', '2021-10-24 22:53:52', 6, 0, '', NULL, '2021-10-24 22:53:52', NULL, '2021-10-24 22:53:52', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1633, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=ib9jd3p9ptgc8fglr7ern2ten4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:54:15', '2021-10-24 22:54:15', 7, 0, '', NULL, '2021-10-24 22:54:15', NULL, '2021-10-24 22:54:15', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1634, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 22:54:33', '2021-10-24 22:54:33', 14, 0, '', NULL, '2021-10-24 22:54:33', NULL, '2021-10-24 22:54:33', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1635, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=ib9jd3p9ptgc8fglr7ern2ten4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:54:33', '2021-10-24 22:54:33', 8, 0, '', NULL, '2021-10-24 22:54:33', NULL, '2021-10-24 22:54:33', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1636, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 22:54:40', '2021-10-24 22:54:40', 9, 0, '', NULL, '2021-10-24 22:54:40', NULL, '2021-10-24 22:54:40', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1637, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=ib9jd3p9ptgc8fglr7ern2ten4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:54:41', '2021-10-24 22:54:41', 10, 0, '', NULL, '2021-10-24 22:54:41', NULL, '2021-10-24 22:54:41', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1638, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=ib9jd3p9ptgc8fglr7ern2ten4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:54:42', '2021-10-24 22:54:42', 7, 0, '', NULL, '2021-10-24 22:54:42', NULL, '2021-10-24 22:54:42', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1639, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://127.0.0.1:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:58:43', '2021-10-24 22:58:43', 102, 0, '', NULL, '2021-10-24 22:58:43', NULL, '2021-10-24 22:58:43', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1640, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://127.0.0.1:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 22:58:44', '2021-10-24 22:58:44', 10, 0, '', NULL, '2021-10-24 22:58:44', NULL, '2021-10-24 22:58:44', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1641, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://127.0.0.1:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 Language/zh_CN webview/16350053756452272 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 22:58:54', '2021-10-24 22:58:54', 9, 0, '', NULL, '2021-10-24 22:58:54', NULL, '2021-10-24 22:58:54', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1642, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://127.0.0.1:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 Language/zh_CN webview/16350053756452272 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 22:58:59', '2021-10-24 22:58:59', 9, 0, '', NULL, '2021-10-24 22:58:59', NULL, '2021-10-24 22:58:59', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1643, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://127.0.0.1:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350053756452272 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 22:59:09', '2021-10-24 22:59:09', 9, 0, '', NULL, '2021-10-24 22:59:09', NULL, '2021-10-24 22:59:09', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1644, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 23:01:24', '2021-10-24 23:01:24', 12, 0, '', NULL, '2021-10-24 23:01:24', NULL, '2021-10-24 23:01:24', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1645, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 23:01:25', '2021-10-24 23:01:25', 10, 0, '', NULL, '2021-10-24 23:01:25', NULL, '2021-10-24 23:01:25', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1646, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350053756452272 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:01:33', '2021-10-24 23:01:33', 8, 0, '', NULL, '2021-10-24 23:01:33', NULL, '2021-10-24 23:01:33', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1647, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350053756452272 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:01:35', '2021-10-24 23:01:35', 10, 0, '', NULL, '2021-10-24 23:01:35', NULL, '2021-10-24 23:01:35', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1648, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/6.5.2.501 MiniProgramEnv/Mac MiniProgram wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 Language/zh_CN webview/16350053756452272 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:01:45', '2021-10-24 23:01:45', 9, 0, '', NULL, '2021-10-24 23:01:45', NULL, '2021-10-24 23:01:45', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1649, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/6.5.2.501 MiniProgramEnv/Mac MiniProgram wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 Language/zh_CN webview/16350053756452272 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:01:54', '2021-10-24 23:01:55', 14, 0, '', NULL, '2021-10-24 23:01:55', NULL, '2021-10-24 23:01:55', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1650, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350053756452272 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:02:00', '2021-10-24 23:02:00', 10, 0, '', NULL, '2021-10-24 23:02:00', NULL, '2021-10-24 23:02:00', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1651, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350053756452272 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:02:03', '2021-10-24 23:02:03', 9, 0, '', NULL, '2021-10-24 23:02:03', NULL, '2021-10-24 23:02:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1652, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350053756452272 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:08:23', '2021-10-24 23:08:23', 10, 0, '', NULL, '2021-10-24 23:08:23', NULL, '2021-10-24 23:08:23', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1653, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:09:42', '2021-10-24 23:09:42', 11, 0, '', NULL, '2021-10-24 23:09:42', NULL, '2021-10-24 23:09:42', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1654, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=ib9jd3p9ptgc8fglr7ern2ten4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 23:09:42', '2021-10-24 23:09:42', 9, 0, '', NULL, '2021-10-24 23:09:42', NULL, '2021-10-24 23:09:42', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1655, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:11:02', '2021-10-24 23:11:02', 10, 0, '', NULL, '2021-10-24 23:11:02', NULL, '2021-10-24 23:11:02', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1656, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=ib9jd3p9ptgc8fglr7ern2ten4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 23:11:03', '2021-10-24 23:11:03', 12, 0, '', NULL, '2021-10-24 23:11:03', NULL, '2021-10-24 23:11:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1657, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:12:05', '2021-10-24 23:12:05', 11, 0, '', NULL, '2021-10-24 23:12:05', NULL, '2021-10-24 23:12:05', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1658, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=ib9jd3p9ptgc8fglr7ern2ten4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 23:12:06', '2021-10-24 23:12:06', 8, 0, '', NULL, '2021-10-24 23:12:06', NULL, '2021-10-24 23:12:06', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1659, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:12:17', '2021-10-24 23:12:17', 10, 0, '', NULL, '2021-10-24 23:12:17', NULL, '2021-10-24 23:12:17', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1660, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=ib9jd3p9ptgc8fglr7ern2ten4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 23:12:18', '2021-10-24 23:12:18', 8, 0, '', NULL, '2021-10-24 23:12:18', NULL, '2021-10-24 23:12:18', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1661, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:13:08', '2021-10-24 23:13:08', 8, 0, '', NULL, '2021-10-24 23:13:08', NULL, '2021-10-24 23:13:08', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1662, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=ib9jd3p9ptgc8fglr7ern2ten4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 23:13:08', '2021-10-24 23:13:08', 9, 0, '', NULL, '2021-10-24 23:13:08', NULL, '2021-10-24 23:13:08', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1663, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350053756452272 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:13:09', '2021-10-24 23:13:09', 9, 0, '', NULL, '2021-10-24 23:13:09', NULL, '2021-10-24 23:13:09', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1664, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:13:45', '2021-10-24 23:13:45', 16, 0, '', NULL, '2021-10-24 23:13:45', NULL, '2021-10-24 23:13:45', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1665, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=ib9jd3p9ptgc8fglr7ern2ten4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 23:13:45', '2021-10-24 23:13:45', 9, 0, '', NULL, '2021-10-24 23:13:45', NULL, '2021-10-24 23:13:45', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1666, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350053756452272 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:13:45', '2021-10-24 23:13:45', 14, 0, '', NULL, '2021-10-24 23:13:45', NULL, '2021-10-24 23:13:45', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1667, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:14:38', '2021-10-24 23:14:38', 10, 0, '', NULL, '2021-10-24 23:14:38', NULL, '2021-10-24 23:14:38', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1668, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=ib9jd3p9ptgc8fglr7ern2ten4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 23:14:38', '2021-10-24 23:14:38', 6, 0, '', NULL, '2021-10-24 23:14:38', NULL, '2021-10-24 23:14:38', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1669, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:17:01', '2021-10-24 23:17:01', 26, 0, '', NULL, '2021-10-24 23:17:01', NULL, '2021-10-24 23:17:01', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1670, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:17:01', '2021-10-24 23:17:01', 55, 400, '请求参数不正确', NULL, '2021-10-24 23:17:01', NULL, '2021-10-24 23:17:01', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1671, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 23:17:01', '2021-10-24 23:17:01', 8, 400, '请求参数不正确', NULL, '2021-10-24 23:17:01', NULL, '2021-10-24 23:17:01', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1672, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=ib9jd3p9ptgc8fglr7ern2ten4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 23:17:01', '2021-10-24 23:17:01', 15, 0, '', NULL, '2021-10-24 23:17:01', NULL, '2021-10-24 23:17:01', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1673, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350886293937392 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:17:10', '2021-10-24 23:17:10', 6, 0, '', NULL, '2021-10-24 23:17:10', NULL, '2021-10-24 23:17:10', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1674, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350886293937392 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:17:18', '2021-10-24 23:17:18', 8, 0, '', NULL, '2021-10-24 23:17:18', NULL, '2021-10-24 23:17:18', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1675, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350886293937392 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:17:20', '2021-10-24 23:17:20', 7, 0, '', NULL, '2021-10-24 23:17:20', NULL, '2021-10-24 23:17:20', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1676, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350886293937392 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:17:22', '2021-10-24 23:17:22', 8, 0, '', NULL, '2021-10-24 23:17:22', NULL, '2021-10-24 23:17:22', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1677, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350886293937392 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:17:55', '2021-10-24 23:17:55', 65, 400, '请求参数不正确', NULL, '2021-10-24 23:17:55', NULL, '2021-10-24 23:17:55', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1678, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350886293937392 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:17:55', '2021-10-24 23:17:55', 123, 0, '', NULL, '2021-10-24 23:17:55', NULL, '2021-10-24 23:17:55', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1679, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350886293937392 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:17:59', '2021-10-24 23:17:59', 8, 400, '请求参数不正确', NULL, '2021-10-24 23:17:59', NULL, '2021-10-24 23:17:59', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1680, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350886293937392 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:17:59', '2021-10-24 23:17:59', 14, 0, '', NULL, '2021-10-24 23:17:59', NULL, '2021-10-24 23:17:59', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1681, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350886293937392 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:18:10', '2021-10-24 23:18:10', 12, 0, '', NULL, '2021-10-24 23:18:10', NULL, '2021-10-24 23:18:10', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1682, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350886293937392 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:18:10', '2021-10-24 23:18:10', 6, 400, '请求参数不正确', NULL, '2021-10-24 23:18:10', NULL, '2021-10-24 23:18:10', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1683, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350886293937392 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:18:48', '2021-10-24 23:18:52', 3525, 0, '', NULL, '2021-10-24 23:18:52', NULL, '2021-10-24 23:18:52', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1684, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350886293937392 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:18:48', '2021-10-24 23:19:02', 14069, 400, '请求参数不正确', NULL, '2021-10-24 23:19:02', NULL, '2021-10-24 23:19:02', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1685, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:19:56', '2021-10-24 23:19:58', 2565, 0, '', NULL, '2021-10-24 23:19:58', NULL, '2021-10-24 23:19:58', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1686, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:19:56', '2021-10-24 23:19:58', 2576, 0, '', NULL, '2021-10-24 23:19:58', NULL, '2021-10-24 23:19:58', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1687, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:20:29', '2021-10-24 23:20:29', 9, 0, '', NULL, '2021-10-24 23:20:29', NULL, '2021-10-24 23:20:29', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1688, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:20:29', '2021-10-24 23:20:29', 32, 0, '', NULL, '2021-10-24 23:20:29', NULL, '2021-10-24 23:20:29', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1689, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:22:14', '2021-10-24 23:22:14', 13, 0, '', NULL, '2021-10-24 23:22:14', NULL, '2021-10-24 23:22:14', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1690, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:22:14', '2021-10-24 23:22:14', 48, 0, '', NULL, '2021-10-24 23:22:14', NULL, '2021-10-24 23:22:14', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1691, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:22:17', '2021-10-24 23:22:17', 10, 0, '', NULL, '2021-10-24 23:22:17', NULL, '2021-10-24 23:22:17', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1692, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:22:17', '2021-10-24 23:22:17', 30, 0, '', NULL, '2021-10-24 23:22:17', NULL, '2021-10-24 23:22:17', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1693, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:22:24', '2021-10-24 23:22:24', 12, 0, '', NULL, '2021-10-24 23:22:24', NULL, '2021-10-24 23:22:24', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1694, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:22:24', '2021-10-24 23:22:24', 36, 0, '', NULL, '2021-10-24 23:22:24', NULL, '2021-10-24 23:22:24', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1695, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:22:56', '2021-10-24 23:22:56', 10, 0, '', NULL, '2021-10-24 23:22:56', NULL, '2021-10-24 23:22:56', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1696, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:22:56', '2021-10-24 23:22:56', 31, 0, '', NULL, '2021-10-24 23:22:56', NULL, '2021-10-24 23:22:56', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1697, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:23:00', '2021-10-24 23:23:00', 14, 0, '', NULL, '2021-10-24 23:23:00', NULL, '2021-10-24 23:23:00', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1698, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:23:00', '2021-10-24 23:23:00', 38, 0, '', NULL, '2021-10-24 23:23:00', NULL, '2021-10-24 23:23:00', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1699, '', 0, 0, 'yudao-user-server', 'POST', '/api//pay/order/submit', '{\"query\":{\"id\":\"17\",\"channelCode\":\"wx_pub\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:23:02', '2021-10-24 23:23:02', 2, 500, 'RequestRejectedException: The request was rejected because the URL contained a potentially malicious String \"//\"', NULL, '2021-10-24 23:23:02', NULL, '2021-10-24 23:23:02', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1700, '', 0, 0, 'yudao-user-server', 'POST', '/api//pay/order/submit', '{\"query\":{\"id\":\"17\",\"channelCode\":\"wx_pub\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:23:12', '2021-10-24 23:23:12', 1, 500, 'RequestRejectedException: The request was rejected because the URL contained a potentially malicious String \"//\"', NULL, '2021-10-24 23:23:12', NULL, '2021-10-24 23:23:12', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1701, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:23:43', '2021-10-24 23:23:43', 12, 0, '', NULL, '2021-10-24 23:23:43', NULL, '2021-10-24 23:23:43', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1702, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:23:43', '2021-10-24 23:23:43', 32, 0, '', NULL, '2021-10-24 23:23:43', NULL, '2021-10-24 23:23:43', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1703, '', 0, 0, 'yudao-user-server', 'POST', '/api//pay/order/submit', '{\"query\":{\"id\":\"17\",\"channelCode\":\"wx_pub\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:23:46', '2021-10-24 23:23:46', 0, 500, 'RequestRejectedException: The request was rejected because the URL contained a potentially malicious String \"//\"', NULL, '2021-10-24 23:23:46', NULL, '2021-10-24 23:23:46', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1704, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:23:49', '2021-10-24 23:23:49', 14, 0, '', NULL, '2021-10-24 23:23:49', NULL, '2021-10-24 23:23:49', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1705, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:23:49', '2021-10-24 23:23:49', 32, 0, '', NULL, '2021-10-24 23:23:49', NULL, '2021-10-24 23:23:49', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1706, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{\"id\":\"19\",\"channelCode\":\"wx_pub\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:23:54', '2021-10-24 23:23:54', 15, 500, '系统异常', NULL, '2021-10-24 23:23:54', NULL, '2021-10-24 23:23:54', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1707, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:25:25', '2021-10-24 23:25:25', 12, 0, '', NULL, '2021-10-24 23:25:25', NULL, '2021-10-24 23:25:25', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1708, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:25:25', '2021-10-24 23:25:25', 44, 0, '', NULL, '2021-10-24 23:25:25', NULL, '2021-10-24 23:25:25', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1709, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:25:34', '2021-10-24 23:25:34', 11, 0, '', NULL, '2021-10-24 23:25:34', NULL, '2021-10-24 23:25:34', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1710, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:25:34', '2021-10-24 23:25:34', 31, 0, '', NULL, '2021-10-24 23:25:34', NULL, '2021-10-24 23:25:34', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1711, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{\"id\":\"21\",\"channelCode\":\"wx_pub\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:25:37', '2021-10-24 23:25:37', 3, 500, '系统异常', NULL, '2021-10-24 23:25:37', NULL, '2021-10-24 23:25:37', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1712, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{\"id\":\"21\",\"channelCode\":\"wx_pub\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:25:48', '2021-10-24 23:25:48', 3, 500, '系统异常', NULL, '2021-10-24 23:25:48', NULL, '2021-10-24 23:25:48', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1713, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:26:00', '2021-10-24 23:26:00', 17, 0, '', NULL, '2021-10-24 23:26:00', NULL, '2021-10-24 23:26:00', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1714, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:26:00', '2021-10-24 23:26:00', 37, 0, '', NULL, '2021-10-24 23:26:00', NULL, '2021-10-24 23:26:00', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1715, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"id=22&channelCode=wx_pub\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:26:03', '2021-10-24 23:26:03', 11, 500, '系统异常', NULL, '2021-10-24 23:26:03', NULL, '2021-10-24 23:26:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1716, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:26:11', '2021-10-24 23:26:11', 9, 0, '', NULL, '2021-10-24 23:26:11', NULL, '2021-10-24 23:26:11', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1717, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:26:11', '2021-10-24 23:26:11', 29, 0, '', NULL, '2021-10-24 23:26:11', NULL, '2021-10-24 23:26:11', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1718, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:26:11', '2021-10-24 23:26:11', 16, 0, '', NULL, '2021-10-24 23:26:11', NULL, '2021-10-24 23:26:11', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1719, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:26:11', '2021-10-24 23:26:11', 39, 0, '', NULL, '2021-10-24 23:26:11', NULL, '2021-10-24 23:26:11', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1720, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:26:18', '2021-10-24 23:26:18', 17, 0, '', NULL, '2021-10-24 23:26:18', NULL, '2021-10-24 23:26:18', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1721, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:26:18', '2021-10-24 23:26:18', 42, 0, '', NULL, '2021-10-24 23:26:18', NULL, '2021-10-24 23:26:18', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1722, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:26:20', '2021-10-24 23:26:20', 12, 0, '', NULL, '2021-10-24 23:26:20', NULL, '2021-10-24 23:26:20', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1723, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:26:20', '2021-10-24 23:26:20', 38, 0, '', NULL, '2021-10-24 23:26:20', NULL, '2021-10-24 23:26:20', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1724, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:26:49', '2021-10-24 23:26:49', 8, 0, '', NULL, '2021-10-24 23:26:49', NULL, '2021-10-24 23:26:49', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1725, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:26:49', '2021-10-24 23:26:49', 29, 0, '', NULL, '2021-10-24 23:26:49', NULL, '2021-10-24 23:26:49', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1726, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:26:58', '2021-10-24 23:26:58', 11, 0, '', NULL, '2021-10-24 23:26:58', NULL, '2021-10-24 23:26:58', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1727, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:26:58', '2021-10-24 23:26:58', 32, 0, '', NULL, '2021-10-24 23:26:58', NULL, '2021-10-24 23:26:58', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1728, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{\"id\":\"28\",\"channelCode\":\"wx_pub\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:27:00', '2021-10-24 23:27:00', 4, 500, '系统异常', NULL, '2021-10-24 23:27:00', NULL, '2021-10-24 23:27:00', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1729, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:27:02', '2021-10-24 23:27:02', 14, 0, '', NULL, '2021-10-24 23:27:02', NULL, '2021-10-24 23:27:02', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1730, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:27:02', '2021-10-24 23:27:02', 32, 0, '', NULL, '2021-10-24 23:27:02', NULL, '2021-10-24 23:27:02', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1731, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{\"id\":\"29\",\"channelCode\":\"wx_pub\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:27:05', '2021-10-24 23:27:05', 3, 500, '系统异常', NULL, '2021-10-24 23:27:05', NULL, '2021-10-24 23:27:05', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1732, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:27:47', '2021-10-24 23:27:47', 142, 0, '', NULL, '2021-10-24 23:27:47', NULL, '2021-10-24 23:27:47', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1733, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:27:47', '2021-10-24 23:27:47', 129, 0, '', NULL, '2021-10-24 23:27:47', NULL, '2021-10-24 23:27:47', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1734, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:27:49', '2021-10-24 23:27:49', 14, 0, '', NULL, '2021-10-24 23:27:49', NULL, '2021-10-24 23:27:49', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1735, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:27:49', '2021-10-24 23:27:49', 67, 0, '', NULL, '2021-10-24 23:27:49', NULL, '2021-10-24 23:27:49', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1736, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{\"id\":\"31\",\"channelCode\":\"wx_pub\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:27:50', '2021-10-24 23:27:50', 15, 500, '系统异常', NULL, '2021-10-24 23:27:50', NULL, '2021-10-24 23:27:50', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1737, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:28:30', '2021-10-24 23:28:30', 8, 0, '', NULL, '2021-10-24 23:28:30', NULL, '2021-10-24 23:28:30', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1738, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:28:30', '2021-10-24 23:28:30', 35, 0, '', NULL, '2021-10-24 23:28:30', NULL, '2021-10-24 23:28:30', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1739, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:28:34', '2021-10-24 23:28:34', 23, 0, '', NULL, '2021-10-24 23:28:34', NULL, '2021-10-24 23:28:34', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1740, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:28:34', '2021-10-24 23:28:34', 41, 0, '', NULL, '2021-10-24 23:28:34', NULL, '2021-10-24 23:28:34', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1741, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"id=33&channelCode=wx_pub\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:28:36', '2021-10-24 23:28:36', 10, 500, '系统异常', NULL, '2021-10-24 23:28:36', NULL, '2021-10-24 23:28:36', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1742, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:28:46', '2021-10-24 23:28:46', 10, 0, '', NULL, '2021-10-24 23:28:46', NULL, '2021-10-24 23:28:46', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1743, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:28:46', '2021-10-24 23:28:46', 33, 0, '', NULL, '2021-10-24 23:28:46', NULL, '2021-10-24 23:28:46', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1744, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"id=34&channelCode=wx_pub\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:28:47', '2021-10-24 23:28:47', 4, 500, '系统异常', NULL, '2021-10-24 23:28:47', NULL, '2021-10-24 23:28:47', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1745, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:30:13', '2021-10-24 23:30:13', 10, 0, '', NULL, '2021-10-24 23:30:13', NULL, '2021-10-24 23:30:13', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1746, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:30:13', '2021-10-24 23:30:13', 39, 0, '', NULL, '2021-10-24 23:30:13', NULL, '2021-10-24 23:30:13', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1747, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:30:23', '2021-10-24 23:30:23', 12, 0, '', NULL, '2021-10-24 23:30:24', NULL, '2021-10-24 23:30:24', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1748, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:30:23', '2021-10-24 23:30:24', 34, 0, '', NULL, '2021-10-24 23:30:24', NULL, '2021-10-24 23:30:24', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1749, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:30:44', '2021-10-24 23:30:44', 15, 0, '', NULL, '2021-10-24 23:30:44', NULL, '2021-10-24 23:30:44', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1750, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:30:44', '2021-10-24 23:30:44', 38, 0, '', NULL, '2021-10-24 23:30:44', NULL, '2021-10-24 23:30:44', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1751, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:30:48', '2021-10-24 23:30:48', 19, 0, '', NULL, '2021-10-24 23:30:48', NULL, '2021-10-24 23:30:48', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1752, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:30:48', '2021-10-24 23:30:48', 46, 0, '', NULL, '2021-10-24 23:30:48', NULL, '2021-10-24 23:30:48', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1753, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{\"{\\\"id\\\":38,\\\"channelCode\\\":\\\"wx_pub\\\"}\":\"\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:30:50', '2021-10-24 23:30:50', 4, 500, '系统异常', NULL, '2021-10-24 23:30:50', NULL, '2021-10-24 23:30:50', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1754, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:32:37', '2021-10-24 23:32:37', 10, 0, '', NULL, '2021-10-24 23:32:37', NULL, '2021-10-24 23:32:37', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1755, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:32:37', '2021-10-24 23:32:37', 42, 0, '', NULL, '2021-10-24 23:32:37', NULL, '2021-10-24 23:32:37', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1756, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:32:41', '2021-10-24 23:32:41', 15, 0, '', NULL, '2021-10-24 23:32:41', NULL, '2021-10-24 23:32:41', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1757, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:32:41', '2021-10-24 23:32:41', 45, 0, '', NULL, '2021-10-24 23:32:41', NULL, '2021-10-24 23:32:41', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1758, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:32:44', '2021-10-24 23:32:44', 10, 0, '', NULL, '2021-10-24 23:32:44', NULL, '2021-10-24 23:32:44', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1759, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:32:44', '2021-10-24 23:32:44', 30, 0, '', NULL, '2021-10-24 23:32:44', NULL, '2021-10-24 23:32:44', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1760, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":41,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:32:45', '2021-10-24 23:32:45', 626, 0, '', NULL, '2021-10-24 23:32:45', NULL, '2021-10-24 23:32:45', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1761, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:32:56', '2021-10-24 23:32:56', 13, 0, '', NULL, '2021-10-24 23:32:56', NULL, '2021-10-24 23:32:56', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1762, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:32:56', '2021-10-24 23:32:56', 30, 0, '', NULL, '2021-10-24 23:32:56', NULL, '2021-10-24 23:32:56', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1763, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":42,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:33:03', '2021-10-24 23:33:03', 343, 0, '', NULL, '2021-10-24 23:33:03', NULL, '2021-10-24 23:33:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1764, '', 0, 0, 'yudao-user-server', 'GET', '/api/pay/order/submit', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 23:33:14', '2021-10-24 23:33:14', 4, 405, '请求方法不正确:Request method \'GET\' not supported', NULL, '2021-10-24 23:33:14', NULL, '2021-10-24 23:33:14', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1765, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":42,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:33:33', '2021-10-24 23:33:33', 349, 0, '', NULL, '2021-10-24 23:33:33', NULL, '2021-10-24 23:33:33', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1766, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 23:37:14', '2021-10-24 23:37:14', 134, 0, '', NULL, '2021-10-24 23:37:14', NULL, '2021-10-24 23:37:14', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1767, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-24 23:37:14', '2021-10-24 23:37:14', 153, 0, '', NULL, '2021-10-24 23:37:14', NULL, '2021-10-24 23:37:14', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1768, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:37:45', '2021-10-24 23:37:45', 12, 0, '', NULL, '2021-10-24 23:37:45', NULL, '2021-10-24 23:37:45', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1769, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:37:45', '2021-10-24 23:37:45', 35, 0, '', NULL, '2021-10-24 23:37:45', NULL, '2021-10-24 23:37:45', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1770, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":44,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:37:47', '2021-10-24 23:37:48', 566, 0, '', NULL, '2021-10-24 23:37:48', NULL, '2021-10-24 23:37:48', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1771, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":44,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:38:13', '2021-10-24 23:38:13', 302, 0, '', NULL, '2021-10-24 23:38:14', NULL, '2021-10-24 23:38:14', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1772, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:39:07', '2021-10-24 23:39:07', 7, 0, '', NULL, '2021-10-24 23:39:07', NULL, '2021-10-24 23:39:07', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1773, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:39:07', '2021-10-24 23:39:07', 30, 0, '', NULL, '2021-10-24 23:39:07', NULL, '2021-10-24 23:39:07', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1774, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:39:10', '2021-10-24 23:39:10', 10, 0, '', NULL, '2021-10-24 23:39:10', NULL, '2021-10-24 23:39:10', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1775, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:39:10', '2021-10-24 23:39:10', 31, 0, '', NULL, '2021-10-24 23:39:10', NULL, '2021-10-24 23:39:10', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1776, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":46,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:39:12', '2021-10-24 23:39:13', 348, 0, '', NULL, '2021-10-24 23:39:13', NULL, '2021-10-24 23:39:13', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1777, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:39:38', '2021-10-24 23:39:38', 9, 0, '', NULL, '2021-10-24 23:39:38', NULL, '2021-10-24 23:39:38', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1778, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:39:38', '2021-10-24 23:39:38', 30, 0, '', NULL, '2021-10-24 23:39:38', NULL, '2021-10-24 23:39:38', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1779, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:39:38', '2021-10-24 23:39:38', 8, 0, '', NULL, '2021-10-24 23:39:38', NULL, '2021-10-24 23:39:38', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1780, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:39:38', '2021-10-24 23:39:38', 31, 0, '', NULL, '2021-10-24 23:39:38', NULL, '2021-10-24 23:39:38', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1781, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:39:43', '2021-10-24 23:39:43', 9, 0, '', NULL, '2021-10-24 23:39:43', NULL, '2021-10-24 23:39:43', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1782, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:39:43', '2021-10-24 23:39:43', 28, 0, '', NULL, '2021-10-24 23:39:43', NULL, '2021-10-24 23:39:43', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1783, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":49,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:39:45', '2021-10-24 23:39:45', 308, 0, '', NULL, '2021-10-24 23:39:45', NULL, '2021-10-24 23:39:45', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1784, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:41:24', '2021-10-24 23:41:24', 10, 0, '', NULL, '2021-10-24 23:41:24', NULL, '2021-10-24 23:41:24', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1785, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:41:24', '2021-10-24 23:41:25', 34, 0, '', NULL, '2021-10-24 23:41:25', NULL, '2021-10-24 23:41:25', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1786, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:42:19', '2021-10-24 23:42:19', 8, 0, '', NULL, '2021-10-24 23:42:19', NULL, '2021-10-24 23:42:19', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1787, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:42:19', '2021-10-24 23:42:19', 26, 0, '', NULL, '2021-10-24 23:42:19', NULL, '2021-10-24 23:42:19', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1788, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:42:33', '2021-10-24 23:42:33', 8, 0, '', NULL, '2021-10-24 23:42:33', NULL, '2021-10-24 23:42:33', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1789, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:42:33', '2021-10-24 23:42:33', 26, 0, '', NULL, '2021-10-24 23:42:33', NULL, '2021-10-24 23:42:33', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1790, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:42:39', '2021-10-24 23:42:39', 8, 0, '', NULL, '2021-10-24 23:42:39', NULL, '2021-10-24 23:42:39', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1791, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:42:39', '2021-10-24 23:42:39', 45, 0, '', NULL, '2021-10-24 23:42:39', NULL, '2021-10-24 23:42:39', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1792, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":53,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:42:41', '2021-10-24 23:42:42', 508, 0, '', NULL, '2021-10-24 23:42:42', NULL, '2021-10-24 23:42:42', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1793, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/6.8.0(0x16080000) MacWechat/3.2.1(0x13020111) NetType/WIFI WindowsWechat', '2021-10-24 23:44:26', '2021-10-24 23:44:26', 8, 0, '', NULL, '2021-10-24 23:44:26', NULL, '2021-10-24 23:44:26', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1794, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/6.8.0(0x16080000) MacWechat/3.2.1(0x13020111) NetType/WIFI WindowsWechat', '2021-10-24 23:44:26', '2021-10-24 23:44:26', 25, 0, '', NULL, '2021-10-24 23:44:26', NULL, '2021-10-24 23:44:26', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1795, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":54,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/6.8.0(0x16080000) MacWechat/3.2.1(0x13020111) NetType/WIFI WindowsWechat', '2021-10-24 23:44:28', '2021-10-24 23:44:28', 288, 0, '', NULL, '2021-10-24 23:44:28', NULL, '2021-10-24 23:44:28', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1796, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":54,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/6.8.0(0x16080000) MacWechat/3.2.1(0x13020111) NetType/WIFI WindowsWechat', '2021-10-24 23:44:28', '2021-10-24 23:44:29', 307, 0, '', NULL, '2021-10-24 23:44:29', NULL, '2021-10-24 23:44:29', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1797, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":54,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/6.8.0(0x16080000) MacWechat/3.2.1(0x13020111) NetType/WIFI WindowsWechat', '2021-10-24 23:44:29', '2021-10-24 23:44:30', 270, 0, '', NULL, '2021-10-24 23:44:30', NULL, '2021-10-24 23:44:30', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1798, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":54,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/6.8.0(0x16080000) MacWechat/3.2.1(0x13020111) NetType/WIFI WindowsWechat', '2021-10-24 23:44:30', '2021-10-24 23:44:30', 298, 0, '', NULL, '2021-10-24 23:44:30', NULL, '2021-10-24 23:44:30', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1799, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":54,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/6.8.0(0x16080000) MacWechat/3.2.1(0x13020111) NetType/WIFI WindowsWechat', '2021-10-24 23:44:30', '2021-10-24 23:44:30', 261, 0, '', NULL, '2021-10-24 23:44:30', NULL, '2021-10-24 23:44:30', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1800, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":54,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/6.8.0(0x16080000) MacWechat/3.2.1(0x13020111) NetType/WIFI WindowsWechat', '2021-10-24 23:44:30', '2021-10-24 23:44:30', 259, 0, '', NULL, '2021-10-24 23:44:30', NULL, '2021-10-24 23:44:30', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1801, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":54,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/6.8.0(0x16080000) MacWechat/3.2.1(0x13020111) NetType/WIFI WindowsWechat', '2021-10-24 23:44:30', '2021-10-24 23:44:31', 308, 0, '', NULL, '2021-10-24 23:44:31', NULL, '2021-10-24 23:44:31', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1802, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":54,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/6.8.0(0x16080000) MacWechat/3.2.1(0x13020111) NetType/WIFI WindowsWechat', '2021-10-24 23:44:30', '2021-10-24 23:44:31', 242, 0, '', NULL, '2021-10-24 23:44:31', NULL, '2021-10-24 23:44:31', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1803, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":54,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/6.8.0(0x16080000) MacWechat/3.2.1(0x13020111) NetType/WIFI WindowsWechat', '2021-10-24 23:44:31', '2021-10-24 23:44:31', 274, 0, '', NULL, '2021-10-24 23:44:31', NULL, '2021-10-24 23:44:31', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1804, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:44:45', '2021-10-24 23:44:45', 9, 0, '', NULL, '2021-10-24 23:44:45', NULL, '2021-10-24 23:44:45', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1805, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:44:45', '2021-10-24 23:44:45', 124, 0, '', NULL, '2021-10-24 23:44:45', NULL, '2021-10-24 23:44:45', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1806, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/6.8.0(0x16080000) MacWechat/3.2.1(0x13020111) NetType/WIFI WindowsWechat', '2021-10-24 23:44:47', '2021-10-24 23:44:47', 9, 0, '', NULL, '2021-10-24 23:44:47', NULL, '2021-10-24 23:44:47', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1807, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/6.8.0(0x16080000) MacWechat/3.2.1(0x13020111) NetType/WIFI WindowsWechat', '2021-10-24 23:44:47', '2021-10-24 23:44:47', 25, 0, '', NULL, '2021-10-24 23:44:47', NULL, '2021-10-24 23:44:47', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1808, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":56,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/6.8.0(0x16080000) MacWechat/3.2.1(0x13020111) NetType/WIFI WindowsWechat', '2021-10-24 23:44:49', '2021-10-24 23:44:49', 251, 0, '', NULL, '2021-10-24 23:44:49', NULL, '2021-10-24 23:44:49', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1809, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":56,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/6.8.0(0x16080000) MacWechat/3.2.1(0x13020111) NetType/WIFI WindowsWechat', '2021-10-24 23:44:54', '2021-10-24 23:44:54', 211, 0, '', NULL, '2021-10-24 23:44:54', NULL, '2021-10-24 23:44:54', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1810, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:45:59', '2021-10-24 23:45:59', 9, 0, '', NULL, '2021-10-24 23:45:59', NULL, '2021-10-24 23:45:59', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1811, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-24 23:45:59', '2021-10-24 23:45:59', 35, 0, '', NULL, '2021-10-24 23:45:59', NULL, '2021-10-24 23:45:59', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1812, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://ningmengyum.nat300.top:28080/static/pay.html\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:46:06', '2021-10-24 23:46:06', 10, 0, '', NULL, '2021-10-24 23:46:06', NULL, '2021-10-24 23:46:06', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1813, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:46:06', '2021-10-24 23:46:06', 28, 0, '', NULL, '2021-10-24 23:46:06', NULL, '2021-10-24 23:46:06', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1814, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":58,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:46:07', '2021-10-24 23:46:08', 459, 0, '', NULL, '2021-10-24 23:46:08', NULL, '2021-10-24 23:46:08', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1815, '', 0, 0, 'yudao-user-server', 'GET', '/api/MP_verify_DKOvVzFP7vPwwHx2.txt', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-25 08:31:12', '2021-10-25 08:31:12', 22, 0, '', NULL, '2021-10-25 08:31:12', NULL, '2021-10-25 08:31:12', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1816, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:38:17', '2021-10-25 08:38:17', 133, 0, '', NULL, '2021-10-25 08:38:17', NULL, '2021-10-25 08:38:17', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1817, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:38:17', '2021-10-25 08:38:18', 648, 500, '系统异常', NULL, '2021-10-25 08:38:18', NULL, '2021-10-25 08:38:18', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1818, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-25 08:38:41', '2021-10-25 08:38:41', 85, 500, '系统异常', NULL, '2021-10-25 08:38:41', NULL, '2021-10-25 08:38:41', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1819, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-25 08:38:50', '2021-10-25 08:38:50', 22, 0, '', NULL, '2021-10-25 08:38:50', NULL, '2021-10-25 08:38:50', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1820, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-25 08:39:19', '2021-10-25 08:39:19', 26, 0, '', NULL, '2021-10-25 08:39:19', NULL, '2021-10-25 08:39:19', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1821, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-25 08:39:19', '2021-10-25 08:39:28', 9146, 500, '系统异常', NULL, '2021-10-25 08:39:28', NULL, '2021-10-25 08:39:28', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1822, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-25 08:40:47', '2021-10-25 08:40:47', 27, 0, '', NULL, '2021-10-25 08:40:47', NULL, '2021-10-25 08:40:47', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1823, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-25 08:40:47', '2021-10-25 08:40:47', 890, 0, '', NULL, '2021-10-25 08:40:47', NULL, '2021-10-25 08:40:47', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1824, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:41:27', '2021-10-25 08:41:27', 9, 0, '', NULL, '2021-10-25 08:41:27', NULL, '2021-10-25 08:41:27', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1825, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:41:27', '2021-10-25 08:41:27', 25, 0, '', NULL, '2021-10-25 08:41:27', NULL, '2021-10-25 08:41:27', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1826, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-25 08:41:31', '2021-10-25 08:41:31', 9, 0, '', NULL, '2021-10-25 08:41:31', NULL, '2021-10-25 08:41:31', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1827, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-25 08:41:31', '2021-10-25 08:41:31', 21, 0, '', NULL, '2021-10-25 08:41:31', NULL, '2021-10-25 08:41:31', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1828, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-25 08:41:48', '2021-10-25 08:41:48', 7, 0, '', NULL, '2021-10-25 08:41:48', NULL, '2021-10-25 08:41:48', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1829, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-25 08:41:48', '2021-10-25 08:41:48', 24, 0, '', NULL, '2021-10-25 08:41:48', NULL, '2021-10-25 08:41:48', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1830, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":65,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '101.82.138.223', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-25 08:41:52', '2021-10-25 08:41:53', 683, 0, '', NULL, '2021-10-25 08:41:53', NULL, '2021-10-25 08:41:53', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1831, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 08:42:18', '2021-10-25 08:42:18', 20, 0, '', NULL, '2021-10-25 08:42:18', NULL, '2021-10-25 08:42:18', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1832, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 08:42:18', '2021-10-25 08:42:18', 6, 0, '', NULL, '2021-10-25 08:42:18', NULL, '2021-10-25 08:42:18', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1833, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":66,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 08:42:19', '2021-10-25 08:42:19', 452, 0, '', NULL, '2021-10-25 08:42:19', NULL, '2021-10-25 08:42:19', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1834, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":66,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 08:42:24', '2021-10-25 08:42:25', 729, 0, '', NULL, '2021-10-25 08:42:25', NULL, '2021-10-25 08:42:25', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1835, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:45:00', '2021-10-25 08:45:00', 10, 0, '', NULL, '2021-10-25 08:45:00', NULL, '2021-10-25 08:45:00', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1836, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:45:00', '2021-10-25 08:45:00', 49, 0, '', NULL, '2021-10-25 08:45:00', NULL, '2021-10-25 08:45:00', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1837, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:45:39', '2021-10-25 08:45:39', 8, 0, '', NULL, '2021-10-25 08:45:39', NULL, '2021-10-25 08:45:39', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1838, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:45:39', '2021-10-25 08:45:39', 27, 0, '', NULL, '2021-10-25 08:45:39', NULL, '2021-10-25 08:45:39', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1839, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-25 08:45:44', '2021-10-25 08:45:44', 7, 0, '', NULL, '2021-10-25 08:45:44', NULL, '2021-10-25 08:45:44', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1840, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-25 08:45:44', '2021-10-25 08:45:44', 21, 0, '', NULL, '2021-10-25 08:45:44', NULL, '2021-10-25 08:45:44', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1841, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":69,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '101.82.138.223', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-25 08:45:46', '2021-10-25 08:45:46', 681, 0, '', NULL, '2021-10-25 08:45:46', NULL, '2021-10-25 08:45:46', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1842, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":69,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '101.82.138.223', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-25 08:45:47', '2021-10-25 08:45:49', 1459, 0, '', NULL, '2021-10-25 08:45:49', NULL, '2021-10-25 08:45:49', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1843, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:47:08', '2021-10-25 08:47:08', 22, 0, '', NULL, '2021-10-25 08:47:08', NULL, '2021-10-25 08:47:08', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1844, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:47:08', '2021-10-25 08:47:08', 7, 0, '', NULL, '2021-10-25 08:47:08', NULL, '2021-10-25 08:47:08', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1845, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:47:47', '2021-10-25 08:47:47', 19, 0, '', NULL, '2021-10-25 08:47:47', NULL, '2021-10-25 08:47:47', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1846, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:47:49', '2021-10-25 08:47:49', 7, 0, '', NULL, '2021-10-25 08:47:49', NULL, '2021-10-25 08:47:49', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1847, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:47:50', '2021-10-25 08:47:50', 6, 0, '', NULL, '2021-10-25 08:47:50', NULL, '2021-10-25 08:47:50', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1848, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:47:50', '2021-10-25 08:47:50', 17, 0, '', NULL, '2021-10-25 08:47:50', NULL, '2021-10-25 08:47:50', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1849, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:48:04', '2021-10-25 08:48:04', 9, 0, '', NULL, '2021-10-25 08:48:04', NULL, '2021-10-25 08:48:04', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1850, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:48:04', '2021-10-25 08:48:04', 23, 0, '', NULL, '2021-10-25 08:48:04', NULL, '2021-10-25 08:48:04', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1851, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-25 08:48:05', '2021-10-25 08:48:05', 7, 0, '', NULL, '2021-10-25 08:48:05', NULL, '2021-10-25 08:48:05', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1852, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-25 08:48:05', '2021-10-25 08:48:05', 21, 0, '', NULL, '2021-10-25 08:48:05', NULL, '2021-10-25 08:48:05', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1853, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-25 08:48:06', '2021-10-25 08:48:06', 6, 0, '', NULL, '2021-10-25 08:48:06', NULL, '2021-10-25 08:48:06', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1854, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-25 08:48:06', '2021-10-25 08:48:06', 20, 0, '', NULL, '2021-10-25 08:48:06', NULL, '2021-10-25 08:48:06', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1855, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-25 08:48:38', '2021-10-25 08:48:38', 6, 0, '', NULL, '2021-10-25 08:48:38', NULL, '2021-10-25 08:48:38', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1856, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-25 08:48:38', '2021-10-25 08:48:38', 24, 0, '', NULL, '2021-10-25 08:48:38', NULL, '2021-10-25 08:48:38', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1857, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 08:50:30', '2021-10-25 08:50:30', 21, 0, '', NULL, '2021-10-25 08:50:30', NULL, '2021-10-25 08:50:30', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1858, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 08:50:31', '2021-10-25 08:50:31', 6, 0, '', NULL, '2021-10-25 08:50:31', NULL, '2021-10-25 08:50:31', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1859, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":77,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 08:50:31', '2021-10-25 08:51:04', 32995, 0, '', NULL, '2021-10-25 08:51:04', NULL, '2021-10-25 08:51:04', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1860, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:51:08', '2021-10-25 08:51:08', 6, 0, '', NULL, '2021-10-25 08:51:08', NULL, '2021-10-25 08:51:08', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1861, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:51:08', '2021-10-25 08:51:08', 19, 0, '', NULL, '2021-10-25 08:51:08', NULL, '2021-10-25 08:51:08', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1862, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 08:51:14', '2021-10-25 08:51:14', 6, 0, '', NULL, '2021-10-25 08:51:14', NULL, '2021-10-25 08:51:14', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1863, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 08:51:14', '2021-10-25 08:51:14', 18, 0, '', NULL, '2021-10-25 08:51:14', NULL, '2021-10-25 08:51:14', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1864, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":79,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 08:51:14', '2021-10-25 08:51:19', 4428, 0, '', NULL, '2021-10-25 08:51:19', NULL, '2021-10-25 08:51:19', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1865, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":79,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 08:53:07', '2021-10-25 08:53:08', 446, 0, '', NULL, '2021-10-25 08:53:08', NULL, '2021-10-25 08:53:08', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1866, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 08:53:15', '2021-10-25 08:53:15', 7, 0, '', NULL, '2021-10-25 08:53:15', NULL, '2021-10-25 08:53:15', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1867, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 08:53:15', '2021-10-25 08:53:15', 18, 0, '', NULL, '2021-10-25 08:53:15', NULL, '2021-10-25 08:53:15', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1868, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":80,\\\"channelCode\\\":\\\"wx_pub\\\"}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 08:53:15', '2021-10-25 08:53:16', 399, 0, '', NULL, '2021-10-25 08:53:16', NULL, '2021-10-25 08:53:16', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1869, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 09:01:32', '2021-10-25 09:01:32', 26, 0, '', NULL, '2021-10-25 09:01:32', NULL, '2021-10-25 09:01:32', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1870, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 09:01:32', '2021-10-25 09:01:32', 6, 0, '', NULL, '2021-10-25 09:01:32', NULL, '2021-10-25 09:01:32', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1871, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 09:03:27', '2021-10-25 09:03:27', 7, 0, '', NULL, '2021-10-25 09:03:27', NULL, '2021-10-25 09:03:27', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1872, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 09:03:27', '2021-10-25 09:03:27', 18, 0, '', NULL, '2021-10-25 09:03:27', NULL, '2021-10-25 09:03:27', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1873, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 09:05:48', '2021-10-25 09:05:48', 7, 0, '', NULL, '2021-10-25 09:05:48', NULL, '2021-10-25 09:05:48', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1874, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 09:05:48', '2021-10-25 09:05:48', 20, 0, '', NULL, '2021-10-25 09:05:48', NULL, '2021-10-25 09:05:48', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1875, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 09:06:02', '2021-10-25 09:06:02', 5, 0, '', NULL, '2021-10-25 09:06:02', NULL, '2021-10-25 09:06:02', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1876, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 09:06:02', '2021-10-25 09:06:02', 17, 0, '', NULL, '2021-10-25 09:06:02', NULL, '2021-10-25 09:06:02', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1877, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 09:08:56', '2021-10-25 09:08:56', 8, 0, '', NULL, '2021-10-25 09:08:56', NULL, '2021-10-25 09:08:56', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1878, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 09:08:56', '2021-10-25 09:08:56', 30, 0, '', NULL, '2021-10-25 09:08:56', NULL, '2021-10-25 09:08:56', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1879, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-25 09:12:54', '2021-10-25 09:12:54', 93, 0, '', NULL, '2021-10-25 09:12:54', NULL, '2021-10-25 09:12:54', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1880, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-25 09:12:54', '2021-10-25 09:12:54', 104, 0, '', NULL, '2021-10-25 09:12:54', NULL, '2021-10-25 09:12:54', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1881, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:13:12', '2021-10-25 09:13:12', 7, 0, '', NULL, '2021-10-25 09:13:12', NULL, '2021-10-25 09:13:12', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1882, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:13:12', '2021-10-25 09:13:12', 22, 0, '', NULL, '2021-10-25 09:13:12', NULL, '2021-10-25 09:13:12', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1883, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":87,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:13:13', '2021-10-25 09:13:13', 86, 2002000999, 'IllegalArgumentException: 支付请求的 openid 不能为空!', NULL, '2021-10-25 09:13:13', NULL, '2021-10-25 09:13:13', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1884, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":87,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:13:22', '2021-10-25 09:13:23', 33, 2002000999, 'IllegalArgumentException: 支付请求的 openid 不能为空!', NULL, '2021-10-25 09:13:23', NULL, '2021-10-25 09:13:23', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1885, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":87,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:14:06', '2021-10-25 09:14:06', 165, 2002000999, 'IllegalArgumentException: 支付请求的 openid 不能为空!', NULL, '2021-10-25 09:14:06', NULL, '2021-10-25 09:14:06', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1886, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":87,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:14:24', '2021-10-25 09:14:51', 26325, 2002000999, 'IllegalArgumentException: 支付请求的 openid 不能为空!', NULL, '2021-10-25 09:14:51', NULL, '2021-10-25 09:14:51', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1887, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":87,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:14:53', '2021-10-25 09:15:38', 44820, 2002000999, 'IllegalArgumentException: 支付请求的 openid 不能为空!', NULL, '2021-10-25 09:15:38', NULL, '2021-10-25 09:15:38', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1888, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":87,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:16:52', '2021-10-25 09:16:57', 5794, 0, '', NULL, '2021-10-25 09:16:57', NULL, '2021-10-25 09:16:57', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1889, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify_wx', '{\"query\":{},\"body\":null}', '127.0.0.1', 'PostmanRuntime/6.4.1', '2021-10-25 09:28:07', '2021-10-25 09:28:07', 44, 500, '系统异常', NULL, '2021-10-25 09:28:07', NULL, '2021-10-25 09:28:07', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1890, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify_wx', '{\"query\":{},\"body\":\"{\\n}\"}', '127.0.0.1', 'PostmanRuntime/6.4.1', '2021-10-25 09:28:27', '2021-10-25 09:28:29', 1921, 0, '', NULL, '2021-10-25 09:28:29', NULL, '2021-10-25 09:28:29', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1891, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify_wx', '{\"query\":{},\"body\":\"{\\n}\"}', '101.82.138.223', 'PostmanRuntime/6.4.1', '2021-10-25 09:29:18', '2021-10-25 09:29:20', 2009, 0, '', NULL, '2021-10-25 09:29:20', NULL, '2021-10-25 09:29:20', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1892, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":87,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:31:53', '2021-10-25 09:31:55', 1374, 2002000000, '未知错误,需要解析', NULL, '2021-10-25 09:31:55', NULL, '2021-10-25 09:31:55', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1893, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:32:00', '2021-10-25 09:32:00', 53, 0, '', NULL, '2021-10-25 09:32:00', NULL, '2021-10-25 09:32:00', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1894, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:32:00', '2021-10-25 09:32:00', 47, 0, '', NULL, '2021-10-25 09:32:00', NULL, '2021-10-25 09:32:00', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1895, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":88,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:32:01', '2021-10-25 09:32:02', 829, 0, '', NULL, '2021-10-25 09:32:02', NULL, '2021-10-25 09:32:02', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1896, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify_wx', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-25 09:32:10', '2021-10-25 09:32:15', 4661, 0, '', NULL, '2021-10-25 09:32:15', NULL, '2021-10-25 09:32:15', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1897, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify_wx', '{\"query\":{},\"body\":null}', '121.51.58.170', 'Mozilla/4.0', '2021-10-25 09:32:15', '2021-10-25 09:32:16', 970, 0, '', NULL, '2021-10-25 09:32:16', NULL, '2021-10-25 09:32:16', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1898, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:54:07', '2021-10-25 09:54:07', 103, 0, '', NULL, '2021-10-25 09:54:07', NULL, '2021-10-25 09:54:07', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1899, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:54:07', '2021-10-25 09:54:07', 63, 0, '', NULL, '2021-10-25 09:54:07', NULL, '2021-10-25 09:54:07', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1900, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":89,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:54:08', '2021-10-25 09:54:12', 4084, 0, '', NULL, '2021-10-25 09:54:12', NULL, '2021-10-25 09:54:12', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1901, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":89,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:54:45', '2021-10-25 09:55:02', 16587, 2002000000, '未知错误,需要解析', NULL, '2021-10-25 09:55:02', NULL, '2021-10-25 09:55:02', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1902, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":89,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:55:08', '2021-10-25 09:55:21', 13246, 2002000000, '未知错误,需要解析', NULL, '2021-10-25 09:55:21', NULL, '2021-10-25 09:55:21', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1903, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":89,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:55:24', '2021-10-25 09:55:31', 7369, 2002000000, '未知错误,需要解析', NULL, '2021-10-25 09:55:31', NULL, '2021-10-25 09:55:31', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1904, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":89,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:55:30', '2021-10-25 09:55:31', 1089, 2002000000, '未知错误,需要解析', NULL, '2021-10-25 09:55:31', NULL, '2021-10-25 09:55:31', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1905, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:55:33', '2021-10-25 09:55:33', 8, 0, '', NULL, '2021-10-25 09:55:33', NULL, '2021-10-25 09:55:33', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1906, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:55:33', '2021-10-25 09:55:33', 21, 0, '', NULL, '2021-10-25 09:55:33', NULL, '2021-10-25 09:55:33', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1907, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":90,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 09:55:35', '2021-10-25 09:55:35', 394, 0, '', NULL, '2021-10-25 09:55:35', NULL, '2021-10-25 09:55:35', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1908, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-25 09:55:41', '2021-10-25 09:55:43', 2013, 0, '', NULL, '2021-10-25 09:55:43', NULL, '2021-10-25 09:55:43', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1909, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-25 09:55:46', '2021-10-25 09:55:54', 8156, 0, '', NULL, '2021-10-25 09:55:54', NULL, '2021-10-25 09:55:54', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1910, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-25 09:55:57', '2021-10-25 09:55:57', 2, 0, '', NULL, '2021-10-25 09:55:57', NULL, '2021-10-25 09:55:57', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1911, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 10:03:48', '2021-10-25 10:03:48', 80, 0, '', NULL, '2021-10-25 10:03:48', NULL, '2021-10-25 10:03:48', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1912, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 10:03:49', '2021-10-25 10:03:49', 69, 0, '', NULL, '2021-10-25 10:03:49', NULL, '2021-10-25 10:03:49', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1913, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":91,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.138.223', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-25 10:03:49', '2021-10-25 10:03:53', 4224, 0, '', NULL, '2021-10-25 10:03:53', NULL, '2021-10-25 10:03:53', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1914, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-25 10:03:59', '2021-10-25 10:04:03', 3815, 0, '', NULL, '2021-10-25 10:04:03', NULL, '2021-10-25 10:04:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1915, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.168', 'Mozilla/4.0', '2021-10-25 10:04:04', '2021-10-25 10:04:04', 458, 0, '', NULL, '2021-10-25 10:04:04', NULL, '2021-10-25 10:04:04', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1916, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:20:45', '2021-10-26 09:20:46', 111, 0, '', NULL, '2021-10-26 09:20:46', NULL, '2021-10-26 09:20:46', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1917, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:20:45', '2021-10-26 09:20:46', 555, 500, '系统异常', NULL, '2021-10-26 09:20:46', NULL, '2021-10-26 09:20:46', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1918, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":92,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:20:58', '2021-10-26 09:20:59', 656, 0, '', NULL, '2021-10-26 09:20:59', NULL, '2021-10-26 09:20:59', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1919, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:21:10', '2021-10-26 09:21:10', 27, 0, '', NULL, '2021-10-26 09:21:10', NULL, '2021-10-26 09:21:10', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1920, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:21:10', '2021-10-26 09:21:33', 22624, 500, '系统异常', NULL, '2021-10-26 09:21:33', NULL, '2021-10-26 09:21:33', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1921, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:22:48', '2021-10-26 09:22:48', 24, 0, '', NULL, '2021-10-26 09:22:48', NULL, '2021-10-26 09:22:48', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1922, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:22:48', '2021-10-26 09:22:49', 611, 0, '', NULL, '2021-10-26 09:22:49', NULL, '2021-10-26 09:22:49', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1923, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":94,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:22:57', '2021-10-26 09:22:58', 700, 0, '', NULL, '2021-10-26 09:22:58', NULL, '2021-10-26 09:22:58', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1924, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.168', 'Mozilla/4.0', '2021-10-26 09:23:04', '2021-10-26 09:23:08', 4082, 0, '', NULL, '2021-10-26 09:23:08', NULL, '2021-10-26 09:23:08', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1925, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.168', 'Mozilla/4.0', '2021-10-26 09:23:09', '2021-10-26 09:23:12', 3057, 0, '', NULL, '2021-10-26 09:23:12', NULL, '2021-10-26 09:23:12', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1926, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:24:49', '2021-10-26 09:24:49', 80, 0, '', NULL, '2021-10-26 09:24:49', NULL, '2021-10-26 09:24:49', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1927, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:24:49', '2021-10-26 09:24:49', 70, 0, '', NULL, '2021-10-26 09:24:49', NULL, '2021-10-26 09:24:49', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1928, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":95,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:24:51', '2021-10-26 09:24:52', 738, 0, '', NULL, '2021-10-26 09:24:52', NULL, '2021-10-26 09:24:52', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1929, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:24:58', '2021-10-26 09:24:58', 40, 1007001000, '支付渠道的配置不存在', NULL, '2021-10-26 09:24:58', NULL, '2021-10-26 09:24:58', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1930, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.75', 'Mozilla/4.0', '2021-10-26 09:25:07', '2021-10-26 09:25:07', 23, 1007001000, '支付渠道的配置不存在', NULL, '2021-10-26 09:25:07', NULL, '2021-10-26 09:25:07', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1931, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.170', 'Mozilla/4.0', '2021-10-26 09:24:59', '2021-10-26 09:25:12', 12909, 1007001000, '支付渠道的配置不存在', NULL, '2021-10-26 09:25:12', NULL, '2021-10-26 09:25:12', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1932, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.168', 'Mozilla/4.0', '2021-10-26 09:25:20', '2021-10-26 09:25:22', 2186, 1007001000, '支付渠道的配置不存在', NULL, '2021-10-26 09:25:22', NULL, '2021-10-26 09:25:22', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1933, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.170', 'Mozilla/4.0', '2021-10-26 09:25:15', '2021-10-26 09:26:16', 60349, 1007001000, '支付渠道的配置不存在', NULL, '2021-10-26 09:26:16', NULL, '2021-10-26 09:26:16', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1934, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.78', 'Mozilla/4.0', '2021-10-26 09:26:16', '2021-10-26 09:26:16', 31, 1007001000, '支付渠道的配置不存在', NULL, '2021-10-26 09:26:16', NULL, '2021-10-26 09:26:16', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1935, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.169', 'Mozilla/4.0', '2021-10-26 09:26:16', '2021-10-26 09:26:16', 42, 1007001000, '支付渠道的配置不存在', NULL, '2021-10-26 09:26:16', NULL, '2021-10-26 09:26:16', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1936, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.168', 'Mozilla/4.0', '2021-10-26 09:26:16', '2021-10-26 09:26:16', 41, 1007001000, '支付渠道的配置不存在', NULL, '2021-10-26 09:26:16', NULL, '2021-10-26 09:26:16', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1937, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.169', 'Mozilla/4.0', '2021-10-26 09:29:05', '2021-10-26 09:29:38', 32943, 500, '系统异常', NULL, '2021-10-26 09:29:38', NULL, '2021-10-26 09:29:38', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1938, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:30:46', '2021-10-26 09:30:46', 100, 0, '', NULL, '2021-10-26 09:30:46', NULL, '2021-10-26 09:30:46', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1939, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:30:46', '2021-10-26 09:30:46', 64, 0, '', NULL, '2021-10-26 09:30:46', NULL, '2021-10-26 09:30:46', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1940, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":96,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:30:47', '2021-10-26 09:30:48', 715, 0, '', NULL, '2021-10-26 09:30:48', NULL, '2021-10-26 09:30:48', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1941, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.168', 'Mozilla/4.0', '2021-10-26 09:30:53', '2021-10-26 09:33:21', 147170, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:33:21', NULL, '2021-10-26 09:33:21', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1942, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '183.3.234.61', 'Mozilla/4.0', '2021-10-26 09:30:59', '2021-10-26 09:33:21', 141982, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:33:21', NULL, '2021-10-26 09:33:21', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1943, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.76', 'Mozilla/4.0', '2021-10-26 09:33:21', '2021-10-26 09:33:21', 45, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:33:21', NULL, '2021-10-26 09:33:21', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1944, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.30.171', 'Mozilla/4.0', '2021-10-26 09:33:21', '2021-10-26 09:33:21', 41, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:33:21', NULL, '2021-10-26 09:33:21', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1945, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.170', 'Mozilla/4.0', '2021-10-26 09:33:21', '2021-10-26 09:33:21', 41, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:33:21', NULL, '2021-10-26 09:33:21', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1946, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:33:21', '2021-10-26 09:33:21', 42, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:33:21', NULL, '2021-10-26 09:33:21', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1947, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.170', 'Mozilla/4.0', '2021-10-26 09:33:21', '2021-10-26 09:33:21', 47, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:33:21', NULL, '2021-10-26 09:33:21', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1948, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":96,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:34:09', '2021-10-26 09:34:10', 1027, 2002000000, '未知错误,需要解析', NULL, '2021-10-26 09:34:10', NULL, '2021-10-26 09:34:10', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1949, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:34:23', '2021-10-26 09:34:23', 46, 0, '', NULL, '2021-10-26 09:34:23', NULL, '2021-10-26 09:34:23', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1950, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:34:24', '2021-10-26 09:34:24', 51, 0, '', NULL, '2021-10-26 09:34:24', NULL, '2021-10-26 09:34:24', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1951, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":97,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:34:25', '2021-10-26 09:34:26', 496, 0, '', NULL, '2021-10-26 09:34:26', NULL, '2021-10-26 09:34:26', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1952, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.170', 'Mozilla/4.0', '2021-10-26 09:34:31', '2021-10-26 09:35:28', 57124, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:35:28', NULL, '2021-10-26 09:35:28', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1953, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '58.251.80.53', 'Mozilla/4.0', '2021-10-26 09:35:28', '2021-10-26 09:35:30', 1492, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:35:30', NULL, '2021-10-26 09:35:30', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1954, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.168', 'Mozilla/4.0', '2021-10-26 09:35:28', '2021-10-26 09:35:30', 1493, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:35:30', NULL, '2021-10-26 09:35:30', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1955, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.75', 'Mozilla/4.0', '2021-10-26 09:35:28', '2021-10-26 09:35:30', 1490, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:35:30', NULL, '2021-10-26 09:35:30', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1956, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.76', 'Mozilla/4.0', '2021-10-26 09:35:28', '2021-10-26 09:35:30', 1490, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:35:30', NULL, '2021-10-26 09:35:30', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1957, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:35:28', '2021-10-26 09:35:30', 1509, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:35:30', NULL, '2021-10-26 09:35:30', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1958, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.170', 'Mozilla/4.0', '2021-10-26 09:35:28', '2021-10-26 09:35:30', 1519, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:35:30', NULL, '2021-10-26 09:35:30', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1959, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.168', 'Mozilla/4.0', '2021-10-26 09:35:28', '2021-10-26 09:38:07', 158950, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:38:07', NULL, '2021-10-26 09:38:07', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1960, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:38:07', '2021-10-26 09:38:07', 34, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:38:07', NULL, '2021-10-26 09:38:07', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1961, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.75', 'Mozilla/4.0', '2021-10-26 09:38:07', '2021-10-26 09:38:07', 33, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:38:07', NULL, '2021-10-26 09:38:07', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1962, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:38:35', '2021-10-26 09:38:36', 102, 0, '', NULL, '2021-10-26 09:38:36', NULL, '2021-10-26 09:38:36', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1963, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:38:36', '2021-10-26 09:38:36', 61, 0, '', NULL, '2021-10-26 09:38:36', NULL, '2021-10-26 09:38:36', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1964, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:39:11', '2021-10-26 09:39:14', 3226, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:39:14', NULL, '2021-10-26 09:39:14', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1965, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:38:37', '2021-10-26 09:39:14', 37716, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:39:14', NULL, '2021-10-26 09:39:14', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1966, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '183.3.234.61', 'Mozilla/4.0', '2021-10-26 09:39:11', '2021-10-26 09:39:14', 3225, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:39:14', NULL, '2021-10-26 09:39:14', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1967, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":98,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:38:37', '2021-10-26 09:39:15', 38297, 0, '', NULL, '2021-10-26 09:39:15', NULL, '2021-10-26 09:39:15', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1968, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.168', 'Mozilla/4.0', '2021-10-26 09:39:21', '2021-10-26 09:39:26', 5385, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:39:26', NULL, '2021-10-26 09:39:26', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1969, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:39:25', '2021-10-26 09:39:27', 1323, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:39:27', NULL, '2021-10-26 09:39:27', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1970, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.75', 'Mozilla/4.0', '2021-10-26 09:39:27', '2021-10-26 09:39:28', 870, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:39:28', NULL, '2021-10-26 09:39:28', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1971, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.78', 'Mozilla/4.0', '2021-10-26 09:39:29', '2021-10-26 09:39:34', 4938, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:39:34', NULL, '2021-10-26 09:39:34', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1972, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:39:36', '2021-10-26 09:39:36', 7, 0, '', NULL, '2021-10-26 09:39:36', NULL, '2021-10-26 09:39:36', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1973, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:39:36', '2021-10-26 09:39:36', 16, 0, '', NULL, '2021-10-26 09:39:36', NULL, '2021-10-26 09:39:36', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1974, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.169', 'Mozilla/4.0', '2021-10-26 09:40:22', '2021-10-26 09:40:25', 2298, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:40:25', NULL, '2021-10-26 09:40:25', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1975, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.30.177', 'Mozilla/4.0', '2021-10-26 09:40:22', '2021-10-26 09:40:25', 2298, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:40:25', NULL, '2021-10-26 09:40:25', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1976, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.30.173', 'Mozilla/4.0', '2021-10-26 09:40:22', '2021-10-26 09:40:25', 2309, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:40:25', NULL, '2021-10-26 09:40:25', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1977, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:40:22', '2021-10-26 09:40:25', 2313, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:40:25', NULL, '2021-10-26 09:40:25', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1978, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '58.251.80.46', 'Mozilla/4.0', '2021-10-26 09:40:25', '2021-10-26 09:40:25', 18, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:40:25', NULL, '2021-10-26 09:40:25', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1979, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:41:02', '2021-10-26 09:41:02', 97, 0, '', NULL, '2021-10-26 09:41:02', NULL, '2021-10-26 09:41:02', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1980, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:41:02', '2021-10-26 09:41:02', 115, 0, '', NULL, '2021-10-26 09:41:02', NULL, '2021-10-26 09:41:02', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1981, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":100,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:41:05', '2021-10-26 09:41:10', 5425, 0, '', NULL, '2021-10-26 09:41:10', NULL, '2021-10-26 09:41:10', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1982, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":100,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:41:09', '2021-10-26 09:41:10', 769, 0, '', NULL, '2021-10-26 09:41:10', NULL, '2021-10-26 09:41:10', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1983, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.168', 'Mozilla/4.0', '2021-10-26 09:41:21', '2021-10-26 09:41:22', 1022, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:41:22', NULL, '2021-10-26 09:41:22', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1984, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '58.251.80.46', 'Mozilla/4.0', '2021-10-26 09:41:16', '2021-10-26 09:41:36', 20362, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:41:36', NULL, '2021-10-26 09:41:36', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1985, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:41:36', '2021-10-26 09:41:38', 1578, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:41:38', NULL, '2021-10-26 09:41:38', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1986, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '101.226.103.16', 'Mozilla/4.0', '2021-10-26 09:41:36', '2021-10-26 09:41:38', 1578, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:41:38', NULL, '2021-10-26 09:41:38', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1987, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '101.226.103.15', 'Mozilla/4.0', '2021-10-26 09:41:39', '2021-10-26 09:41:40', 1298, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:41:40', NULL, '2021-10-26 09:41:40', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1988, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:41:48', '2021-10-26 09:41:54', 5416, 0, '', NULL, '2021-10-26 09:41:54', NULL, '2021-10-26 09:41:54', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1989, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:41:55', '2021-10-26 09:41:56', 1336, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:41:56', NULL, '2021-10-26 09:41:56', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1990, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:42:04', '2021-10-26 09:42:04', 8, 0, '', NULL, '2021-10-26 09:42:04', NULL, '2021-10-26 09:42:04', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1991, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:42:04', '2021-10-26 09:42:04', 19, 0, '', NULL, '2021-10-26 09:42:04', NULL, '2021-10-26 09:42:04', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1992, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":101,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:42:05', '2021-10-26 09:42:06', 693, 0, '', NULL, '2021-10-26 09:42:06', NULL, '2021-10-26 09:42:06', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1993, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.170', 'Mozilla/4.0', '2021-10-26 09:42:20', '2021-10-26 09:42:20', 422, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:42:20', NULL, '2021-10-26 09:42:20', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1994, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:42:26', '2021-10-26 09:42:28', 2077, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:42:28', NULL, '2021-10-26 09:42:28', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1995, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '101.226.103.16', 'Mozilla/4.0', '2021-10-26 09:42:16', '2021-10-26 09:42:33', 17112, 0, '', NULL, '2021-10-26 09:42:33', NULL, '2021-10-26 09:42:33', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1996, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.168', 'Mozilla/4.0', '2021-10-26 09:42:22', '2021-10-26 09:42:33', 11064, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:42:33', NULL, '2021-10-26 09:42:33', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1997, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:42:33', '2021-10-26 09:42:35', 1727, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:42:35', NULL, '2021-10-26 09:42:35', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1998, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:42:38', '2021-10-26 09:42:38', 21, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:42:38', NULL, '2021-10-26 09:42:38', b'0');
+INSERT INTO `inf_api_access_log` VALUES (1999, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":101,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:42:40', '2021-10-26 09:42:40', 19, 1007002001, '支付订单不处于待支付', NULL, '2021-10-26 09:42:40', NULL, '2021-10-26 09:42:40', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2000, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '183.3.234.61', 'Mozilla/4.0', '2021-10-26 09:42:49', '2021-10-26 09:42:49', 20, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:42:49', NULL, '2021-10-26 09:42:49', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2001, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '183.3.234.45', 'Mozilla/4.0', '2021-10-26 09:42:53', '2021-10-26 09:42:53', 19, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:42:53', NULL, '2021-10-26 09:42:53', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2002, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:42:57', '2021-10-26 09:42:57', 9, 0, '', NULL, '2021-10-26 09:42:57', NULL, '2021-10-26 09:42:57', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2003, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:42:57', '2021-10-26 09:42:57', 19, 0, '', NULL, '2021-10-26 09:42:57', NULL, '2021-10-26 09:42:57', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2004, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":102,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:42:57', '2021-10-26 09:42:58', 485, 0, '', NULL, '2021-10-26 09:42:58', NULL, '2021-10-26 09:42:58', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2005, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":102,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:43:03', '2021-10-26 09:43:03', 460, 0, '', NULL, '2021-10-26 09:43:03', NULL, '2021-10-26 09:43:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2006, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '183.3.234.56', 'Mozilla/4.0', '2021-10-26 09:43:17', '2021-10-26 09:43:17', 47, 0, '', NULL, '2021-10-26 09:43:17', NULL, '2021-10-26 09:43:17', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2007, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.168', 'Mozilla/4.0', '2021-10-26 09:43:20', '2021-10-26 09:43:20', 17, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:43:20', NULL, '2021-10-26 09:43:20', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2008, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:43:24', '2021-10-26 09:43:24', 20, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:43:24', NULL, '2021-10-26 09:43:24', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2009, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:43:26', '2021-10-26 09:43:26', 49, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:43:26', NULL, '2021-10-26 09:43:26', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2010, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":102,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:43:29', '2021-10-26 09:43:29', 18, 1007002001, '支付订单不处于待支付', NULL, '2021-10-26 09:43:29', NULL, '2021-10-26 09:43:29', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2011, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.168', 'Mozilla/4.0', '2021-10-26 09:43:32', '2021-10-26 09:43:32', 18, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:43:32', NULL, '2021-10-26 09:43:32', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2012, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:45:00', '2021-10-26 09:45:00', 23, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:45:00', NULL, '2021-10-26 09:45:00', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2013, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.170', 'Mozilla/4.0', '2021-10-26 09:45:04', '2021-10-26 09:45:04', 15, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:45:04', NULL, '2021-10-26 09:45:04', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2014, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.170', 'Mozilla/4.0', '2021-10-26 09:45:21', '2021-10-26 09:45:21', 17, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:45:21', NULL, '2021-10-26 09:45:21', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2015, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.169', 'Mozilla/4.0', '2021-10-26 09:45:27', '2021-10-26 09:45:27', 20, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:45:27', NULL, '2021-10-26 09:45:27', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2016, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.170', 'Mozilla/4.0', '2021-10-26 09:46:20', '2021-10-26 09:46:20', 18, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:46:20', NULL, '2021-10-26 09:46:20', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2017, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.169', 'Mozilla/4.0', '2021-10-26 09:46:26', '2021-10-26 09:46:26', 17, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-26 09:46:26', NULL, '2021-10-26 09:46:26', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2018, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:48:38', '2021-10-26 09:48:38', 201, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:48:38', NULL, '2021-10-26 09:48:38', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2019, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.168', 'Mozilla/4.0', '2021-10-26 09:48:42', '2021-10-26 09:48:42', 22, 1007003000, '支付交易拓展单不存在', NULL, '2021-10-26 09:48:42', NULL, '2021-10-26 09:48:42', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2020, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:48:49', '2021-10-26 09:48:49', 52, 0, '', NULL, '2021-10-26 09:48:49', NULL, '2021-10-26 09:48:49', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2021, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:48:49', '2021-10-26 09:48:49', 49, 0, '', NULL, '2021-10-26 09:48:49', NULL, '2021-10-26 09:48:49', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2022, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":103,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:48:50', '2021-10-26 09:48:51', 707, 0, '', NULL, '2021-10-26 09:48:51', NULL, '2021-10-26 09:48:51', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2023, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-26 09:48:56', '2021-10-26 09:48:56', 67, 0, '', NULL, '2021-10-26 09:48:56', NULL, '2021-10-26 09:48:56', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2024, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/pay-notify', '{\"query\":{},\"body\":null}', '127.0.0.1', 'PostmanRuntime/6.4.1', '2021-10-27 08:24:29', '2021-10-27 08:24:29', 20, 0, '', NULL, '2021-10-27 08:24:29', NULL, '2021-10-27 08:24:29', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2025, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/pay-notify', '{\"query\":{},\"body\":null}', '127.0.0.1', 'PostmanRuntime/6.4.1', '2021-10-27 08:24:57', '2021-10-27 08:24:57', 49, 500, '系统异常', NULL, '2021-10-27 08:24:57', NULL, '2021-10-27 08:24:57', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2026, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/pay-notify', '{\"query\":{},\"body\":\"{\\n\\t\\n}\"}', '127.0.0.1', 'PostmanRuntime/6.4.1', '2021-10-27 08:25:10', '2021-10-27 08:25:10', 30, 400, '请求参数不正确:支付订单编号不能为空', NULL, '2021-10-27 08:25:10', NULL, '2021-10-27 08:25:10', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2027, '', 0, 0, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:30:03', '2021-10-27 08:30:03', 43, 0, '', NULL, '2021-10-27 08:30:03', NULL, '2021-10-27 08:30:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2028, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:30:03', '2021-10-27 08:30:03', 43, 0, '', NULL, '2021-10-27 08:30:03', NULL, '2021-10-27 08:30:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2029, '', 0, 0, 'yudao-admin-server', 'POST', '/api/logout', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:30:03', '2021-10-27 08:30:03', 7, 0, '', NULL, '2021-10-27 08:30:03', NULL, '2021-10-27 08:30:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2030, '', 0, 0, 'yudao-admin-server', 'GET', '/api/system/captcha/get-image', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:30:04', '2021-10-27 08:30:06', 2264, 0, '', NULL, '2021-10-27 08:30:06', NULL, '2021-10-27 08:30:06', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2031, '', 0, 0, 'yudao-admin-server', 'POST', '/api/login', '{\"query\":{},\"body\":\"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"admin123\\\",\\\"code\\\":\\\"18zk0\\\",\\\"uuid\\\":\\\"1a5b41e42f34443f90f1a8049c7c172b\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:30:09', '2021-10-27 08:30:10', 264, 0, '', NULL, '2021-10-27 08:30:10', NULL, '2021-10-27 08:30:10', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2032, '', 1, 2, 'yudao-admin-server', 'GET', '/api/get-permission-info', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:30:10', '2021-10-27 08:30:10', 30, 0, '', NULL, '2021-10-27 08:30:10', NULL, '2021-10-27 08:30:10', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2033, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/dict-data/list-all-simple', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:30:10', '2021-10-27 08:30:10', 37, 0, '', NULL, '2021-10-27 08:30:10', NULL, '2021-10-27 08:30:10', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2034, '', 1, 2, 'yudao-admin-server', 'GET', '/api/list-menus', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:30:10', '2021-10-27 08:30:10', 13, 0, '', NULL, '2021-10-27 08:30:10', NULL, '2021-10-27 08:30:10', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2035, '', 0, 0, 'yudao-admin-server', 'GET', '/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:30:10', '2021-10-27 08:30:10', 34, 0, '', NULL, '2021-10-27 08:30:10', NULL, '2021-10-27 08:30:10', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2036, '', 1, 2, 'yudao-admin-server', 'GET', '/api/system/post/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:32:15', '2021-10-27 08:32:15', 118, 0, '', NULL, '2021-10-27 08:32:15', NULL, '2021-10-27 08:32:15', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2037, '', 1, 2, 'yudao-admin-server', 'GET', '/api/infra/job/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:32:21', '2021-10-27 08:32:21', 41, 0, '', NULL, '2021-10-27 08:32:21', NULL, '2021-10-27 08:32:21', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2038, '', 1, 2, 'yudao-admin-server', 'POST', '/api/infra/job/create', '{\"query\":{},\"body\":\"{\\\"name\\\":\\\"payNotifyJob\\\",\\\"handlerName\\\":\\\"支付通知 Job\\\",\\\"cronExpression\\\":\\\"* * * * * ?\\\",\\\"retryCount\\\":\\\"0\\\",\\\"retryInterval\\\":\\\"0\\\",\\\"monitorTimeout\\\":\\\"\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:33:35', '2021-10-27 08:33:35', 68, 0, '', NULL, '2021-10-27 08:33:35', NULL, '2021-10-27 08:33:35', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2039, '', 1, 2, 'yudao-admin-server', 'GET', '/api/infra/job/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:33:35', '2021-10-27 08:33:35', 18, 0, '', NULL, '2021-10-27 08:33:35', NULL, '2021-10-27 08:33:35', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2040, '', 1, 2, 'yudao-admin-server', 'PUT', '/api/infra/job/trigger', '{\"query\":{\"id\":\"3\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:33:59', '2021-10-27 08:33:59', 42, 0, '', NULL, '2021-10-27 08:33:59', NULL, '2021-10-27 08:33:59', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2041, '', 1, 2, 'yudao-admin-server', 'GET', '/api/infra/job/get', '{\"query\":{\"id\":\"4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:34:08', '2021-10-27 08:34:08', 8, 0, '', NULL, '2021-10-27 08:34:08', NULL, '2021-10-27 08:34:08', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2042, '', 1, 2, 'yudao-admin-server', 'DELETE', '/api/infra/job/delete', '{\"query\":{\"id\":\"4\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:34:15', '2021-10-27 08:34:15', 56, 0, '', NULL, '2021-10-27 08:34:15', NULL, '2021-10-27 08:34:15', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2043, '', 1, 2, 'yudao-admin-server', 'GET', '/api/infra/job/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:34:15', '2021-10-27 08:34:15', 23, 0, '', NULL, '2021-10-27 08:34:15', NULL, '2021-10-27 08:34:15', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2044, '', 1, 2, 'yudao-admin-server', 'POST', '/api/infra/job/create', '{\"query\":{},\"body\":\"{\\\"name\\\":\\\"支付通知 Job\\\",\\\"handlerName\\\":\\\"payNotifyJob\\\",\\\"cronExpression\\\":\\\"* * * * * ?\\\",\\\"retryCount\\\":\\\"0\\\",\\\"retryInterval\\\":\\\"0\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:34:42', '2021-10-27 08:34:42', 58, 0, '', NULL, '2021-10-27 08:34:42', NULL, '2021-10-27 08:34:42', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2045, '', 1, 2, 'yudao-admin-server', 'GET', '/api/infra/job/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-27 08:34:43', '2021-10-27 08:34:43', 16, 0, '', NULL, '2021-10-27 08:34:43', NULL, '2021-10-27 08:34:43', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2046, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/pay-notify', '{\"query\":{},\"body\":\"{\\n\\t\\n}\"}', '127.0.0.1', 'PostmanRuntime/6.4.1', '2021-10-27 08:36:17', '2021-10-27 08:36:17', 5, 400, '请求参数不正确:支付订单编号不能为空', NULL, '2021-10-27 08:36:18', NULL, '2021-10-27 08:36:18', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2047, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/pay-notify', '{\"query\":{},\"body\":\"{\\\"merchantOrderId\\\":\\\"1635212524100\\\",\\\"payOrderId\\\":101}\"}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 Hutool', '2021-10-27 08:38:43', '2021-10-27 08:38:43', 24, 0, '', NULL, '2021-10-27 08:38:43', NULL, '2021-10-27 08:38:43', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2048, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/pay-notify', '{\"query\":{},\"body\":\"{\\\"merchantOrderId\\\":\\\"1635212929429\\\",\\\"payOrderId\\\":103}\"}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 Hutool', '2021-10-27 08:38:43', '2021-10-27 08:38:43', 24, 0, '', NULL, '2021-10-27 08:38:43', NULL, '2021-10-27 08:38:43', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2049, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/pay-notify', '{\"query\":{},\"body\":\"{\\\"merchantOrderId\\\":\\\"1635212576678\\\",\\\"payOrderId\\\":102}\"}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 Hutool', '2021-10-27 08:38:43', '2021-10-27 08:38:43', 24, 0, '', NULL, '2021-10-27 08:38:43', NULL, '2021-10-27 08:38:43', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2050, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/pay-notify', '{\"query\":{},\"body\":\"{\\\"merchantOrderId\\\":\\\"1635212461835\\\",\\\"payOrderId\\\":100}\"}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 Hutool', '2021-10-27 08:38:43', '2021-10-27 08:38:43', 3, 0, '', NULL, '2021-10-27 08:38:43', NULL, '2021-10-27 08:38:43', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2051, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 08:49:30', '2021-10-27 08:49:30', 102, 0, '', NULL, '2021-10-27 08:49:30', NULL, '2021-10-27 08:49:30', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2052, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 08:49:29', '2021-10-27 08:49:30', 1081, 500, '系统异常', NULL, '2021-10-27 08:49:30', NULL, '2021-10-27 08:49:30', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2053, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 08:51:19', '2021-10-27 08:51:19', 26, 0, '', NULL, '2021-10-27 08:51:19', NULL, '2021-10-27 08:51:19', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2054, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 08:51:18', '2021-10-27 08:51:19', 596, 0, '', NULL, '2021-10-27 08:51:19', NULL, '2021-10-27 08:51:19', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2055, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":105,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 08:51:20', '2021-10-27 08:51:22', 2180, 0, '', NULL, '2021-10-27 08:51:22', NULL, '2021-10-27 08:51:22', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2056, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.30.171', 'Mozilla/4.0', '2021-10-27 08:51:32', '2021-10-27 08:53:03', 90973, 0, '', NULL, '2021-10-27 08:53:03', NULL, '2021-10-27 08:53:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2057, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.76', 'Mozilla/4.0', '2021-10-27 08:53:03', '2021-10-27 08:53:03', 60, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 08:53:03', NULL, '2021-10-27 08:53:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2058, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.30.173', 'Mozilla/4.0', '2021-10-27 08:51:47', '2021-10-27 08:53:03', 76425, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 08:53:03', NULL, '2021-10-27 08:53:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2059, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.76', 'Mozilla/4.0', '2021-10-27 08:53:03', '2021-10-27 08:53:03', 65, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 08:53:03', NULL, '2021-10-27 08:53:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2060, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '101.226.103.24', 'Mozilla/4.0', '2021-10-27 08:53:03', '2021-10-27 08:53:03', 65, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 08:53:03', NULL, '2021-10-27 08:53:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2061, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '58.251.80.62', 'Mozilla/4.0', '2021-10-27 08:53:03', '2021-10-27 08:53:04', 80, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 08:53:04', NULL, '2021-10-27 08:53:04', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2062, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/pay-notify', '{\"query\":{},\"body\":\"{\\\"merchantOrderId\\\":\\\"1635295878514\\\",\\\"payOrderId\\\":105}\"}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 Hutool', '2021-10-27 08:53:04', '2021-10-27 08:53:04', 12, 0, '', NULL, '2021-10-27 08:53:04', NULL, '2021-10-27 08:53:04', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2063, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '58.251.80.62', 'Mozilla/4.0', '2021-10-27 08:53:03', '2021-10-27 08:53:04', 122, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 08:53:04', NULL, '2021-10-27 08:53:04', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2064, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '101.226.103.16', 'Mozilla/4.0', '2021-10-27 08:53:03', '2021-10-27 08:53:04', 123, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 08:53:04', NULL, '2021-10-27 08:53:04', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2065, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:08:03', '2021-10-27 09:08:03', 113, 0, '', NULL, '2021-10-27 09:08:03', NULL, '2021-10-27 09:08:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2066, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:08:03', '2021-10-27 09:08:03', 84, 0, '', NULL, '2021-10-27 09:08:03', NULL, '2021-10-27 09:08:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2067, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":106,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:08:04', '2021-10-27 09:08:07', 3016, 0, '', NULL, '2021-10-27 09:08:07', NULL, '2021-10-27 09:08:07', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2068, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.30.177', 'Mozilla/4.0', '2021-10-27 09:08:12', '2021-10-27 09:08:43', 30745, 0, '', NULL, '2021-10-27 09:08:43', NULL, '2021-10-27 09:08:43', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2069, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '183.3.234.45', 'Mozilla/4.0', '2021-10-27 09:08:43', '2021-10-27 09:08:44', 1419, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:08:44', NULL, '2021-10-27 09:08:44', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2070, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.78', 'Mozilla/4.0', '2021-10-27 09:08:43', '2021-10-27 09:08:44', 1418, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:08:44', NULL, '2021-10-27 09:08:44', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2071, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.169', 'Mozilla/4.0', '2021-10-27 09:08:43', '2021-10-27 09:08:44', 1421, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:08:44', NULL, '2021-10-27 09:08:44', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2072, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/pay-notify', '{\"query\":{},\"body\":\"{\\\"merchantOrderId\\\":\\\"1635296883074\\\",\\\"payOrderId\\\":106}\"}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 Hutool', '2021-10-27 09:08:44', '2021-10-27 09:08:44', 8, 0, '', NULL, '2021-10-27 09:08:44', NULL, '2021-10-27 09:08:44', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2073, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:20:35', '2021-10-27 09:20:35', 135, 0, '', NULL, '2021-10-27 09:20:35', NULL, '2021-10-27 09:20:35', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2074, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:20:35', '2021-10-27 09:20:35', 146, 0, '', NULL, '2021-10-27 09:20:35', NULL, '2021-10-27 09:20:35', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2075, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":107,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:20:36', '2021-10-27 09:20:37', 979, 0, '', NULL, '2021-10-27 09:20:37', NULL, '2021-10-27 09:20:37', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2076, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-27 09:20:58', '2021-10-27 09:20:59', 118, 0, '', NULL, '2021-10-27 09:20:59', NULL, '2021-10-27 09:20:59', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2077, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:21:40', '2021-10-27 09:21:40', 9, 0, '', NULL, '2021-10-27 09:21:40', NULL, '2021-10-27 09:21:40', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2078, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:21:40', '2021-10-27 09:21:40', 21, 0, '', NULL, '2021-10-27 09:21:40', NULL, '2021-10-27 09:21:40', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2079, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":108,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:21:46', '2021-10-27 09:21:47', 668, 0, '', NULL, '2021-10-27 09:21:47', NULL, '2021-10-27 09:21:47', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2080, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.30.177', 'Mozilla/4.0', '2021-10-27 09:21:55', '2021-10-27 09:22:02', 6586, 0, '', NULL, '2021-10-27 09:25:52', NULL, '2021-10-27 09:25:52', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2081, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.30.177', 'Mozilla/4.0', '2021-10-27 09:22:01', '2021-10-27 09:25:52', 231851, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:25:52', NULL, '2021-10-27 09:25:52', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2082, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '58.251.80.53', 'Mozilla/4.0', '2021-10-27 09:25:52', '2021-10-27 09:25:52', 61, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:25:53', NULL, '2021-10-27 09:25:53', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2083, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '101.226.103.16', 'Mozilla/4.0', '2021-10-27 09:25:52', '2021-10-27 09:25:52', 60, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:25:53', NULL, '2021-10-27 09:25:53', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2084, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '58.251.80.46', 'Mozilla/4.0', '2021-10-27 09:25:52', '2021-10-27 09:25:53', 66, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:25:53', NULL, '2021-10-27 09:25:53', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2085, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.168', 'Mozilla/4.0', '2021-10-27 09:25:52', '2021-10-27 09:25:53', 68, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:25:53', NULL, '2021-10-27 09:25:53', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2086, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '101.226.103.15', 'Mozilla/4.0', '2021-10-27 09:25:52', '2021-10-27 09:25:53', 72, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:25:53', NULL, '2021-10-27 09:25:53', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2087, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:28:48', '2021-10-27 09:28:48', 127, 0, '', NULL, '2021-10-27 09:28:48', NULL, '2021-10-27 09:28:48', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2088, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:28:48', '2021-10-27 09:28:49', 92, 0, '', NULL, '2021-10-27 09:28:49', NULL, '2021-10-27 09:28:49', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2089, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":109,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:28:49', '2021-10-27 09:28:51', 1856, 0, '', NULL, '2021-10-27 09:28:51', NULL, '2021-10-27 09:28:51', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2090, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.169', 'Mozilla/4.0', '2021-10-27 09:28:57', '2021-10-27 09:29:18', 21289, 0, '', NULL, '2021-10-27 09:29:18', NULL, '2021-10-27 09:29:18', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2091, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.30.171', 'Mozilla/4.0', '2021-10-27 09:29:18', '2021-10-27 09:29:22', 3729, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:29:22', NULL, '2021-10-27 09:29:22', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2092, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.170', 'Mozilla/4.0', '2021-10-27 09:29:18', '2021-10-27 09:29:22', 3730, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:29:22', NULL, '2021-10-27 09:29:22', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2093, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '58.251.80.46', 'Mozilla/4.0', '2021-10-27 09:29:21', '2021-10-27 09:29:22', 565, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:29:22', NULL, '2021-10-27 09:29:22', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2094, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '58.251.80.62', 'Mozilla/4.0', '2021-10-27 09:29:29', '2021-10-27 09:29:29', 20, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:29:29', NULL, '2021-10-27 09:29:29', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2095, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:29:57', '2021-10-27 09:29:57', 8, 0, '', NULL, '2021-10-27 09:29:57', NULL, '2021-10-27 09:29:57', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2096, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:29:57', '2021-10-27 09:29:57', 25, 0, '', NULL, '2021-10-27 09:29:57', NULL, '2021-10-27 09:29:57', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2097, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":110,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:29:57', '2021-10-27 09:29:58', 516, 0, '', NULL, '2021-10-27 09:29:58', NULL, '2021-10-27 09:29:58', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2098, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '101.226.103.16', 'Mozilla/4.0', '2021-10-27 09:29:59', '2021-10-27 09:29:59', 21, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:29:59', NULL, '2021-10-27 09:29:59', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2099, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '101.226.103.16', 'Mozilla/4.0', '2021-10-27 09:30:05', '2021-10-27 09:30:05', 21, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:30:05', NULL, '2021-10-27 09:30:05', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2100, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '101.226.103.15', 'Mozilla/4.0', '2021-10-27 09:30:05', '2021-10-27 09:30:09', 4090, 0, '', NULL, '2021-10-27 09:34:15', NULL, '2021-10-27 09:34:15', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2101, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '101.226.103.15', 'Mozilla/4.0', '2021-10-27 09:34:14', '2021-10-27 09:34:15', 80, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:34:15', NULL, '2021-10-27 09:34:15', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2102, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '101.226.103.16', 'Mozilla/4.0', '2021-10-27 09:34:14', '2021-10-27 09:34:15', 80, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:34:15', NULL, '2021-10-27 09:34:15', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2103, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:35:42', '2021-10-27 09:35:42', 121, 0, '', NULL, '2021-10-27 09:35:42', NULL, '2021-10-27 09:35:42', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2104, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:35:42', '2021-10-27 09:35:42', 87, 0, '', NULL, '2021-10-27 09:35:42', NULL, '2021-10-27 09:35:42', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2105, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":111,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:35:43', '2021-10-27 09:35:44', 961, 0, '', NULL, '2021-10-27 09:35:44', NULL, '2021-10-27 09:35:44', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2106, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '183.3.234.61', 'Mozilla/4.0', '2021-10-27 09:35:49', '2021-10-27 09:35:52', 3265, 0, '', NULL, '2021-10-27 09:35:52', NULL, '2021-10-27 09:35:52', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2107, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:38:56', '2021-10-27 09:38:56', 141, 0, '', NULL, '2021-10-27 09:38:56', NULL, '2021-10-27 09:38:56', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2108, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:38:56', '2021-10-27 09:38:56', 99, 0, '', NULL, '2021-10-27 09:38:56', NULL, '2021-10-27 09:38:56', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2109, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":112,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:39:02', '2021-10-27 09:39:03', 805, 0, '', NULL, '2021-10-27 09:39:03', NULL, '2021-10-27 09:39:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2110, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":112,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:38:57', '2021-10-27 09:39:06', 8971, 0, '', NULL, '2021-10-27 09:39:06', NULL, '2021-10-27 09:39:06', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2111, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.30.173', 'Mozilla/4.0', '2021-10-27 09:39:08', '2021-10-27 09:39:11', 2682, 0, '', NULL, '2021-10-27 09:39:11', NULL, '2021-10-27 09:39:11', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2112, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.75', 'Mozilla/4.0', '2021-10-27 09:39:36', '2021-10-27 09:39:36', 38, 1007002001, '支付订单不处于待支付', NULL, '2021-10-27 09:39:36', NULL, '2021-10-27 09:39:36', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2113, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.30.171', 'Mozilla/4.0', '2021-10-27 09:39:38', '2021-10-27 09:39:38', 32, 1007002001, '支付订单不处于待支付', NULL, '2021-10-27 09:39:38', NULL, '2021-10-27 09:39:38', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2114, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.30.171', 'Mozilla/4.0', '2021-10-27 09:39:38', '2021-10-27 09:39:38', 34, 1007002001, '支付订单不处于待支付', NULL, '2021-10-27 09:39:38', NULL, '2021-10-27 09:39:38', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2115, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.78', 'Mozilla/4.0', '2021-10-27 09:39:39', '2021-10-27 09:39:39', 34, 1007002001, '支付订单不处于待支付', NULL, '2021-10-27 09:39:39', NULL, '2021-10-27 09:39:39', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2116, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.76', 'Mozilla/4.0', '2021-10-27 09:39:41', '2021-10-27 09:39:41', 34, 1007002001, '支付订单不处于待支付', NULL, '2021-10-27 09:39:41', NULL, '2021-10-27 09:39:41', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2117, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.76', 'Mozilla/4.0', '2021-10-27 09:39:42', '2021-10-27 09:39:42', 31, 1007002001, '支付订单不处于待支付', NULL, '2021-10-27 09:39:42', NULL, '2021-10-27 09:39:42', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2118, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.78', 'Mozilla/4.0', '2021-10-27 09:39:43', '2021-10-27 09:39:43', 29, 1007002001, '支付订单不处于待支付', NULL, '2021-10-27 09:39:43', NULL, '2021-10-27 09:39:43', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2119, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.75', 'Mozilla/4.0', '2021-10-27 09:39:53', '2021-10-27 09:39:53', 31, 1007002001, '支付订单不处于待支付', NULL, '2021-10-27 09:39:53', NULL, '2021-10-27 09:39:53', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2120, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:39:57', '2021-10-27 09:39:57', 8, 0, '', NULL, '2021-10-27 09:39:57', NULL, '2021-10-27 09:39:57', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2121, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:39:57', '2021-10-27 09:39:57', 58, 0, '', NULL, '2021-10-27 09:39:57', NULL, '2021-10-27 09:39:57', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2122, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.78', 'Mozilla/4.0', '2021-10-27 09:39:59', '2021-10-27 09:39:59', 34, 1007002001, '支付订单不处于待支付', NULL, '2021-10-27 09:39:59', NULL, '2021-10-27 09:39:59', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2123, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":113,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:40:03', '2021-10-27 09:40:06', 2605, 0, '', NULL, '2021-10-27 09:40:06', NULL, '2021-10-27 09:40:06', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2124, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.76', 'Mozilla/4.0', '2021-10-27 09:40:08', '2021-10-27 09:40:08', 26, 1007002001, '支付订单不处于待支付', NULL, '2021-10-27 09:40:08', NULL, '2021-10-27 09:40:08', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2125, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":113,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:40:11', '2021-10-27 09:40:11', 423, 0, '', NULL, '2021-10-27 09:40:11', NULL, '2021-10-27 09:40:11', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2126, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.76', 'Mozilla/4.0', '2021-10-27 09:40:14', '2021-10-27 09:40:14', 29, 1007002001, '支付订单不处于待支付', NULL, '2021-10-27 09:40:14', NULL, '2021-10-27 09:40:14', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2127, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.76', 'Mozilla/4.0', '2021-10-27 09:40:21', '2021-10-27 09:40:22', 1809, 0, '', NULL, '2021-10-27 09:40:22', NULL, '2021-10-27 09:40:22', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2128, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '58.251.80.46', 'Mozilla/4.0', '2021-10-27 09:43:09', '2021-10-27 09:43:09', 32, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:43:09', NULL, '2021-10-27 09:43:09', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2129, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '58.251.80.46', 'Mozilla/4.0', '2021-10-27 09:43:09', '2021-10-27 09:43:09', 33, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:43:09', NULL, '2021-10-27 09:43:09', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2130, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.30.173', 'Mozilla/4.0', '2021-10-27 09:43:09', '2021-10-27 09:43:09', 36, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:43:09', NULL, '2021-10-27 09:43:09', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2131, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.76', 'Mozilla/4.0', '2021-10-27 09:43:09', '2021-10-27 09:43:09', 51, 1007002001, '支付订单不处于待支付', NULL, '2021-10-27 09:43:09', NULL, '2021-10-27 09:43:09', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2132, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.76', 'Mozilla/4.0', '2021-10-27 09:43:09', '2021-10-27 09:43:09', 60, 1007002001, '支付订单不处于待支付', NULL, '2021-10-27 09:43:09', NULL, '2021-10-27 09:43:09', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2133, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:45:48', '2021-10-27 09:45:48', 124, 0, '', NULL, '2021-10-27 09:45:48', NULL, '2021-10-27 09:45:48', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2134, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:45:49', '2021-10-27 09:45:49', 87, 0, '', NULL, '2021-10-27 09:45:49', NULL, '2021-10-27 09:45:49', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2135, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":114,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 09:45:50', '2021-10-27 09:45:52', 2286, 0, '', NULL, '2021-10-27 09:45:52', NULL, '2021-10-27 09:45:52', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2136, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.169', 'Mozilla/4.0', '2021-10-27 09:45:57', '2021-10-27 09:46:39', 41995, 0, '', NULL, '2021-10-27 09:46:39', NULL, '2021-10-27 09:46:39', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2137, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-27 09:46:39', '2021-10-27 09:46:39', 64, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:46:39', NULL, '2021-10-27 09:46:39', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2138, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '140.207.54.76', 'Mozilla/4.0', '2021-10-27 09:46:39', '2021-10-27 09:46:39', 64, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:46:39', NULL, '2021-10-27 09:46:39', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2139, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-27 09:46:39', '2021-10-27 09:46:39', 63, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:46:39', NULL, '2021-10-27 09:46:39', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2140, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.169', 'Mozilla/4.0', '2021-10-27 09:46:39', '2021-10-27 09:46:39', 65, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:46:39', NULL, '2021-10-27 09:46:39', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2141, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '58.251.80.62', 'Mozilla/4.0', '2021-10-27 09:46:39', '2021-10-27 09:46:39', 64, 1007003001, '支付交易拓展单不处于待支付', NULL, '2021-10-27 09:46:39', NULL, '2021-10-27 09:46:39', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2142, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 10:04:21', '2021-10-27 10:04:21', 127, 0, '', NULL, '2021-10-27 10:04:21', NULL, '2021-10-27 10:04:21', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2143, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 10:04:21', '2021-10-27 10:04:21', 93, 0, '', NULL, '2021-10-27 10:04:21', NULL, '2021-10-27 10:04:21', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2144, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":115,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 10:04:22', '2021-10-27 10:04:23', 1164, 0, '', NULL, '2021-10-27 10:04:23', NULL, '2021-10-27 10:04:23', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2145, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.170', 'Mozilla/4.0', '2021-10-27 10:04:29', '2021-10-27 10:04:31', 2729, 0, '', NULL, '2021-10-27 10:04:31', NULL, '2021-10-27 10:04:31', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2146, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/pay-notify', '{\"query\":{},\"body\":\"{\\\"merchantOrderId\\\":\\\"1635300261266\\\",\\\"payOrderId\\\":115}\"}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 Hutool', '2021-10-27 10:04:33', '2021-10-27 10:04:33', 10, 0, '', NULL, '2021-10-27 10:04:33', NULL, '2021-10-27 10:04:33', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2147, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:09:12', '2021-10-27 13:09:12', 138, 0, '', NULL, '2021-10-27 13:09:12', NULL, '2021-10-27 13:09:12', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2148, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:09:12', '2021-10-27 13:09:12', 677, 500, '系统异常', NULL, '2021-10-27 13:09:12', NULL, '2021-10-27 13:09:12', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2149, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:11:08', '2021-10-27 13:11:08', 33, 0, '', NULL, '2021-10-27 13:11:08', NULL, '2021-10-27 13:11:08', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2150, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:11:08', '2021-10-27 13:11:09', 560, 0, '', NULL, '2021-10-27 13:11:09', NULL, '2021-10-27 13:11:09', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2151, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":117,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:11:10', '2021-10-27 13:11:11', 771, 0, '', NULL, '2021-10-27 13:11:11', NULL, '2021-10-27 13:11:11', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2152, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.30.173', 'Mozilla/4.0', '2021-10-27 13:11:16', '2021-10-27 13:11:16', 121, 0, '', NULL, '2021-10-27 13:11:16', NULL, '2021-10-27 13:11:16', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2153, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/pay-notify', '{\"query\":{},\"body\":\"{\\\"merchantOrderId\\\":\\\"1635311468233\\\",\\\"payOrderId\\\":117}\"}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 Hutool', '2021-10-27 13:11:17', '2021-10-27 13:11:17', 8, 0, '', NULL, '2021-10-27 13:11:17', NULL, '2021-10-27 13:11:17', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2154, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:17:03', '2021-10-27 13:17:03', 8, 0, '', NULL, '2021-10-27 13:17:03', NULL, '2021-10-27 13:17:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2155, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:17:03', '2021-10-27 13:17:03', 18, 0, '', NULL, '2021-10-27 13:17:03', NULL, '2021-10-27 13:17:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2156, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":118,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:17:04', '2021-10-27 13:17:04', 526, 0, '', NULL, '2021-10-27 13:17:04', NULL, '2021-10-27 13:17:04', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2157, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.175', 'Mozilla/4.0', '2021-10-27 13:17:09', '2021-10-27 13:17:09', 46, 0, '', NULL, '2021-10-27 13:17:09', NULL, '2021-10-27 13:17:09', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2158, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:18:01', '2021-10-27 13:18:02', 137, 0, '', NULL, '2021-10-27 13:18:02', NULL, '2021-10-27 13:18:02', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2159, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:18:01', '2021-10-27 13:18:02', 129, 0, '', NULL, '2021-10-27 13:18:02', NULL, '2021-10-27 13:18:02', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2160, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":119,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:18:02', '2021-10-27 13:18:03', 930, 0, '', NULL, '2021-10-27 13:18:03', NULL, '2021-10-27 13:18:03', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2161, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '58.251.80.53', 'Mozilla/4.0', '2021-10-27 13:18:11', '2021-10-27 13:18:11', 148, 0, '', NULL, '2021-10-27 13:18:11', NULL, '2021-10-27 13:18:11', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2162, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":119,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:19:00', '2021-10-27 13:19:00', 33, 1007002001, '支付订单不处于待支付', NULL, '2021-10-27 13:19:00', NULL, '2021-10-27 13:19:00', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2163, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:19:09', '2021-10-27 13:19:09', 8, 0, '', NULL, '2021-10-27 13:19:09', NULL, '2021-10-27 13:19:09', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2164, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:19:09', '2021-10-27 13:19:09', 25, 0, '', NULL, '2021-10-27 13:19:09', NULL, '2021-10-27 13:19:09', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2165, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":120,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:19:10', '2021-10-27 13:19:10', 530, 0, '', NULL, '2021-10-27 13:19:10', NULL, '2021-10-27 13:19:10', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2166, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '58.251.80.46', 'Mozilla/4.0', '2021-10-27 13:19:15', '2021-10-27 13:19:16', 109, 0, '', NULL, '2021-10-27 13:19:16', NULL, '2021-10-27 13:19:16', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2167, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/pay-notify', '{\"query\":{},\"body\":\"{\\\"merchantOrderId\\\":\\\"1635311949168\\\",\\\"payOrderId\\\":120}\"}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 Hutool', '2021-10-27 13:19:40', '2021-10-27 13:19:40', 9, 0, '', NULL, '2021-10-27 13:19:40', NULL, '2021-10-27 13:19:40', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2168, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/create', '{\"query\":{},\"body\":null}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:22:05', '2021-10-27 13:22:05', 134, 0, '', NULL, '2021-10-27 13:22:05', NULL, '2021-10-27 13:22:05', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2169, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":null}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:22:05', '2021-10-27 13:22:05', 131, 0, '', NULL, '2021-10-27 13:22:05', NULL, '2021-10-27 13:22:05', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2170, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"{\\\"id\\\":121,\\\"channelCode\\\":\\\"wx_pub\\\",\\\"channelExtras\\\":{\\\"openid\\\":\\\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\\\"}}\"}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:22:06', '2021-10-27 13:22:06', 790, 0, '', NULL, '2021-10-27 13:22:06', NULL, '2021-10-27 13:22:06', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2171, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/notify/wx-pub/9', '{\"query\":{},\"body\":null}', '121.51.58.170', 'Mozilla/4.0', '2021-10-27 13:22:16', '2021-10-27 13:22:16', 116, 0, '', NULL, '2021-10-27 13:22:16', NULL, '2021-10-27 13:22:16', b'0');
+INSERT INTO `inf_api_access_log` VALUES (2172, '', 0, 0, 'yudao-user-server', 'POST', '/api/shop/order/pay-notify', '{\"query\":{},\"body\":\"{\\\"merchantOrderId\\\":\\\"1635312124657\\\",\\\"payOrderId\\\":121}\"}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 Hutool', '2021-10-27 13:22:21', '2021-10-27 13:22:21', 10, 0, '', NULL, '2021-10-27 13:22:21', NULL, '2021-10-27 13:22:21', b'0');
COMMIT;
-- ----------------------------
@@ -84,12 +686,29 @@ CREATE TABLE `inf_api_error_log` (
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='系统异常日志';
+) ENGINE=InnoDB AUTO_INCREMENT=70 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='系统异常日志';
-- ----------------------------
-- Records of inf_api_error_log
-- ----------------------------
BEGIN;
+INSERT INTO `inf_api_error_log` VALUES (53, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{\"id\":\"19\",\"channelCode\":\"wx_pub\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:23:54', 'org.springframework.web.HttpMediaTypeNotSupportedException', 'HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported', 'HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported', 'org.springframework.web.HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:207)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131)\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:62)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:59)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver', 'AbstractMessageConverterMethodArgumentResolver.java', 'readWithMessageConverters', 207, 0, NULL, 0, NULL, '2021-10-24 23:23:54', NULL, '2021-10-24 23:23:54', b'0');
+INSERT INTO `inf_api_error_log` VALUES (54, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{\"id\":\"21\",\"channelCode\":\"wx_pub\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:25:37', 'org.springframework.web.HttpMediaTypeNotSupportedException', 'HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported', 'HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported', 'org.springframework.web.HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:207)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131)\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:62)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:59)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver', 'AbstractMessageConverterMethodArgumentResolver.java', 'readWithMessageConverters', 207, 0, NULL, 0, NULL, '2021-10-24 23:25:37', NULL, '2021-10-24 23:25:37', b'0');
+INSERT INTO `inf_api_error_log` VALUES (55, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{\"id\":\"21\",\"channelCode\":\"wx_pub\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:25:48', 'org.springframework.web.HttpMediaTypeNotSupportedException', 'HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported', 'HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported', 'org.springframework.web.HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:207)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131)\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:62)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:59)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver', 'AbstractMessageConverterMethodArgumentResolver.java', 'readWithMessageConverters', 207, 0, NULL, 0, NULL, '2021-10-24 23:25:48', NULL, '2021-10-24 23:25:48', b'0');
+INSERT INTO `inf_api_error_log` VALUES (56, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"id=22&channelCode=wx_pub\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:26:03', 'org.springframework.http.converter.HttpMessageNotReadableException', 'HttpMessageNotReadableException: JSON parse error: Unrecognized token \'id\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\'); nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token \'id\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\')\n at [Source: (PushbackInputStream); line: 1, column: 4]', 'JsonParseException: Unrecognized token \'id\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\')\n at [Source: (PushbackInputStream); line: 1, column: 4]', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unrecognized token \'id\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\'); nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token \'id\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\')\n at [Source: (PushbackInputStream); line: 1, column: 4]\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:389)\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:342)\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:186)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131)\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:62)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:59)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.web.core.filter.CacheRequestBodyFilter.doFilterInternal(CacheRequestBodyFilter.java:22)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\nCaused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token \'id\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\')\n at [Source: (PushbackInputStream); line: 1, column: 4]\n at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1851)\n at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:717)\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidToken(UTF8StreamJsonParser.java:3588)\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2683)\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:865)\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:757)\n at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4664)\n at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4513)\n at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3521)\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:378)\n ... 121 more\n', 'org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter', 'AbstractJackson2HttpMessageConverter.java', 'readJavaType', 389, 0, NULL, 0, NULL, '2021-10-24 23:26:03', NULL, '2021-10-24 23:26:03', b'0');
+INSERT INTO `inf_api_error_log` VALUES (57, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{\"id\":\"28\",\"channelCode\":\"wx_pub\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:27:00', 'org.springframework.web.HttpMediaTypeNotSupportedException', 'HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported', 'HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported', 'org.springframework.web.HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:207)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131)\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:62)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:59)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver', 'AbstractMessageConverterMethodArgumentResolver.java', 'readWithMessageConverters', 207, 0, NULL, 0, NULL, '2021-10-24 23:27:00', NULL, '2021-10-24 23:27:00', b'0');
+INSERT INTO `inf_api_error_log` VALUES (58, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{\"id\":\"29\",\"channelCode\":\"wx_pub\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:27:05', 'org.springframework.web.HttpMediaTypeNotSupportedException', 'HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported', 'HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported', 'org.springframework.web.HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:207)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131)\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:62)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:59)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver', 'AbstractMessageConverterMethodArgumentResolver.java', 'readWithMessageConverters', 207, 0, NULL, 0, NULL, '2021-10-24 23:27:05', NULL, '2021-10-24 23:27:05', b'0');
+INSERT INTO `inf_api_error_log` VALUES (59, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{\"id\":\"31\",\"channelCode\":\"wx_pub\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:27:50', 'org.springframework.web.HttpMediaTypeNotSupportedException', 'HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported', 'HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported', 'org.springframework.web.HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:207)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131)\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:62)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:59)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver', 'AbstractMessageConverterMethodArgumentResolver.java', 'readWithMessageConverters', 207, 0, NULL, 0, NULL, '2021-10-24 23:27:50', NULL, '2021-10-24 23:27:50', b'0');
+INSERT INTO `inf_api_error_log` VALUES (60, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"id=33&channelCode=wx_pub\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:28:36', 'org.springframework.http.converter.HttpMessageNotReadableException', 'HttpMessageNotReadableException: JSON parse error: Unrecognized token \'id\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\'); nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token \'id\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\')\n at [Source: (PushbackInputStream); line: 1, column: 4]', 'JsonParseException: Unrecognized token \'id\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\')\n at [Source: (PushbackInputStream); line: 1, column: 4]', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unrecognized token \'id\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\'); nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token \'id\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\')\n at [Source: (PushbackInputStream); line: 1, column: 4]\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:389)\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:342)\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:186)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131)\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:62)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:59)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.web.core.filter.CacheRequestBodyFilter.doFilterInternal(CacheRequestBodyFilter.java:22)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\nCaused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token \'id\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\')\n at [Source: (PushbackInputStream); line: 1, column: 4]\n at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1851)\n at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:717)\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidToken(UTF8StreamJsonParser.java:3588)\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2683)\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:865)\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:757)\n at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4664)\n at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4513)\n at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3521)\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:378)\n ... 121 more\n', 'org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter', 'AbstractJackson2HttpMessageConverter.java', 'readJavaType', 389, 0, NULL, 0, NULL, '2021-10-24 23:28:36', NULL, '2021-10-24 23:28:36', b'0');
+INSERT INTO `inf_api_error_log` VALUES (61, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{},\"body\":\"id=34&channelCode=wx_pub\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:28:47', 'org.springframework.http.converter.HttpMessageNotReadableException', 'HttpMessageNotReadableException: JSON parse error: Unrecognized token \'id\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\'); nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token \'id\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\')\n at [Source: (PushbackInputStream); line: 1, column: 4]', 'JsonParseException: Unrecognized token \'id\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\')\n at [Source: (PushbackInputStream); line: 1, column: 4]', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unrecognized token \'id\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\'); nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token \'id\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\')\n at [Source: (PushbackInputStream); line: 1, column: 4]\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:389)\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:342)\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:186)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131)\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:62)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:59)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.web.core.filter.CacheRequestBodyFilter.doFilterInternal(CacheRequestBodyFilter.java:22)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\nCaused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token \'id\': was expecting (JSON String, Number, Array, Object or token \'null\', \'true\' or \'false\')\n at [Source: (PushbackInputStream); line: 1, column: 4]\n at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1851)\n at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:717)\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidToken(UTF8StreamJsonParser.java:3588)\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2683)\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:865)\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:757)\n at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4664)\n at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4513)\n at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3521)\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:378)\n ... 121 more\n', 'org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter', 'AbstractJackson2HttpMessageConverter.java', 'readJavaType', 389, 0, NULL, 0, NULL, '2021-10-24 23:28:47', NULL, '2021-10-24 23:28:47', b'0');
+INSERT INTO `inf_api_error_log` VALUES (62, '', 0, 0, 'yudao-user-server', 'POST', '/api/pay/order/submit', '{\"query\":{\"{\\\"id\\\":38,\\\"channelCode\\\":\\\"wx_pub\\\"}\":\"\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1 wechatdevtools/1.05.2110110 MicroMessenger/8.0.5 webview/16350887771782877 webdebugger port/40959 token/3859dc67f12345c5d8653a2cc61d9470', '2021-10-24 23:30:50', 'org.springframework.web.HttpMediaTypeNotSupportedException', 'HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported', 'HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported', 'org.springframework.web.HttpMediaTypeNotSupportedException: Content type \'application/x-www-form-urlencoded;charset=UTF-8\' not supported\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:207)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158)\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131)\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:62)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:59)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver', 'AbstractMessageConverterMethodArgumentResolver.java', 'readWithMessageConverters', 207, 0, NULL, 0, NULL, '2021-10-24 23:30:50', NULL, '2021-10-24 23:30:50', b'0');
+INSERT INTO `inf_api_error_log` VALUES (63, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"_ij_reload\":\"\",\"url\":\"http://localhost:63342/dashboard/yudao-user-server/static/pay.html?_ijt=q3r4kbuhbobkaatgub1e1dmsoa\"},\"body\":\"\"}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:81.0) Gecko/20100101 Firefox/81.0', '2021-10-25 08:38:18', 'me.chanjar.weixin.common.error.WxErrorException', 'WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.138.223 ipv6 ::ffff:101.82.138.223, not in whitelist rid: 6175fc79-1be8d90d-6d4dd4b8,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.138.223 ipv6 ::ffff:101.82.138.223, not in whitelist rid: 6175fc79-1be8d90d-6d4dd4b8\"}', 'WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.138.223 ipv6 ::ffff:101.82.138.223, not in whitelist rid: 6175fc79-1be8d90d-6d4dd4b8,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.138.223 ipv6 ::ffff:101.82.138.223, not in whitelist rid: 6175fc79-1be8d90d-6d4dd4b8\"}', 'me.chanjar.weixin.common.error.WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.138.223 ipv6 ::ffff:101.82.138.223, not in whitelist rid: 6175fc79-1be8d90d-6d4dd4b8,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.138.223 ipv6 ::ffff:101.82.138.223, not in whitelist rid: 6175fc79-1be8d90d-6d4dd4b8\"}\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.extractAccessToken(BaseWxMpServiceImpl.java:454)\n at me.chanjar.weixin.mp.api.impl.WxMpServiceHttpClientImpl.getAccessToken(WxMpServiceHttpClientImpl.java:91)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.executeInternal(BaseWxMpServiceImpl.java:399)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.execute(BaseWxMpServiceImpl.java:363)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.getTicket(BaseWxMpServiceImpl.java:200)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.getJsapiTicket(BaseWxMpServiceImpl.java:222)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.createJsapiSignature(BaseWxMpServiceImpl.java:229)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController.createJsapiSignature(WxMpController.java:34)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController$$FastClassBySpringCGLIB$$cde47d88.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController$$EnhancerBySpringCGLIB$$3e195ba1.createJsapiSignature()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:62)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:59)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl', 'BaseWxMpServiceImpl.java', 'extractAccessToken', 454, 0, NULL, 0, NULL, '2021-10-25 08:38:18', NULL, '2021-10-25 08:38:18', b'0');
+INSERT INTO `inf_api_error_log` VALUES (64, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":\"\"}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-25 08:38:41', 'me.chanjar.weixin.common.error.WxErrorException', 'WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.138.223 ipv6 ::ffff:101.82.138.223, not in whitelist rid: 6175fc91-6091fac7-62054871,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.138.223 ipv6 ::ffff:101.82.138.223, not in whitelist rid: 6175fc91-6091fac7-62054871\"}', 'WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.138.223 ipv6 ::ffff:101.82.138.223, not in whitelist rid: 6175fc91-6091fac7-62054871,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.138.223 ipv6 ::ffff:101.82.138.223, not in whitelist rid: 6175fc91-6091fac7-62054871\"}', 'me.chanjar.weixin.common.error.WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.138.223 ipv6 ::ffff:101.82.138.223, not in whitelist rid: 6175fc91-6091fac7-62054871,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.138.223 ipv6 ::ffff:101.82.138.223, not in whitelist rid: 6175fc91-6091fac7-62054871\"}\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.extractAccessToken(BaseWxMpServiceImpl.java:454)\n at me.chanjar.weixin.mp.api.impl.WxMpServiceHttpClientImpl.getAccessToken(WxMpServiceHttpClientImpl.java:91)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.executeInternal(BaseWxMpServiceImpl.java:399)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.execute(BaseWxMpServiceImpl.java:363)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.getTicket(BaseWxMpServiceImpl.java:200)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.getJsapiTicket(BaseWxMpServiceImpl.java:222)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.createJsapiSignature(BaseWxMpServiceImpl.java:229)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController.createJsapiSignature(WxMpController.java:34)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController$$FastClassBySpringCGLIB$$cde47d88.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController$$EnhancerBySpringCGLIB$$3e195ba1.createJsapiSignature()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:62)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:59)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl', 'BaseWxMpServiceImpl.java', 'extractAccessToken', 454, 0, NULL, 0, NULL, '2021-10-25 08:38:41', NULL, '2021-10-25 08:38:41', b'0');
+INSERT INTO `inf_api_error_log` VALUES (65, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":\"\"}', '101.82.138.223', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', '2021-10-25 08:39:28', 'me.chanjar.weixin.common.error.WxErrorException', 'WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.138.223 ipv6 ::ffff:101.82.138.223, not in whitelist rid: 6175fcb6-74b26f29-48d42d07,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.138.223 ipv6 ::ffff:101.82.138.223, not in whitelist rid: 6175fcb6-74b26f29-48d42d07\"}', 'WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.138.223 ipv6 ::ffff:101.82.138.223, not in whitelist rid: 6175fcb6-74b26f29-48d42d07,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.138.223 ipv6 ::ffff:101.82.138.223, not in whitelist rid: 6175fcb6-74b26f29-48d42d07\"}', 'me.chanjar.weixin.common.error.WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.138.223 ipv6 ::ffff:101.82.138.223, not in whitelist rid: 6175fcb6-74b26f29-48d42d07,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.138.223 ipv6 ::ffff:101.82.138.223, not in whitelist rid: 6175fcb6-74b26f29-48d42d07\"}\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.extractAccessToken(BaseWxMpServiceImpl.java:454)\n at me.chanjar.weixin.mp.api.impl.WxMpServiceHttpClientImpl.getAccessToken(WxMpServiceHttpClientImpl.java:91)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.executeInternal(BaseWxMpServiceImpl.java:399)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.execute(BaseWxMpServiceImpl.java:363)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.getTicket(BaseWxMpServiceImpl.java:200)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.getJsapiTicket(BaseWxMpServiceImpl.java:222)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.createJsapiSignature(BaseWxMpServiceImpl.java:229)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController.createJsapiSignature(WxMpController.java:34)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController$$FastClassBySpringCGLIB$$cde47d88.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController$$EnhancerBySpringCGLIB$$3e195ba1.createJsapiSignature()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:62)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:59)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl', 'BaseWxMpServiceImpl.java', 'extractAccessToken', 454, 0, NULL, 0, NULL, '2021-10-25 08:39:28', NULL, '2021-10-25 08:39:28', b'0');
+INSERT INTO `inf_api_error_log` VALUES (66, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":\"\"}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:20:46', 'me.chanjar.weixin.common.error.WxErrorException', 'WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.98.72 ipv6 ::ffff:101.82.98.72, not in whitelist rid: 617757ed-43dccf61-7189bd00,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.98.72 ipv6 ::ffff:101.82.98.72, not in whitelist rid: 617757ed-43dccf61-7189bd00\"}', 'WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.98.72 ipv6 ::ffff:101.82.98.72, not in whitelist rid: 617757ed-43dccf61-7189bd00,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.98.72 ipv6 ::ffff:101.82.98.72, not in whitelist rid: 617757ed-43dccf61-7189bd00\"}', 'me.chanjar.weixin.common.error.WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.98.72 ipv6 ::ffff:101.82.98.72, not in whitelist rid: 617757ed-43dccf61-7189bd00,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.98.72 ipv6 ::ffff:101.82.98.72, not in whitelist rid: 617757ed-43dccf61-7189bd00\"}\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.extractAccessToken(BaseWxMpServiceImpl.java:454)\n at me.chanjar.weixin.mp.api.impl.WxMpServiceHttpClientImpl.getAccessToken(WxMpServiceHttpClientImpl.java:91)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.executeInternal(BaseWxMpServiceImpl.java:399)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.execute(BaseWxMpServiceImpl.java:363)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.getTicket(BaseWxMpServiceImpl.java:200)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.getJsapiTicket(BaseWxMpServiceImpl.java:222)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.createJsapiSignature(BaseWxMpServiceImpl.java:229)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController.createJsapiSignature(WxMpController.java:34)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController$$FastClassBySpringCGLIB$$cde47d88.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController$$EnhancerBySpringCGLIB$$109d0847.createJsapiSignature()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:62)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:59)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl', 'BaseWxMpServiceImpl.java', 'extractAccessToken', 454, 0, NULL, 0, NULL, '2021-10-26 09:20:46', NULL, '2021-10-26 09:20:46', b'0');
+INSERT INTO `inf_api_error_log` VALUES (67, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":\"\"}', '101.82.98.72', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64', '2021-10-26 09:21:33', 'me.chanjar.weixin.common.error.WxErrorException', 'WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.98.72 ipv6 ::ffff:101.82.98.72, not in whitelist rid: 61775806-508b6477-3686e7cc,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.98.72 ipv6 ::ffff:101.82.98.72, not in whitelist rid: 61775806-508b6477-3686e7cc\"}', 'WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.98.72 ipv6 ::ffff:101.82.98.72, not in whitelist rid: 61775806-508b6477-3686e7cc,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.98.72 ipv6 ::ffff:101.82.98.72, not in whitelist rid: 61775806-508b6477-3686e7cc\"}', 'me.chanjar.weixin.common.error.WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.98.72 ipv6 ::ffff:101.82.98.72, not in whitelist rid: 61775806-508b6477-3686e7cc,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.98.72 ipv6 ::ffff:101.82.98.72, not in whitelist rid: 61775806-508b6477-3686e7cc\"}\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.extractAccessToken(BaseWxMpServiceImpl.java:454)\n at me.chanjar.weixin.mp.api.impl.WxMpServiceHttpClientImpl.getAccessToken(WxMpServiceHttpClientImpl.java:91)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.executeInternal(BaseWxMpServiceImpl.java:399)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.execute(BaseWxMpServiceImpl.java:363)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.getTicket(BaseWxMpServiceImpl.java:200)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.getJsapiTicket(BaseWxMpServiceImpl.java:222)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.createJsapiSignature(BaseWxMpServiceImpl.java:229)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController.createJsapiSignature(WxMpController.java:34)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController$$FastClassBySpringCGLIB$$cde47d88.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController$$EnhancerBySpringCGLIB$$109d0847.createJsapiSignature()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:62)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:59)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl', 'BaseWxMpServiceImpl.java', 'extractAccessToken', 454, 0, NULL, 0, NULL, '2021-10-26 09:21:33', NULL, '2021-10-26 09:21:33', b'0');
+INSERT INTO `inf_api_error_log` VALUES (68, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":\"\"}', '101.82.181.148', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 08:49:30', 'me.chanjar.weixin.common.error.WxErrorException', 'WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.181.148 ipv6 ::ffff:101.82.181.148, not in whitelist rid: 6178a21a-5556e976-7358e3e3,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.181.148 ipv6 ::ffff:101.82.181.148, not in whitelist rid: 6178a21a-5556e976-7358e3e3\"}', 'WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.181.148 ipv6 ::ffff:101.82.181.148, not in whitelist rid: 6178a21a-5556e976-7358e3e3,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.181.148 ipv6 ::ffff:101.82.181.148, not in whitelist rid: 6178a21a-5556e976-7358e3e3\"}', 'me.chanjar.weixin.common.error.WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.181.148 ipv6 ::ffff:101.82.181.148, not in whitelist rid: 6178a21a-5556e976-7358e3e3,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.181.148 ipv6 ::ffff:101.82.181.148, not in whitelist rid: 6178a21a-5556e976-7358e3e3\"}\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.extractAccessToken(BaseWxMpServiceImpl.java:454)\n at me.chanjar.weixin.mp.api.impl.WxMpServiceHttpClientImpl.getAccessToken(WxMpServiceHttpClientImpl.java:91)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.executeInternal(BaseWxMpServiceImpl.java:399)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.execute(BaseWxMpServiceImpl.java:363)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.getTicket(BaseWxMpServiceImpl.java:200)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.getJsapiTicket(BaseWxMpServiceImpl.java:222)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.createJsapiSignature(BaseWxMpServiceImpl.java:229)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController.createJsapiSignature(WxMpController.java:34)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController$$FastClassBySpringCGLIB$$cde47d88.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController$$EnhancerBySpringCGLIB$$ae5f34e3.createJsapiSignature()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:62)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:59)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl', 'BaseWxMpServiceImpl.java', 'extractAccessToken', 454, 0, NULL, 0, NULL, '2021-10-27 08:49:30', NULL, '2021-10-27 08:49:30', b'0');
+INSERT INTO `inf_api_error_log` VALUES (69, '', 0, 0, 'yudao-user-server', 'POST', '/api/wx/mp/create-jsapi-signature', '{\"query\":{\"url\":\"http://niubi.natapp1.cc/static/pay.html\"},\"body\":\"\"}', '101.82.233.75', 'Mozilla/5.0 (Linux; Android 11; V2055A Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/045811 Mobile Safari/537.36 MMWEBID/2883 MicroMessenger/8.0.11.1980(0x28000B59) Process/tools WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64', '2021-10-27 13:09:12', 'me.chanjar.weixin.common.error.WxErrorException', 'WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.233.75 ipv6 ::ffff:101.82.233.75, not in whitelist rid: 6178def8-13461660-0d019127,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.233.75 ipv6 ::ffff:101.82.233.75, not in whitelist rid: 6178def8-13461660-0d019127\"}', 'WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.233.75 ipv6 ::ffff:101.82.233.75, not in whitelist rid: 6178def8-13461660-0d019127,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.233.75 ipv6 ::ffff:101.82.233.75, not in whitelist rid: 6178def8-13461660-0d019127\"}', 'me.chanjar.weixin.common.error.WxErrorException: 错误代码:40164, 错误信息:invalid ip 101.82.233.75 ipv6 ::ffff:101.82.233.75, not in whitelist rid: 6178def8-13461660-0d019127,微信原始报文:{\"errcode\":40164,\"errmsg\":\"invalid ip 101.82.233.75 ipv6 ::ffff:101.82.233.75, not in whitelist rid: 6178def8-13461660-0d019127\"}\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.extractAccessToken(BaseWxMpServiceImpl.java:454)\n at me.chanjar.weixin.mp.api.impl.WxMpServiceHttpClientImpl.getAccessToken(WxMpServiceHttpClientImpl.java:91)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.executeInternal(BaseWxMpServiceImpl.java:399)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.execute(BaseWxMpServiceImpl.java:363)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.getTicket(BaseWxMpServiceImpl.java:200)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.getJsapiTicket(BaseWxMpServiceImpl.java:222)\n at me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl.createJsapiSignature(BaseWxMpServiceImpl.java:229)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController.createJsapiSignature(WxMpController.java:34)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController$$FastClassBySpringCGLIB$$cde47d88.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)\n at cn.iocoder.yudao.userserver.modules.weixin.controller.mp.WxMpController$$EnhancerBySpringCGLIB$$31cb4ab8.createJsapiSignature()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:62)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.apilog.core.filter.ApiAccessLogFilter.doFilterInternal(ApiAccessLogFilter.java:59)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl', 'BaseWxMpServiceImpl.java', 'extractAccessToken', 454, 0, NULL, 0, NULL, '2021-10-27 13:09:12', NULL, '2021-10-27 13:09:12', b'0');
COMMIT;
-- ----------------------------
@@ -175,7 +794,7 @@ CREATE TABLE `inf_job` (
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='定时任务表';
+) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='定时任务表';
-- ----------------------------
-- Records of inf_job
@@ -183,6 +802,8 @@ CREATE TABLE `inf_job` (
BEGIN;
INSERT INTO `inf_job` VALUES (2, '用户 Session 超时 Job', 3, 'sysUserSessionTimeoutJob', 'aoteman', '0/5 * * * * ? *', 0, 0, 10, '', '2021-02-07 10:15:09', '', '2021-02-07 12:57:44', b'1');
INSERT INTO `inf_job` VALUES (3, '用户 Session 超时 Job', 1, 'sysUserSessionTimeoutJob', NULL, '0 * * * * ? *', 3, 2000, 0, '', '2021-02-07 13:07:32', '', '2021-02-08 04:44:58', b'0');
+INSERT INTO `inf_job` VALUES (4, 'payNotifyJob', 1, '支付通知 Job', NULL, '* * * * * ?', 0, 0, 0, '1', '2021-10-27 08:33:35', '1', '2021-10-27 00:34:14', b'1');
+INSERT INTO `inf_job` VALUES (5, '支付通知 Job', 1, 'payNotifyJob', NULL, '* * * * * ?', 0, 0, 0, '1', '2021-10-27 08:34:42', '1', '2021-10-27 08:34:42', b'0');
COMMIT;
-- ----------------------------
@@ -206,12 +827,75 @@ CREATE TABLE `inf_job_log` (
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=2100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='定时任务日志表';
+) ENGINE=InnoDB AUTO_INCREMENT=2163 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='定时任务日志表';
-- ----------------------------
-- Records of inf_job_log
-- ----------------------------
BEGIN;
+INSERT INTO `inf_job_log` VALUES (2100, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-10-27 08:29:49', '2021-10-27 08:29:49', 489, 1, '移除在线会话数量为 1 个', NULL, '2021-10-27 08:29:49', NULL, '2021-10-27 08:29:49', b'0');
+INSERT INTO `inf_job_log` VALUES (2101, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-10-27 08:30:00', '2021-10-27 08:30:00', 21, 1, '移除在线会话数量为 0 个', NULL, '2021-10-27 08:30:00', NULL, '2021-10-27 08:30:00', b'0');
+INSERT INTO `inf_job_log` VALUES (2102, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-10-27 08:31:00', '2021-10-27 08:31:00', 13, 1, '移除在线会话数量为 0 个', NULL, '2021-10-27 08:31:00', NULL, '2021-10-27 08:31:00', b'0');
+INSERT INTO `inf_job_log` VALUES (2103, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-10-27 08:32:00', '2021-10-27 08:32:00', 13, 1, '移除在线会话数量为 0 个', NULL, '2021-10-27 08:32:00', NULL, '2021-10-27 08:32:00', b'0');
+INSERT INTO `inf_job_log` VALUES (2104, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-10-27 08:33:00', '2021-10-27 08:33:00', 14, 1, '移除在线会话数量为 0 个', NULL, '2021-10-27 08:33:00', NULL, '2021-10-27 08:33:00', b'0');
+INSERT INTO `inf_job_log` VALUES (2105, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:33:59', '2021-10-27 08:33:59', 14, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:33:59', NULL, '2021-10-27 08:33:59', b'0');
+INSERT INTO `inf_job_log` VALUES (2106, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-10-27 08:33:59', '2021-10-27 08:33:59', 23, 1, '移除在线会话数量为 0 个', NULL, '2021-10-27 08:33:59', NULL, '2021-10-27 08:33:59', b'0');
+INSERT INTO `inf_job_log` VALUES (2107, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:33:59', '2021-10-27 08:33:59', 10, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:33:59', NULL, '2021-10-27 08:33:59', b'0');
+INSERT INTO `inf_job_log` VALUES (2108, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:00', '2021-10-27 08:34:00', 13, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:00', NULL, '2021-10-27 08:34:00', b'0');
+INSERT INTO `inf_job_log` VALUES (2109, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:00', '2021-10-27 08:34:00', 9, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:00', NULL, '2021-10-27 08:34:00', b'0');
+INSERT INTO `inf_job_log` VALUES (2110, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:00', '2021-10-27 08:34:00', 8, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:00', NULL, '2021-10-27 08:34:00', b'0');
+INSERT INTO `inf_job_log` VALUES (2111, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:00', '2021-10-27 08:34:00', 15, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:00', NULL, '2021-10-27 08:34:00', b'0');
+INSERT INTO `inf_job_log` VALUES (2112, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:00', '2021-10-27 08:34:00', 11, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:00', NULL, '2021-10-27 08:34:00', b'0');
+INSERT INTO `inf_job_log` VALUES (2113, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-10-27 08:34:00', '2021-10-27 08:34:00', 14, 1, '移除在线会话数量为 0 个', NULL, '2021-10-27 08:34:00', NULL, '2021-10-27 08:34:00', b'0');
+INSERT INTO `inf_job_log` VALUES (2114, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:00', '2021-10-27 08:34:00', 7, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:00', NULL, '2021-10-27 08:34:00', b'0');
+INSERT INTO `inf_job_log` VALUES (2115, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:00', '2021-10-27 08:34:00', 11, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:00', NULL, '2021-10-27 08:34:00', b'0');
+INSERT INTO `inf_job_log` VALUES (2116, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:00', '2021-10-27 08:34:00', 18, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:00', NULL, '2021-10-27 08:34:00', b'0');
+INSERT INTO `inf_job_log` VALUES (2117, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:00', '2021-10-27 08:34:00', 8, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:00', NULL, '2021-10-27 08:34:00', b'0');
+INSERT INTO `inf_job_log` VALUES (2118, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:01', '2021-10-27 08:34:01', 9, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:01', NULL, '2021-10-27 08:34:01', b'0');
+INSERT INTO `inf_job_log` VALUES (2119, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:01', '2021-10-27 08:34:01', 12, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:01', NULL, '2021-10-27 08:34:01', b'0');
+INSERT INTO `inf_job_log` VALUES (2120, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:01', '2021-10-27 08:34:01', 10, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:01', NULL, '2021-10-27 08:34:01', b'0');
+INSERT INTO `inf_job_log` VALUES (2121, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:01', '2021-10-27 08:34:01', 9, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:01', NULL, '2021-10-27 08:34:01', b'0');
+INSERT INTO `inf_job_log` VALUES (2122, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:01', '2021-10-27 08:34:01', 10, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:01', NULL, '2021-10-27 08:34:01', b'0');
+INSERT INTO `inf_job_log` VALUES (2123, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:01', '2021-10-27 08:34:01', 11, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:01', NULL, '2021-10-27 08:34:01', b'0');
+INSERT INTO `inf_job_log` VALUES (2124, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:01', '2021-10-27 08:34:01', 7, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:01', NULL, '2021-10-27 08:34:01', b'0');
+INSERT INTO `inf_job_log` VALUES (2125, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:01', '2021-10-27 08:34:01', 9, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:01', NULL, '2021-10-27 08:34:01', b'0');
+INSERT INTO `inf_job_log` VALUES (2126, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:01', '2021-10-27 08:34:01', 9, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:01', NULL, '2021-10-27 08:34:01', b'0');
+INSERT INTO `inf_job_log` VALUES (2127, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:01', '2021-10-27 08:34:01', 8, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:01', NULL, '2021-10-27 08:34:01', b'0');
+INSERT INTO `inf_job_log` VALUES (2128, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:01', '2021-10-27 08:34:01', 11, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:01', NULL, '2021-10-27 08:34:01', b'0');
+INSERT INTO `inf_job_log` VALUES (2129, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:01', '2021-10-27 08:34:01', 8, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:01', NULL, '2021-10-27 08:34:01', b'0');
+INSERT INTO `inf_job_log` VALUES (2130, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:02', '2021-10-27 08:34:02', 8, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:02', NULL, '2021-10-27 08:34:02', b'0');
+INSERT INTO `inf_job_log` VALUES (2131, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:02', '2021-10-27 08:34:02', 6, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:02', NULL, '2021-10-27 08:34:02', b'0');
+INSERT INTO `inf_job_log` VALUES (2132, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:02', '2021-10-27 08:34:02', 7, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:02', NULL, '2021-10-27 08:34:02', b'0');
+INSERT INTO `inf_job_log` VALUES (2133, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:02', '2021-10-27 08:34:02', 8, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:02', NULL, '2021-10-27 08:34:02', b'0');
+INSERT INTO `inf_job_log` VALUES (2134, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:02', '2021-10-27 08:34:02', 8, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:02', NULL, '2021-10-27 08:34:02', b'0');
+INSERT INTO `inf_job_log` VALUES (2135, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:03', '2021-10-27 08:34:03', 10, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:03', NULL, '2021-10-27 08:34:03', b'0');
+INSERT INTO `inf_job_log` VALUES (2136, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:04', '2021-10-27 08:34:04', 9, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:04', NULL, '2021-10-27 08:34:04', b'0');
+INSERT INTO `inf_job_log` VALUES (2137, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:05', '2021-10-27 08:34:05', 13, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:05', NULL, '2021-10-27 08:34:05', b'0');
+INSERT INTO `inf_job_log` VALUES (2138, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:06', '2021-10-27 08:34:06', 10, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:06', NULL, '2021-10-27 08:34:06', b'0');
+INSERT INTO `inf_job_log` VALUES (2139, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:07', '2021-10-27 08:34:07', 9, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:07', NULL, '2021-10-27 08:34:07', b'0');
+INSERT INTO `inf_job_log` VALUES (2140, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:08', '2021-10-27 08:34:08', 9, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:08', NULL, '2021-10-27 08:34:08', b'0');
+INSERT INTO `inf_job_log` VALUES (2141, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:09', '2021-10-27 08:34:09', 9, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:09', NULL, '2021-10-27 08:34:09', b'0');
+INSERT INTO `inf_job_log` VALUES (2142, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:10', '2021-10-27 08:34:10', 9, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:10', NULL, '2021-10-27 08:34:10', b'0');
+INSERT INTO `inf_job_log` VALUES (2143, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:11', '2021-10-27 08:34:11', 8, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:11', NULL, '2021-10-27 08:34:11', b'0');
+INSERT INTO `inf_job_log` VALUES (2144, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:12', '2021-10-27 08:34:12', 9, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:12', NULL, '2021-10-27 08:34:12', b'0');
+INSERT INTO `inf_job_log` VALUES (2145, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:13', '2021-10-27 08:34:13', 9, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:13', NULL, '2021-10-27 08:34:13', b'0');
+INSERT INTO `inf_job_log` VALUES (2146, 4, '支付通知 Job', NULL, 1, '2021-10-27 08:34:14', '2021-10-27 08:34:14', 9, 2, 'NoSuchBeanDefinitionException: No bean named \'支付通知 Job\' available', NULL, '2021-10-27 08:34:14', NULL, '2021-10-27 08:34:14', b'0');
+INSERT INTO `inf_job_log` VALUES (2147, 5, 'payNotifyJob', NULL, 1, '2021-10-27 08:34:43', '2021-10-27 08:35:30', 47031, 2, 'SQLException: Incorrect DATETIME value: \'NOW()\'', NULL, '2021-10-27 08:34:43', NULL, '2021-10-27 08:35:30', b'0');
+INSERT INTO `inf_job_log` VALUES (2148, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-10-27 08:35:30', '2021-10-27 08:35:30', 14, 1, '移除在线会话数量为 0 个', NULL, '2021-10-27 08:35:30', NULL, '2021-10-27 08:35:30', b'0');
+INSERT INTO `inf_job_log` VALUES (2149, 5, 'payNotifyJob', NULL, 1, '2021-10-27 08:35:30', '2021-10-27 08:35:30', 17, 2, 'SQLException: Incorrect DATETIME value: \'NOW()\'', NULL, '2021-10-27 08:35:30', NULL, '2021-10-27 08:35:30', b'0');
+INSERT INTO `inf_job_log` VALUES (2150, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-10-27 08:36:18', '2021-10-27 08:36:18', 52, 1, '移除在线会话数量为 0 个', NULL, '2021-10-27 08:36:18', NULL, '2021-10-27 08:36:18', b'0');
+INSERT INTO `inf_job_log` VALUES (2151, 5, 'payNotifyJob', NULL, 1, '2021-10-27 08:36:18', '2021-10-27 08:36:23', 4716, 1, '执行支付通知 0 个', NULL, '2021-10-27 08:36:18', NULL, '2021-10-27 08:36:23', b'0');
+INSERT INTO `inf_job_log` VALUES (2152, 5, 'payNotifyJob', NULL, 1, '2021-10-27 08:36:23', '2021-10-27 08:36:46', 23191, 1, '执行支付通知 0 个', NULL, '2021-10-27 08:36:23', NULL, '2021-10-27 08:36:46', b'0');
+INSERT INTO `inf_job_log` VALUES (2153, 5, 'payNotifyJob', NULL, 1, '2021-10-27 08:36:46', '2021-10-27 08:36:48', 1376, 1, '执行支付通知 0 个', NULL, '2021-10-27 08:36:46', NULL, '2021-10-27 08:36:48', b'0');
+INSERT INTO `inf_job_log` VALUES (2154, 5, 'payNotifyJob', NULL, 1, '2021-10-27 08:36:48', '2021-10-27 08:37:14', 25787, 1, '执行支付通知 0 个', NULL, '2021-10-27 08:36:48', NULL, '2021-10-27 08:37:14', b'0');
+INSERT INTO `inf_job_log` VALUES (2155, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-10-27 08:37:14', '2021-10-27 08:37:14', 22, 1, '移除在线会话数量为 0 个', NULL, '2021-10-27 08:37:14', NULL, '2021-10-27 08:37:14', b'0');
+INSERT INTO `inf_job_log` VALUES (2156, 5, 'payNotifyJob', NULL, 1, '2021-10-27 08:37:14', '2021-10-27 08:37:15', 1016, 1, '执行支付通知 0 个', NULL, '2021-10-27 08:37:14', NULL, '2021-10-27 08:37:15', b'0');
+INSERT INTO `inf_job_log` VALUES (2157, 5, 'payNotifyJob', NULL, 1, '2021-10-27 08:37:15', '2021-10-27 08:37:15', 23, 1, '执行支付通知 0 个', NULL, '2021-10-27 08:37:15', NULL, '2021-10-27 08:37:15', b'0');
+INSERT INTO `inf_job_log` VALUES (2158, 5, 'payNotifyJob', NULL, 1, '2021-10-27 08:37:48', '2021-10-27 08:38:07', 19457, 1, '执行支付通知 4 个', NULL, '2021-10-27 08:37:48', NULL, '2021-10-27 08:38:07', b'0');
+INSERT INTO `inf_job_log` VALUES (2159, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-10-27 08:38:02', '2021-10-27 08:38:03', 776, 1, '移除在线会话数量为 0 个', NULL, '2021-10-27 08:38:02', NULL, '2021-10-27 08:38:03', b'0');
+INSERT INTO `inf_job_log` VALUES (2160, 5, 'payNotifyJob', NULL, 1, '2021-10-27 08:38:08', '2021-10-27 08:38:40', 32324, 1, '执行支付通知 4 个', NULL, '2021-10-27 08:38:08', NULL, '2021-10-27 08:38:40', b'0');
+INSERT INTO `inf_job_log` VALUES (2161, 5, 'payNotifyJob', NULL, 1, '2021-10-27 08:38:40', '2021-10-27 08:38:59', 18496, 1, '执行支付通知 4 个', NULL, '2021-10-27 08:38:40', NULL, '2021-10-27 08:38:59', b'0');
+INSERT INTO `inf_job_log` VALUES (2162, 3, 'sysUserSessionTimeoutJob', NULL, 1, '2021-10-27 08:39:00', '2021-10-27 08:39:00', 16, 1, '移除在线会话数量为 0 个', NULL, '2021-10-27 08:39:00', NULL, '2021-10-27 08:39:00', b'0');
COMMIT;
-- ----------------------------
@@ -245,6 +929,434 @@ INSERT INTO `mbr_user` VALUES (245, '芋艿', 'http://www.baidu.com', 0, '156016
INSERT INTO `mbr_user` VALUES (246, '', '', 0, '15601691301', '$2a$10$KLvmwoU.bvjU2u/MeWa1iOX2GDRJ2P9YqaCad10bYQCiyOaPexGwW', '127.0.0.1', '127.0.0.1', '2021-10-10 22:36:27', NULL, '2021-10-10 22:36:27', NULL, '2021-10-10 22:36:27', b'0');
COMMIT;
+-- ----------------------------
+-- Table structure for pay_app
+-- ----------------------------
+DROP TABLE IF EXISTS `pay_app`;
+CREATE TABLE `pay_app` (
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT '应用编号',
+ `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '应用名',
+ `status` tinyint NOT NULL COMMENT '开启状态',
+ `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+ `pay_notify_url` varchar(1024) NOT NULL COMMENT '支付结果的回调地址',
+ `refund_notify_url` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '退款结果的回调地址',
+ `merchant_id` bigint NOT NULL COMMENT '商户编号',
+ `creator` varchar(64) DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `updater` varchar(64) DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='支付应用信息';
+
+-- ----------------------------
+-- Records of pay_app
+-- ----------------------------
+BEGIN;
+INSERT INTO `pay_app` VALUES (6, '芋道', 0, '我是一个公众号', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 'http://127.0.0.1', 1, '', '2021-10-23 08:49:25', '', '2021-10-27 00:26:35', b'0');
+COMMIT;
+
+-- ----------------------------
+-- Table structure for pay_channel
+-- ----------------------------
+DROP TABLE IF EXISTS `pay_channel`;
+CREATE TABLE `pay_channel` (
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT '商户编号',
+ `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '渠道编码',
+ `status` tinyint NOT NULL COMMENT '开启状态',
+ `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+ `fee_rate` double NOT NULL DEFAULT '0' COMMENT '渠道费率,单位:百分比',
+ `merchant_id` bigint NOT NULL COMMENT '商户编号',
+ `app_id` bigint NOT NULL COMMENT '应用编号',
+ `config` varchar(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '支付渠道配置',
+ `creator` varchar(64) DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `updater` varchar(64) DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='支付渠道\n';
+
+-- ----------------------------
+-- Records of pay_channel
+-- ----------------------------
+BEGIN;
+INSERT INTO `pay_channel` VALUES (9, 'wx_pub', 0, NULL, 1, 1, 6, '{\"@class\":\"cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig\",\"appId\":\"wx041349c6f39b268b\",\"mchId\":\"1545083881\",\"apiVersion\":\"v2\",\"mchKey\":\"0alL64UDQdlCwiKZ73ib7ypaIjMns06p\",\"privateKeyContent\":\"-----BEGIN PRIVATE KEY-----\\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC5q2hYE3loOQoH\\nl/2kh/epuj17W8VpV5vBl7ysJWAbBXux6mlq4gKTHD0QUQdiKtDEUm/bKC9Bi6VU\\nuklM5Y8oCaCbhjklHRbET8jsgd9phSNGviHclYRLsQRO8oXnN89kN0y7DYKm0hYd\\nmaiS12Z3v8VaImSTr4HVeHlC/z3S6mdwSr263stKt931YTcbTj/QFH7znsv9Na0u\\nX6LaMBEEAsJctWdm8Ndrd1tGh9Fzf0DA5VRXsJR3kkWspy+IwiDTPV/FDKOU9NJC\\nSxMmDePerTfkoZ2s1rltqBK0ykDJrXtxR+hTzEsKZ/KpNi8tyYpfNZsviHIlUsLP\\nFJ5UvUhpAgMBAAECggEAd90NltazqTIxpGdeCwrwOzWNnYbIclJprlhMKIJUgf1P\\nNrPTbHoOGXTAgzkcYCat8iAaMEzH/TOu/3zn92m3uqxEcEL9v1UBLqknWHAbkB6w\\ngGocqDAqYUcdNe5hvbyM+fCta5C0SQgV2PQrHOlMMICwYpkTfzhtxCdreXIYMoGg\\nJEIRkZWgrm/N7LTtNgizznuUjy6OURWjXaWKPcs3b3j6G1gLj9Vp++z4y0u51nqM\\n4R6fcvl8M6BjlcC8zo6DbOvCW8cXtuXsnru+2TPrUnsGeybJok4fEQsfW1BvpvPo\\nief38rYJn4OWxIrHcpWrhNtXtgRPeiMGFfIsEQDmVQKBgQDzXK6Nn3Nr3TFfGVTy\\n8QYrzOuY2NqzH8nnsLL6qn3HoKxTv+PcFKOTPsi6f4hIYCzBP0esRrPv0ffMu9oQ\\nJvFtCJvMmcKGtp0Q5hcj0y/XkbC3AWuahJtBv8lhKXVnQXSL0j3+ombljw4/8yN0\\nAzgBz+j/skQQgZ3sN5h+DHGtgwKBgQDDT784/2pd4m86c/uBmrwYfqu6MJo0eHJh\\n1XPtE+u8pOHyNTFk77rKobKDqN5VlrF0uEmBc/08LKhyxJ3vh/zAbcmqT1Mq778y\\nAKKUtVmvcaVDrvSQHsnhj0zt4SHGmmU34U2b9hV+nocq5VszX6/jp//HJi9bs3We\\ndAzfFCmaowKBgC1MmDVGc+6lCraf+X8LPFHU4Bnga70h8qxM6NPd/nG1R76DHn/t\\n25DiA+0rJgwK0unZxJadxoqic9TJNssA5Lmd+5o3GM2Imm311mLVwbcHqHQ4MHZf\\nrqKrd2m9lNv2hCIurVmDk1Gxsj5XHMdQfhFgSQengCHubp30r07vNA3PAoGAUEAE\\nIjdQTSMs8KeXP7mEb8wcY3R05/pVhT1fVJpK0kgtTofss7yM05V88/v+3sv8Pik6\\niqZN9tuimwWOn00Q3UA/DGtrkMjRlooMQ24AW8YmUZkhg9YivTtUMKnAZwopbLx2\\nVw7V5iDdCRMUVheK/c+ZmQpnixZBzcmBQGfYcGECgYBjEq3Mem+Aw6pXOu6+0FwH\\n9y6Xi4HhBkq0OOZZuXFtWVry7YrD3pBgzWVAZJqJCkyPKKZzCzwdbFd3u0lYBs35\\nzYgx7ug4hR+wfI980a3vxjcWGOqnOUUnUJ7ucIa+KDgnYV/bBy4jqpVreXmWAJXl\\nfyjG3eLWBrtrsI9YX6zeAA==\\n-----END PRIVATE KEY-----\\n\",\"privateCertContent\":\"-----BEGIN CERTIFICATE-----\\nMIID6TCCAtGgAwIBAgIUNkEHq6aQcF80NSYqWS58ybsJzI4wDQYJKoZIhvcNAQEL\\nBQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT\\nFFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg\\nQ0EwHhcNMjExMDIxMDU0NTQxWhcNMjYxMDIwMDU0NTQxWjB7MRMwEQYDVQQDDAox\\nNTQ1MDgzODgxMRswGQYDVQQKDBLlvq7kv6HllYbmiLfns7vnu58xJzAlBgNVBAsM\\nHuWOhuWfjuWMuuWkp+adjuWwp+aXpeeUqOWTgeW6lzELMAkGA1UEBgwCQ04xETAP\\nBgNVBAcMCFNoZW5aaGVuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\\nuatoWBN5aDkKB5f9pIf3qbo9e1vFaVebwZe8rCVgGwV7seppauICkxw9EFEHYirQ\\nxFJv2ygvQYulVLpJTOWPKAmgm4Y5JR0WxE/I7IHfaYUjRr4h3JWES7EETvKF5zfP\\nZDdMuw2CptIWHZmoktdmd7/FWiJkk6+B1Xh5Qv890upncEq9ut7LSrfd9WE3G04/\\n0BR+857L/TWtLl+i2jARBALCXLVnZvDXa3dbRofRc39AwOVUV7CUd5JFrKcviMIg\\n0z1fxQyjlPTSQksTJg3j3q035KGdrNa5bagStMpAya17cUfoU8xLCmfyqTYvLcmK\\nXzWbL4hyJVLCzxSeVL1IaQIDAQABo4GBMH8wCQYDVR0TBAIwADALBgNVHQ8EBAMC\\nBPAwZQYDVR0fBF4wXDBaoFigVoZUaHR0cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1\\nYmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0NkMw\\nMUMzRThFQkQyMA0GCSqGSIb3DQEBCwUAA4IBAQBe7XgncAY/1PLbCsnMsYt11k3V\\n2cdNZ+yuCxhlOEKk3nHE6WCTL6zL0qWlTKKpnw1rE/+4OS76Tg72wWXcHfHDAOgt\\n9icp62cKx1WO3QweeZpSvLDmtdLgKKrqeIWh+rL8+ZhuAOxSkaRwcsMTWDaLeDOi\\n0pGeqvfG8WNhPxkkaSI8xbiTK641Yg9WT/Q4yfHS7Q6wg1dj9YQdo0dvVB0S2Nir\\nX9IK6PUaHDnQeFKDmKgLkDGLaKaiijEvC91wMEE6qB8b0eNhciaxq2YhGHcFmSRP\\nWUyc5CmBadt7wIOH5Z3bfuwWGxqxKjNw/baM/d+nk7hlDr01YL9c0g16B9MW\\n-----END CERTIFICATE-----\\n\",\"apiV3Key\":\"joerVi8y5DJ3o4ttA0o1uH47Xz1u2Ase\"}', NULL, '2021-10-23 17:12:10', NULL, '2021-10-23 17:12:10', b'0');
+COMMIT;
+
+-- ----------------------------
+-- Table structure for pay_merchant
+-- ----------------------------
+DROP TABLE IF EXISTS `pay_merchant`;
+CREATE TABLE `pay_merchant` (
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT '商户编号',
+ `no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商户号',
+ `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商户全称',
+ `short_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商户简称',
+ `status` tinyint NOT NULL COMMENT '开启状态',
+ `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+ `creator` varchar(64) DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `updater` varchar(64) DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='支付商户信息';
+
+-- ----------------------------
+-- Records of pay_merchant
+-- ----------------------------
+BEGIN;
+INSERT INTO `pay_merchant` VALUES (1, 'M233666999', '芋道源码', '芋艿', 0, '我是备注', '', '2021-10-23 08:31:14', '', '2021-10-23 08:44:04', b'0');
+COMMIT;
+
+-- ----------------------------
+-- Table structure for pay_notify_log
+-- ----------------------------
+DROP TABLE IF EXISTS `pay_notify_log`;
+CREATE TABLE `pay_notify_log` (
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志编号',
+ `task_id` bigint NOT NULL COMMENT '通知任务编号',
+ `notify_times` tinyint NOT NULL COMMENT '第几次被通知',
+ `response` varchar(2048) NOT NULL COMMENT '请求参数',
+ `status` tinyint NOT NULL COMMENT '通知状态',
+ `creator` varchar(64) DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `updater` varchar(64) DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=93 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='支付通知 App 的日志';
+
+-- ----------------------------
+-- Records of pay_notify_log
+-- ----------------------------
+BEGIN;
+INSERT INTO `pay_notify_log` VALUES (92, 111, 1, '{\"code\":0,\"data\":true,\"msg\":\"\"}', 2, NULL, '2021-10-27 13:22:21', NULL, '2021-10-27 13:22:21', b'0');
+COMMIT;
+
+-- ----------------------------
+-- Table structure for pay_notify_task
+-- ----------------------------
+DROP TABLE IF EXISTS `pay_notify_task`;
+CREATE TABLE `pay_notify_task` (
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务编号',
+ `merchant_id` bigint NOT NULL COMMENT '商户编号',
+ `app_id` bigint NOT NULL COMMENT '应用编号',
+ `type` tinyint NOT NULL COMMENT '通知类型',
+ `data_id` bigint NOT NULL COMMENT '数据编号',
+ `status` tinyint NOT NULL COMMENT '通知状态',
+ `merchant_order_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商户订单编号',
+ `next_notify_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '下一次通知时间',
+ `last_execute_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次执行时间',
+ `notify_times` tinyint NOT NULL COMMENT '当前通知次数',
+ `max_notify_times` tinyint NOT NULL COMMENT '最大可通知次数',
+ `notify_url` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '异步通知地址',
+ `creator` varchar(64) DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `updater` varchar(64) DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=112 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商户支付、退款等的通知\n';
+
+-- ----------------------------
+-- Records of pay_notify_task
+-- ----------------------------
+BEGIN;
+INSERT INTO `pay_notify_task` VALUES (96, 1, 6, 1, 105, 1, '1635295878514', '2021-10-27 08:51:33', '2021-10-27 00:51:32', 0, 9, 'http://127.0.0.1:28080/api/shop/order/pay-notify', NULL, '2021-10-27 08:51:33', NULL, '2021-10-27 08:51:33', b'0');
+INSERT INTO `pay_notify_task` VALUES (97, 1, 6, 1, 106, 1, '1635296883074', '2021-10-27 09:08:12', '2021-10-27 01:08:12', 0, 9, 'http://127.0.0.1:28080/api/shop/order/pay-notify', NULL, '2021-10-27 09:08:12', NULL, '2021-10-27 09:08:12', b'0');
+INSERT INTO `pay_notify_task` VALUES (98, 1, 6, 1, 107, 1, '1635297635297', '2021-10-27 09:20:59', '2021-10-27 01:20:58', 0, 9, 'http://127.0.0.1:28080/api/shop/order/pay-notify', NULL, '2021-10-27 09:20:59', NULL, '2021-10-27 09:20:59', b'0');
+INSERT INTO `pay_notify_task` VALUES (99, 1, 6, 1, 108, 1, '1635297700295', '2021-10-27 09:21:55', '2021-10-27 01:21:55', 0, 9, 'http://127.0.0.1:28080/api/shop/order/pay-notify', NULL, '2021-10-27 09:21:55', NULL, '2021-10-27 09:21:55', b'0');
+INSERT INTO `pay_notify_task` VALUES (100, 1, 6, 1, 109, 1, '1635298128448', '2021-10-27 09:28:57', '2021-10-27 01:28:56', 0, 9, 'http://127.0.0.1:28080/api/shop/order/pay-notify', NULL, '2021-10-27 09:28:57', NULL, '2021-10-27 09:28:57', b'0');
+INSERT INTO `pay_notify_task` VALUES (101, 1, 6, 1, 110, 1, '1635298196716', '2021-10-27 09:30:05', '2021-10-27 01:30:05', 0, 9, 'http://127.0.0.1:28080/api/shop/order/pay-notify', NULL, '2021-10-27 09:30:05', NULL, '2021-10-27 09:30:05', b'0');
+INSERT INTO `pay_notify_task` VALUES (102, 1, 6, 1, 111, 1, '1635298542165', '2021-10-27 09:35:49', '2021-10-27 01:35:49', 0, 9, 'http://127.0.0.1:28080/api/shop/order/pay-notify', NULL, '2021-10-27 09:35:49', NULL, '2021-10-27 09:35:49', b'0');
+INSERT INTO `pay_notify_task` VALUES (103, 1, 6, 1, 112, 1, '1635298736280', '2021-10-27 09:39:08', '2021-10-27 01:39:07', 0, 9, 'http://127.0.0.1:28080/api/shop/order/pay-notify', NULL, '2021-10-27 09:39:08', NULL, '2021-10-27 09:39:08', b'0');
+INSERT INTO `pay_notify_task` VALUES (104, 1, 6, 1, 113, 1, '1635298796688', '2021-10-27 09:40:21', '2021-10-27 01:40:20', 0, 9, 'http://127.0.0.1:28080/api/shop/order/pay-notify', NULL, '2021-10-27 09:40:21', NULL, '2021-10-27 09:40:21', b'0');
+INSERT INTO `pay_notify_task` VALUES (105, 1, 6, 1, 114, 1, '1635299148566', '2021-10-27 09:45:57', '2021-10-27 01:45:57', 0, 9, 'http://127.0.0.1:28080/api/shop/order/pay-notify', NULL, '2021-10-27 09:45:57', NULL, '2021-10-27 09:45:57', b'0');
+INSERT INTO `pay_notify_task` VALUES (106, 1, 6, 1, 115, 1, '1635300261266', '2021-10-27 10:04:29', '2021-10-27 02:04:28', 0, 9, 'http://127.0.0.1:28080/api/shop/order/pay-notify', NULL, '2021-10-27 10:04:29', NULL, '2021-10-27 10:04:29', b'0');
+INSERT INTO `pay_notify_task` VALUES (107, 1, 6, 1, 117, 1, '1635311468233', '2021-10-27 13:11:16', '2021-10-27 05:11:16', 0, 9, 'http://127.0.0.1:28080/api/shop/order/pay-notify', NULL, '2021-10-27 13:11:16', NULL, '2021-10-27 13:11:16', b'0');
+INSERT INTO `pay_notify_task` VALUES (108, 1, 6, 1, 118, 1, '1635311823086', '2021-10-27 13:17:09', '2021-10-27 05:17:08', 0, 9, 'http://127.0.0.1:28080/api/shop/order/pay-notify', NULL, '2021-10-27 13:17:09', NULL, '2021-10-27 13:17:09', b'0');
+INSERT INTO `pay_notify_task` VALUES (109, 1, 6, 1, 119, 1, '1635311881440', '2021-10-27 13:18:11', '2021-10-27 05:18:10', 0, 9, 'http://127.0.0.1:28080/api/shop/order/pay-notify', NULL, '2021-10-27 13:18:11', NULL, '2021-10-27 13:18:11', b'0');
+INSERT INTO `pay_notify_task` VALUES (110, 1, 6, 1, 120, 1, '1635311949168', '2021-10-27 13:19:15', '2021-10-27 05:19:15', 0, 9, 'http://127.0.0.1:28080/api/shop/order/pay-notify', NULL, '2021-10-27 13:19:15', NULL, '2021-10-27 13:19:15', b'0');
+INSERT INTO `pay_notify_task` VALUES (111, 1, 6, 1, 121, 1, '1635312124657', '2021-10-27 13:22:16', '2021-10-27 05:22:16', 0, 9, 'http://127.0.0.1:28080/api/shop/order/pay-notify', NULL, '2021-10-27 13:22:16', NULL, '2021-10-27 13:22:16', b'0');
+COMMIT;
+
+-- ----------------------------
+-- Table structure for pay_order
+-- ----------------------------
+DROP TABLE IF EXISTS `pay_order`;
+CREATE TABLE `pay_order` (
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT '支付订单编号',
+ `merchant_id` bigint NOT NULL COMMENT '商户编号',
+ `app_id` bigint NOT NULL COMMENT '应用编号',
+ `channel_id` bigint DEFAULT NULL COMMENT '渠道编号',
+ `channel_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '渠道编码',
+ `merchant_order_id` varchar(64) NOT NULL COMMENT '商户订单编号',
+ `subject` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品标题',
+ `body` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品描述',
+ `notify_url` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '异步通知地址',
+ `notify_status` tinyint NOT NULL COMMENT '通知商户支付结果的回调状态',
+ `amount` bigint NOT NULL COMMENT '支付金额,单位:分',
+ `channel_fee_rate` double DEFAULT '0' COMMENT '渠道手续费,单位:百分比',
+ `channel_fee_amount` bigint DEFAULT '0' COMMENT '渠道手续金额,单位:分',
+ `status` tinyint NOT NULL COMMENT '支付状态',
+ `user_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户 IP',
+ `expire_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '订单失效时间',
+ `success_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '订单支付成功时间',
+ `notify_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '订单支付通知时间',
+ `success_extension_id` bigint DEFAULT NULL COMMENT '支付成功的订单拓展单编号',
+ `refund_status` tinyint NOT NULL COMMENT '退款状态',
+ `refund_times` tinyint NOT NULL COMMENT '退款次数',
+ `refund_amount` bigint NOT NULL COMMENT '退款总金额,单位:分',
+ `channel_user_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '渠道用户编号',
+ `channel_order_no` varchar(64) DEFAULT NULL COMMENT '渠道订单号',
+ `creator` varchar(64) DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `updater` varchar(64) DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=122 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='支付订单\n';
+
+-- ----------------------------
+-- Records of pay_order
+-- ----------------------------
+BEGIN;
+INSERT INTO `pay_order` VALUES (10, 1, 6, NULL, NULL, '1634988463462', '标题', '内容', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-24 19:27:43', '2021-10-23 11:27:43', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-23 19:27:44', NULL, '2021-10-23 19:27:44', b'0');
+INSERT INTO `pay_order` VALUES (11, 1, 6, NULL, NULL, '1635088798052', '标题:1635088798052', '内容:1635088798052', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:19:58', '2021-10-24 15:19:58', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:19:58', NULL, '2021-10-24 23:19:58', b'0');
+INSERT INTO `pay_order` VALUES (12, 1, 6, NULL, NULL, '1635088829013', '标题:1635088829013', '内容:1635088829013', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:20:29', '2021-10-24 15:20:29', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:20:29', NULL, '2021-10-24 23:20:29', b'0');
+INSERT INTO `pay_order` VALUES (13, 1, 6, NULL, NULL, '1635088934120', '标题:1635088934120', '内容:1635088934120', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:22:14', '2021-10-24 15:22:14', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:22:14', NULL, '2021-10-24 23:22:14', b'0');
+INSERT INTO `pay_order` VALUES (14, 1, 6, NULL, NULL, '1635088936920', '标题:1635088936920', '内容:1635088936920', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:22:17', '2021-10-24 15:22:16', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:22:17', NULL, '2021-10-24 23:22:17', b'0');
+INSERT INTO `pay_order` VALUES (15, 1, 6, NULL, NULL, '1635088943990', '标题:1635088943990', '内容:1635088943990', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:22:24', '2021-10-24 15:22:24', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:22:24', NULL, '2021-10-24 23:22:24', b'0');
+INSERT INTO `pay_order` VALUES (16, 1, 6, NULL, NULL, '1635088976396', '标题:1635088976396', '内容:1635088976396', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:22:56', '2021-10-24 15:22:56', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:22:56', NULL, '2021-10-24 23:22:56', b'0');
+INSERT INTO `pay_order` VALUES (17, 1, 6, NULL, NULL, '1635088979514', '标题:1635088979514', '内容:1635088979514', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:23:00', '2021-10-24 15:22:59', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:23:00', NULL, '2021-10-24 23:23:00', b'0');
+INSERT INTO `pay_order` VALUES (18, 1, 6, NULL, NULL, '1635089022772', '标题:1635089022772', '内容:1635089022772', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:23:43', '2021-10-24 15:23:42', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:23:43', NULL, '2021-10-24 23:23:43', b'0');
+INSERT INTO `pay_order` VALUES (19, 1, 6, NULL, NULL, '1635089029019', '标题:1635089029019', '内容:1635089029019', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:23:49', '2021-10-24 15:23:49', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:23:49', NULL, '2021-10-24 23:23:49', b'0');
+INSERT INTO `pay_order` VALUES (20, 1, 6, NULL, NULL, '1635089125167', '标题:1635089125167', '内容:1635089125167', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:25:25', '2021-10-24 15:25:25', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:25:25', NULL, '2021-10-24 23:25:25', b'0');
+INSERT INTO `pay_order` VALUES (21, 1, 6, NULL, NULL, '1635089133667', '标题:1635089133667', '内容:1635089133667', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:25:34', '2021-10-24 15:25:33', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:25:34', NULL, '2021-10-24 23:25:34', b'0');
+INSERT INTO `pay_order` VALUES (22, 1, 6, NULL, NULL, '1635089160201', '标题:1635089160201', '内容:1635089160201', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:26:00', '2021-10-24 15:26:00', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:26:00', NULL, '2021-10-24 23:26:00', b'0');
+INSERT INTO `pay_order` VALUES (23, 1, 6, NULL, NULL, '1635089171152', '标题:1635089171152', '内容:1635089171152', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:26:11', '2021-10-24 15:26:11', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:26:11', NULL, '2021-10-24 23:26:11', b'0');
+INSERT INTO `pay_order` VALUES (24, 1, 6, NULL, NULL, '1635089171281', '标题:1635089171281', '内容:1635089171281', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:26:11', '2021-10-24 15:26:11', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:26:11', NULL, '2021-10-24 23:26:11', b'0');
+INSERT INTO `pay_order` VALUES (25, 1, 6, NULL, NULL, '1635089177510', '标题:1635089177510', '内容:1635089177510', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:26:18', '2021-10-24 15:26:17', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:26:18', NULL, '2021-10-24 23:26:18', b'0');
+INSERT INTO `pay_order` VALUES (26, 1, 6, NULL, NULL, '1635089179921', '标题:1635089179921', '内容:1635089179921', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:26:20', '2021-10-24 15:26:19', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:26:20', NULL, '2021-10-24 23:26:20', b'0');
+INSERT INTO `pay_order` VALUES (27, 1, 6, NULL, NULL, '1635089209386', '标题:1635089209386', '内容:1635089209386', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:26:49', '2021-10-24 15:26:49', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:26:49', NULL, '2021-10-24 23:26:49', b'0');
+INSERT INTO `pay_order` VALUES (28, 1, 6, NULL, NULL, '1635089217890', '标题:1635089217890', '内容:1635089217890', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:26:58', '2021-10-24 15:26:57', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:26:58', NULL, '2021-10-24 23:26:58', b'0');
+INSERT INTO `pay_order` VALUES (29, 1, 6, NULL, NULL, '1635089222164', '标题:1635089222163', '内容:1635089222163', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:27:02', '2021-10-24 15:27:02', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:27:02', NULL, '2021-10-24 23:27:02', b'0');
+INSERT INTO `pay_order` VALUES (30, 1, 6, NULL, NULL, '1635089267113', '标题:1635089267113', '内容:1635089267113', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:27:47', '2021-10-24 15:27:47', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:27:47', NULL, '2021-10-24 23:27:47', b'0');
+INSERT INTO `pay_order` VALUES (31, 1, 6, NULL, NULL, '1635089268654', '标题:1635089268654', '内容:1635089268654', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:27:49', '2021-10-24 15:27:48', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:27:49', NULL, '2021-10-24 23:27:49', b'0');
+INSERT INTO `pay_order` VALUES (32, 1, 6, NULL, NULL, '1635089310024', '标题:1635089310024', '内容:1635089310024', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:28:30', '2021-10-24 15:28:30', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:28:30', NULL, '2021-10-24 23:28:30', b'0');
+INSERT INTO `pay_order` VALUES (33, 1, 6, NULL, NULL, '1635089314276', '标题:1635089314276', '内容:1635089314276', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:28:34', '2021-10-24 15:28:34', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:28:34', NULL, '2021-10-24 23:28:34', b'0');
+INSERT INTO `pay_order` VALUES (34, 1, 6, NULL, NULL, '1635089325747', '标题:1635089325747', '内容:1635089325747', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:28:46', '2021-10-24 15:28:45', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:28:46', NULL, '2021-10-24 23:28:46', b'0');
+INSERT INTO `pay_order` VALUES (35, 1, 6, NULL, NULL, '1635089412828', '标题:1635089412828', '内容:1635089412828', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:30:13', '2021-10-24 15:30:12', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:30:13', NULL, '2021-10-24 23:30:13', b'0');
+INSERT INTO `pay_order` VALUES (36, 1, 6, NULL, NULL, '1635089423488', '标题:1635089423488', '内容:1635089423488', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:30:23', '2021-10-24 15:30:23', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:30:24', NULL, '2021-10-24 23:30:24', b'0');
+INSERT INTO `pay_order` VALUES (37, 1, 6, NULL, NULL, '1635089444235', '标题:1635089444235', '内容:1635089444235', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:30:44', '2021-10-24 15:30:44', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:30:44', NULL, '2021-10-24 23:30:44', b'0');
+INSERT INTO `pay_order` VALUES (38, 1, 6, NULL, NULL, '1635089448403', '标题:1635089448403', '内容:1635089448403', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:30:48', '2021-10-24 15:30:48', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:30:48', NULL, '2021-10-24 23:30:48', b'0');
+INSERT INTO `pay_order` VALUES (39, 1, 6, NULL, NULL, '1635089556720', '标题:1635089556720', '内容:1635089556720', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:32:37', '2021-10-24 15:32:36', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:32:37', NULL, '2021-10-24 23:32:37', b'0');
+INSERT INTO `pay_order` VALUES (40, 1, 6, NULL, NULL, '1635089561277', '标题:1635089561277', '内容:1635089561277', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:32:41', '2021-10-24 15:32:41', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:32:41', NULL, '2021-10-24 23:32:41', b'0');
+INSERT INTO `pay_order` VALUES (41, 1, 6, NULL, NULL, '1635089563908', '标题:1635089563908', '内容:1635089563908', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:32:44', '2021-10-24 15:32:43', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:32:44', NULL, '2021-10-24 23:32:44', b'0');
+INSERT INTO `pay_order` VALUES (42, 1, 6, NULL, NULL, '1635089576165', '标题:1635089576165', '内容:1635089576165', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:32:56', '2021-10-24 15:32:56', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:32:56', NULL, '2021-10-24 23:32:56', b'0');
+INSERT INTO `pay_order` VALUES (43, 1, 6, NULL, NULL, '1635089833753', '标题:1635089833753', '内容:1635089833753', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:37:14', '2021-10-24 15:37:13', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:37:14', NULL, '2021-10-24 23:37:14', b'0');
+INSERT INTO `pay_order` VALUES (44, 1, 6, NULL, NULL, '1635089864519', '标题:1635089864519', '内容:1635089864519', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:37:45', '2021-10-24 15:37:44', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:37:45', NULL, '2021-10-24 23:37:45', b'0');
+INSERT INTO `pay_order` VALUES (45, 1, 6, NULL, NULL, '1635089946932', '标题:1635089946932', '内容:1635089946932', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:39:07', '2021-10-24 15:39:06', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:39:07', NULL, '2021-10-24 23:39:07', b'0');
+INSERT INTO `pay_order` VALUES (46, 1, 6, NULL, NULL, '1635089950125', '标题:1635089950125', '内容:1635089950125', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:39:10', '2021-10-24 15:39:10', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:39:10', NULL, '2021-10-24 23:39:10', b'0');
+INSERT INTO `pay_order` VALUES (47, 1, 6, NULL, NULL, '1635089977784', '标题:1635089977784', '内容:1635089977784', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:39:38', '2021-10-24 15:39:37', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:39:38', NULL, '2021-10-24 23:39:38', b'0');
+INSERT INTO `pay_order` VALUES (48, 1, 6, NULL, NULL, '1635089978099', '标题:1635089978099', '内容:1635089978099', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:39:38', '2021-10-24 15:39:38', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:39:38', NULL, '2021-10-24 23:39:38', b'0');
+INSERT INTO `pay_order` VALUES (49, 1, 6, NULL, NULL, '1635089982848', '标题:1635089982848', '内容:1635089982848', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:39:43', '2021-10-24 15:39:42', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:39:43', NULL, '2021-10-24 23:39:43', b'0');
+INSERT INTO `pay_order` VALUES (50, 1, 6, NULL, NULL, '1635090084470', '标题:1635090084470', '内容:1635090084470', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:41:24', '2021-10-24 15:41:24', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:41:24', NULL, '2021-10-24 23:41:24', b'0');
+INSERT INTO `pay_order` VALUES (51, 1, 6, NULL, NULL, '1635090139009', '标题:1635090139009', '内容:1635090139009', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:42:19', '2021-10-24 15:42:19', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:42:19', NULL, '2021-10-24 23:42:19', b'0');
+INSERT INTO `pay_order` VALUES (52, 1, 6, NULL, NULL, '1635090153216', '标题:1635090153216', '内容:1635090153216', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:42:33', '2021-10-24 15:42:33', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:42:33', NULL, '2021-10-24 23:42:33', b'0');
+INSERT INTO `pay_order` VALUES (53, 1, 6, NULL, NULL, '1635090158589', '标题:1635090158589', '内容:1635090158589', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:42:39', '2021-10-24 15:42:38', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:42:39', NULL, '2021-10-24 23:42:39', b'0');
+INSERT INTO `pay_order` VALUES (54, 1, 6, NULL, NULL, '1635090265951', '标题:1635090265951', '内容:1635090265951', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:44:26', '2021-10-24 15:44:25', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:44:26', NULL, '2021-10-24 23:44:26', b'0');
+INSERT INTO `pay_order` VALUES (55, 1, 6, NULL, NULL, '1635090284982', '标题:1635090284982', '内容:1635090284982', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:44:45', '2021-10-24 15:44:45', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:44:45', NULL, '2021-10-24 23:44:45', b'0');
+INSERT INTO `pay_order` VALUES (56, 1, 6, NULL, NULL, '1635090286709', '标题:1635090286709', '内容:1635090286709', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:44:47', '2021-10-24 15:44:46', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:44:47', NULL, '2021-10-24 23:44:47', b'0');
+INSERT INTO `pay_order` VALUES (57, 1, 6, NULL, NULL, '1635090358714', '标题:1635090358714', '内容:1635090358714', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:45:59', '2021-10-24 15:45:58', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:45:59', NULL, '2021-10-24 23:45:59', b'0');
+INSERT INTO `pay_order` VALUES (58, 1, 6, NULL, NULL, '1635090365901', '标题:1635090365901', '内容:1635090365901', 'http://127.0.0.1', 0, 100, 0, 0, 0, '127.0.0.1', '2021-10-25 23:46:06', '2021-10-24 15:46:05', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-24 23:46:06', NULL, '2021-10-24 23:46:06', b'0');
+INSERT INTO `pay_order` VALUES (59, 1, 6, NULL, NULL, '1635122297240', '标题:1635122297240', '内容:1635122297240', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:38:17', '2021-10-25 00:38:17', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:38:17', NULL, '2021-10-25 08:38:17', b'0');
+INSERT INTO `pay_order` VALUES (60, 1, 6, NULL, NULL, '1635122329998', '标题:1635122329998', '内容:1635122329998', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:38:50', '2021-10-25 00:38:50', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:38:50', NULL, '2021-10-25 08:38:50', b'0');
+INSERT INTO `pay_order` VALUES (61, 1, 6, NULL, NULL, '1635122358555', '标题:1635122358555', '内容:1635122358555', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:39:19', '2021-10-25 00:39:18', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:39:19', NULL, '2021-10-25 08:39:19', b'0');
+INSERT INTO `pay_order` VALUES (62, 1, 6, NULL, NULL, '1635122446577', '标题:1635122446577', '内容:1635122446577', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:40:47', '2021-10-25 00:40:46', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:40:47', NULL, '2021-10-25 08:40:47', b'0');
+INSERT INTO `pay_order` VALUES (63, 1, 6, NULL, NULL, '1635122486835', '标题:1635122486835', '内容:1635122486835', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:41:27', '2021-10-25 00:41:26', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:41:27', NULL, '2021-10-25 08:41:27', b'0');
+INSERT INTO `pay_order` VALUES (64, 1, 6, NULL, NULL, '1635122490656', '标题:1635122490656', '内容:1635122490656', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:41:31', '2021-10-25 00:41:30', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:41:31', NULL, '2021-10-25 08:41:31', b'0');
+INSERT INTO `pay_order` VALUES (65, 1, 6, NULL, NULL, '1635122508318', '标题:1635122508318', '内容:1635122508318', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:41:48', '2021-10-25 00:41:48', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:41:48', NULL, '2021-10-25 08:41:48', b'0');
+INSERT INTO `pay_order` VALUES (66, 1, 6, NULL, NULL, '1635122538233', '标题:1635122538233', '内容:1635122538233', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:42:18', '2021-10-25 00:42:18', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:42:18', NULL, '2021-10-25 08:42:18', b'0');
+INSERT INTO `pay_order` VALUES (67, 1, 6, NULL, NULL, '1635122700108', '标题:1635122700108', '内容:1635122700108', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:45:00', '2021-10-25 00:45:00', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:45:00', NULL, '2021-10-25 08:45:00', b'0');
+INSERT INTO `pay_order` VALUES (68, 1, 6, NULL, NULL, '1635122739305', '标题:1635122739305', '内容:1635122739305', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:45:39', '2021-10-25 00:45:39', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:45:39', NULL, '2021-10-25 08:45:39', b'0');
+INSERT INTO `pay_order` VALUES (69, 1, 6, NULL, NULL, '1635122743771', '标题:1635122743771', '内容:1635122743771', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:45:44', '2021-10-25 00:45:43', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:45:44', NULL, '2021-10-25 08:45:44', b'0');
+INSERT INTO `pay_order` VALUES (70, 1, 6, NULL, NULL, '1635122827585', '标题:1635122827585', '内容:1635122827585', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:47:08', '2021-10-25 00:47:07', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:47:08', NULL, '2021-10-25 08:47:08', b'0');
+INSERT INTO `pay_order` VALUES (71, 1, 6, NULL, NULL, '1635122867264', '标题:1635122867264', '内容:1635122867264', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:47:47', '2021-10-25 00:47:47', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:47:47', NULL, '2021-10-25 08:47:47', b'0');
+INSERT INTO `pay_order` VALUES (72, 1, 6, NULL, NULL, '1635122869903', '标题:1635122869903', '内容:1635122869903', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:47:50', '2021-10-25 00:47:49', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:47:50', NULL, '2021-10-25 08:47:50', b'0');
+INSERT INTO `pay_order` VALUES (73, 1, 6, NULL, NULL, '1635122883742', '标题:1635122883742', '内容:1635122883742', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:48:04', '2021-10-25 00:48:03', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:48:04', NULL, '2021-10-25 08:48:04', b'0');
+INSERT INTO `pay_order` VALUES (74, 1, 6, NULL, NULL, '1635122885267', '标题:1635122885267', '内容:1635122885267', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:48:05', '2021-10-25 00:48:05', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:48:05', NULL, '2021-10-25 08:48:05', b'0');
+INSERT INTO `pay_order` VALUES (75, 1, 6, NULL, NULL, '1635122885582', '标题:1635122885582', '内容:1635122885582', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:48:06', '2021-10-25 00:48:05', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:48:06', NULL, '2021-10-25 08:48:06', b'0');
+INSERT INTO `pay_order` VALUES (76, 1, 6, NULL, NULL, '1635122918126', '标题:1635122918126', '内容:1635122918126', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:48:38', '2021-10-25 00:48:38', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:48:38', NULL, '2021-10-25 08:48:38', b'0');
+INSERT INTO `pay_order` VALUES (77, 1, 6, NULL, NULL, '1635123030294', '标题:1635123030294', '内容:1635123030294', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:50:30', '2021-10-25 00:50:30', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:50:30', NULL, '2021-10-25 08:50:30', b'0');
+INSERT INTO `pay_order` VALUES (78, 1, 6, NULL, NULL, '1635123068343', '标题:1635123068343', '内容:1635123068343', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:51:08', '2021-10-25 00:51:08', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:51:08', NULL, '2021-10-25 08:51:08', b'0');
+INSERT INTO `pay_order` VALUES (79, 1, 6, NULL, NULL, '1635123073596', '标题:1635123073596', '内容:1635123073596', 'http://127.0.0.1', 0, 100, 0, 0, 0, '101.82.138.223', '2021-10-26 08:51:14', '2021-10-25 00:51:13', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:51:14', NULL, '2021-10-25 08:51:14', b'0');
+INSERT INTO `pay_order` VALUES (80, 1, 6, NULL, NULL, '1635123195063', '标题:1635123195063', '内容:1635123195063', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.138.223', '2021-10-26 08:53:15', '2021-10-25 00:53:15', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 08:53:15', NULL, '2021-10-25 08:53:15', b'0');
+INSERT INTO `pay_order` VALUES (81, 1, 6, NULL, NULL, '1635123692042', '标题:1635123692042', '内容:1635123692042', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.138.223', '2021-10-26 09:01:32', '2021-10-25 01:01:32', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 09:01:32', NULL, '2021-10-25 09:01:32', b'0');
+INSERT INTO `pay_order` VALUES (82, 1, 6, NULL, NULL, '1635123806943', '标题:1635123806943', '内容:1635123806943', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.138.223', '2021-10-26 09:03:27', '2021-10-25 01:03:26', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 09:03:27', NULL, '2021-10-25 09:03:27', b'0');
+INSERT INTO `pay_order` VALUES (83, 1, 6, NULL, NULL, '1635123948382', '标题:1635123948382', '内容:1635123948382', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.138.223', '2021-10-26 09:05:48', '2021-10-25 01:05:48', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 09:05:48', NULL, '2021-10-25 09:05:48', b'0');
+INSERT INTO `pay_order` VALUES (84, 1, 6, NULL, NULL, '1635123961537', '标题:1635123961537', '内容:1635123961537', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.138.223', '2021-10-26 09:06:02', '2021-10-25 01:06:01', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 09:06:02', NULL, '2021-10-25 09:06:02', b'0');
+INSERT INTO `pay_order` VALUES (85, 1, 6, NULL, NULL, '1635124136136', '标题:1635124136136', '内容:1635124136136', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.138.223', '2021-10-26 09:08:56', '2021-10-25 01:08:56', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 09:08:56', NULL, '2021-10-25 09:08:56', b'0');
+INSERT INTO `pay_order` VALUES (86, 1, 6, NULL, NULL, '1635124373620', '标题:1635124373620', '内容:1635124373620', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.138.223', '2021-10-26 09:12:54', '2021-10-25 01:12:53', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 09:12:54', NULL, '2021-10-25 09:12:54', b'0');
+INSERT INTO `pay_order` VALUES (87, 1, 6, NULL, NULL, '1635124391618', '标题:1635124391618', '内容:1635124391618', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.138.223', '2021-10-26 09:13:12', '2021-10-25 01:13:11', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 09:13:12', NULL, '2021-10-25 09:13:12', b'0');
+INSERT INTO `pay_order` VALUES (88, 1, 6, NULL, NULL, '1635125520387', '标题:1635125520387', '内容:1635125520387', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.138.223', '2021-10-26 09:32:00', '2021-10-25 01:32:00', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 09:32:00', NULL, '2021-10-25 09:32:00', b'0');
+INSERT INTO `pay_order` VALUES (89, 1, 6, NULL, NULL, '1635126846741', '标题:1635126846741', '内容:1635126846741', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.138.223', '2021-10-26 09:54:07', '2021-10-25 01:54:06', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 09:54:07', NULL, '2021-10-25 09:54:07', b'0');
+INSERT INTO `pay_order` VALUES (90, 1, 6, NULL, NULL, '1635126932826', '标题:1635126932826', '内容:1635126932826', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.138.223', '2021-10-26 09:55:33', '2021-10-25 01:55:32', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 09:55:33', NULL, '2021-10-25 09:55:33', b'0');
+INSERT INTO `pay_order` VALUES (91, 1, 6, NULL, NULL, '1635127428562', '标题:1635127428562', '内容:1635127428562', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.138.223', '2021-10-26 10:03:49', '2021-10-25 02:03:48', '2021-10-25 15:16:53', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-25 10:03:49', NULL, '2021-10-25 10:03:49', b'0');
+INSERT INTO `pay_order` VALUES (92, 1, 6, NULL, NULL, '1635211245454', '标题:1635211245454', '内容:1635211245454', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.98.72', '2021-10-27 09:20:45', '2021-10-26 01:20:45', '2021-10-26 01:20:45', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-26 09:20:46', NULL, '2021-10-26 09:20:46', b'0');
+INSERT INTO `pay_order` VALUES (93, 1, 6, NULL, NULL, '1635211270009', '标题:1635211270009', '内容:1635211270009', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.98.72', '2021-10-27 09:21:10', '2021-10-26 01:21:10', '2021-10-26 01:21:10', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-26 09:21:10', NULL, '2021-10-26 09:21:10', b'0');
+INSERT INTO `pay_order` VALUES (94, 1, 6, NULL, NULL, '1635211368329', '标题:1635211368329', '内容:1635211368329', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.98.72', '2021-10-27 09:22:48', '2021-10-26 01:22:48', '2021-10-26 01:22:48', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-26 09:22:48', NULL, '2021-10-26 09:22:48', b'0');
+INSERT INTO `pay_order` VALUES (95, 1, 6, NULL, NULL, '1635211489276', '标题:1635211489276', '内容:1635211489276', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.98.72', '2021-10-27 09:24:49', '2021-10-26 01:24:49', '2021-10-26 01:24:49', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-26 09:24:49', NULL, '2021-10-26 09:24:49', b'0');
+INSERT INTO `pay_order` VALUES (96, 1, 6, NULL, NULL, '1635211845846', '标题:1635211845846', '内容:1635211845846', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.98.72', '2021-10-27 09:30:46', '2021-10-26 01:30:45', '2021-10-26 01:30:45', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-26 09:30:46', NULL, '2021-10-26 09:30:46', b'0');
+INSERT INTO `pay_order` VALUES (97, 1, 6, NULL, NULL, '1635212063323', '标题:1635212063323', '内容:1635212063323', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.98.72', '2021-10-27 09:34:23', '2021-10-26 01:34:23', '2021-10-26 01:34:23', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-26 09:34:23', NULL, '2021-10-26 09:34:23', b'0');
+INSERT INTO `pay_order` VALUES (98, 1, 6, NULL, NULL, '1635212315488', '标题:1635212315487', '内容:1635212315487', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.98.72', '2021-10-27 09:38:35', '2021-10-26 01:38:35', '2021-10-26 01:38:35', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-26 09:38:36', NULL, '2021-10-26 09:38:36', b'0');
+INSERT INTO `pay_order` VALUES (99, 1, 6, NULL, NULL, '1635212375595', '标题:1635212375595', '内容:1635212375595', 'http://127.0.0.1', 0, 1, 0, 0, 0, '101.82.98.72', '2021-10-27 09:39:36', '2021-10-26 01:39:35', '2021-10-26 01:39:35', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-26 09:39:36', NULL, '2021-10-26 09:39:36', b'0');
+INSERT INTO `pay_order` VALUES (100, 1, 6, 9, 'wx_pub', '1635212461835', '标题:1635212461835', '内容:1635212461835', 'http://127.0.0.1', 0, 1, 0, 0, 10, '101.82.98.72', '2021-10-27 09:41:02', '2021-10-26 09:41:15', '2021-10-26 09:41:54', 78, 0, 0, 0, NULL, NULL, NULL, '2021-10-26 09:41:02', NULL, '2021-10-26 09:41:54', b'0');
+INSERT INTO `pay_order` VALUES (101, 1, 6, 9, 'wx_pub', '1635212524100', '标题:1635212524100', '内容:1635212524100', 'http://127.0.0.1', 0, 1, 0, 0, 10, '101.82.98.72', '2021-10-27 09:42:04', '2021-10-26 09:42:15', '2021-10-26 09:42:27', 79, 0, 0, 0, NULL, NULL, NULL, '2021-10-26 09:42:04', NULL, '2021-10-26 09:42:28', b'0');
+INSERT INTO `pay_order` VALUES (102, 1, 6, 9, 'wx_pub', '1635212576678', '标题:1635212576678', '内容:1635212576678', 'http://127.0.0.1', 0, 1, 0, 0, 10, '101.82.98.72', '2021-10-27 09:42:57', '2021-10-26 09:43:16', '2021-10-26 09:43:17', 81, 0, 0, 0, NULL, NULL, NULL, '2021-10-26 09:42:57', NULL, '2021-10-26 09:43:17', b'0');
+INSERT INTO `pay_order` VALUES (103, 1, 6, 9, 'wx_pub', '1635212929429', '标题:1635212929428', '内容:1635212929428', 'http://127.0.0.1', 0, 1, 0, 0, 10, '101.82.98.72', '2021-10-27 09:48:49', '2021-10-26 09:48:55', '2021-10-26 09:48:56', 82, 0, 0, 0, 'ockUAwIZ-0OeMZl9ogcZ4ILrGba0', '4200001151202110263761187715', NULL, '2021-10-26 09:48:49', NULL, '2021-10-26 09:48:56', b'0');
+INSERT INTO `pay_order` VALUES (104, 1, 6, NULL, NULL, '1635295769583', '标题:1635295769583', '内容:1635295769583', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 0, 1, 0, 0, 0, '101.82.181.148', '2021-10-28 08:49:30', '2021-10-27 00:49:29', '2021-10-27 00:49:29', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-27 08:49:30', NULL, '2021-10-27 08:49:30', b'0');
+INSERT INTO `pay_order` VALUES (105, 1, 6, 9, 'wx_pub', '1635295878514', '标题:1635295878514', '内容:1635295878514', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 0, 1, 0, 0, 10, '101.82.181.148', '2021-10-28 08:51:19', '2021-10-27 08:51:32', '2021-10-27 08:51:33', 83, 0, 0, 0, 'ockUAwIZ-0OeMZl9ogcZ4ILrGba0', '4200001175202110273387197932', NULL, '2021-10-27 08:51:19', NULL, '2021-10-27 08:51:33', b'0');
+INSERT INTO `pay_order` VALUES (106, 1, 6, 9, 'wx_pub', '1635296883074', '标题:1635296883074', '内容:1635296883074', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 0, 1, 0, 0, 10, '101.82.181.148', '2021-10-28 09:08:03', '2021-10-27 09:08:11', '2021-10-27 09:08:12', 84, 0, 0, 0, 'ockUAwIZ-0OeMZl9ogcZ4ILrGba0', '4200001183202110271706103601', NULL, '2021-10-27 09:08:03', NULL, '2021-10-27 09:08:12', b'0');
+INSERT INTO `pay_order` VALUES (107, 1, 6, 9, 'wx_pub', '1635297635297', '标题:1635297635297', '内容:1635297635297', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 0, 1, 0, 0, 10, '101.82.181.148', '2021-10-28 09:20:35', '2021-10-27 09:20:58', '2021-10-27 09:20:59', 85, 0, 0, 0, 'ockUAwIZ-0OeMZl9ogcZ4ILrGba0', '4200001173202110274487848024', NULL, '2021-10-27 09:20:35', NULL, '2021-10-27 09:20:59', b'0');
+INSERT INTO `pay_order` VALUES (108, 1, 6, 9, 'wx_pub', '1635297700295', '标题:1635297700295', '内容:1635297700295', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 0, 1, 0, 0, 10, '101.82.181.148', '2021-10-28 09:21:40', '2021-10-27 09:21:54', '2021-10-27 09:21:55', 86, 0, 0, 0, 'ockUAwIZ-0OeMZl9ogcZ4ILrGba0', '4200001194202110270081665611', NULL, '2021-10-27 09:21:40', NULL, '2021-10-27 09:21:55', b'0');
+INSERT INTO `pay_order` VALUES (109, 1, 6, 9, 'wx_pub', '1635298128448', '标题:1635298128448', '内容:1635298128448', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 0, 1, 0, 0, 10, '101.82.181.148', '2021-10-28 09:28:48', '2021-10-27 09:28:56', '2021-10-27 09:28:57', 87, 0, 0, 0, 'ockUAwIZ-0OeMZl9ogcZ4ILrGba0', '4200001163202110279271204066', NULL, '2021-10-27 09:28:49', NULL, '2021-10-27 09:28:57', b'0');
+INSERT INTO `pay_order` VALUES (110, 1, 6, 9, 'wx_pub', '1635298196716', '标题:1635298196716', '内容:1635298196716', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 0, 1, 0, 0, 10, '101.82.181.148', '2021-10-28 09:29:57', '2021-10-27 09:30:04', '2021-10-27 09:30:05', 88, 0, 0, 0, 'ockUAwIZ-0OeMZl9ogcZ4ILrGba0', '4200001178202110270321083776', NULL, '2021-10-27 09:29:57', NULL, '2021-10-27 09:30:05', b'0');
+INSERT INTO `pay_order` VALUES (111, 1, 6, 9, 'wx_pub', '1635298542165', '标题:1635298542165', '内容:1635298542165', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 0, 1, 0, 0, 10, '101.82.181.148', '2021-10-28 09:35:42', '2021-10-27 09:35:48', '2021-10-27 09:35:49', 89, 0, 0, 0, 'ockUAwIZ-0OeMZl9ogcZ4ILrGba0', '4200001165202110279375621615', NULL, '2021-10-27 09:35:42', NULL, '2021-10-27 09:35:49', b'0');
+INSERT INTO `pay_order` VALUES (112, 1, 6, 9, 'wx_pub', '1635298736280', '标题:1635298736280', '内容:1635298736280', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 0, 1, 0, 0, 10, '101.82.181.148', '2021-10-28 09:38:56', '2021-10-27 09:39:07', '2021-10-27 09:39:08', 91, 0, 0, 0, 'ockUAwIZ-0OeMZl9ogcZ4ILrGba0', '4200001169202110279628461999', NULL, '2021-10-27 09:38:56', NULL, '2021-10-27 09:39:08', b'0');
+INSERT INTO `pay_order` VALUES (113, 1, 6, 9, 'wx_pub', '1635298796688', '标题:1635298796688', '内容:1635298796688', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 0, 1, 0, 0, 10, '101.82.181.148', '2021-10-28 09:39:57', '2021-10-27 09:40:20', '2021-10-27 09:40:21', 93, 0, 0, 0, 'ockUAwIZ-0OeMZl9ogcZ4ILrGba0', '4200001180202110276135740320', NULL, '2021-10-27 09:39:57', NULL, '2021-10-27 09:40:21', b'0');
+INSERT INTO `pay_order` VALUES (114, 1, 6, 9, 'wx_pub', '1635299148566', '标题:1635299148566', '内容:1635299148566', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 0, 1, 0, 0, 10, '101.82.181.148', '2021-10-28 09:45:49', '2021-10-27 09:45:56', '2021-10-27 09:45:57', 94, 0, 0, 0, 'ockUAwIZ-0OeMZl9ogcZ4ILrGba0', '4200001305202110277322382253', NULL, '2021-10-27 09:45:49', NULL, '2021-10-27 09:45:57', b'0');
+INSERT INTO `pay_order` VALUES (115, 1, 6, 9, 'wx_pub', '1635300261266', '标题:1635300261266', '内容:1635300261266', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 0, 1, 0, 0, 10, '101.82.181.148', '2021-10-28 10:04:21', '2021-10-27 10:04:28', '2021-10-27 10:04:29', 95, 0, 0, 0, 'ockUAwIZ-0OeMZl9ogcZ4ILrGba0', '4200001201202110271614745531', NULL, '2021-10-27 10:04:21', NULL, '2021-10-27 10:04:29', b'0');
+INSERT INTO `pay_order` VALUES (116, 1, 6, NULL, NULL, '1635311351736', '标题:1635311351736', '内容:1635311351736', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 0, 1, 0, 0, 0, '101.82.233.75', '2021-10-28 13:09:12', '2021-10-27 05:09:11', '2021-10-27 05:09:11', NULL, 0, 0, 0, NULL, NULL, NULL, '2021-10-27 13:09:12', NULL, '2021-10-27 13:09:12', b'0');
+INSERT INTO `pay_order` VALUES (117, 1, 6, 9, 'wx_pub', '1635311468233', '标题:1635311468233', '内容:1635311468233', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 0, 1, 0, 0, 10, '101.82.233.75', '2021-10-28 13:11:08', '2021-10-27 13:11:15', '2021-10-27 13:11:16', 96, 0, 0, 0, 'ockUAwIZ-0OeMZl9ogcZ4ILrGba0', '4200001194202110276752100612', NULL, '2021-10-27 13:11:08', NULL, '2021-10-27 13:11:16', b'0');
+INSERT INTO `pay_order` VALUES (118, 1, 6, 9, 'wx_pub', '1635311823086', '标题:1635311823086', '内容:1635311823086', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 0, 1, 0, 0, 10, '101.82.233.75', '2021-10-28 13:17:03', '2021-10-27 13:17:08', '2021-10-27 13:17:09', 97, 0, 0, 0, 'ockUAwIZ-0OeMZl9ogcZ4ILrGba0', '4200001167202110271022491439', NULL, '2021-10-27 13:17:03', NULL, '2021-10-27 13:17:09', b'0');
+INSERT INTO `pay_order` VALUES (119, 1, 6, 9, 'wx_pub', '1635311881440', '标题:1635311881439', '内容:1635311881439', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 0, 1, 0, 0, 10, '101.82.233.75', '2021-10-28 13:18:01', '2021-10-27 13:18:10', '2021-10-27 13:18:11', 98, 0, 0, 0, 'ockUAwIZ-0OeMZl9ogcZ4ILrGba0', '4200001173202110272847982104', NULL, '2021-10-27 13:18:02', NULL, '2021-10-27 13:18:11', b'0');
+INSERT INTO `pay_order` VALUES (120, 1, 6, 9, 'wx_pub', '1635311949168', '标题:1635311949168', '内容:1635311949168', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 0, 1, 0, 0, 10, '101.82.233.75', '2021-10-28 13:19:09', '2021-10-27 13:19:15', '2021-10-27 13:19:15', 99, 0, 0, 0, 'ockUAwIZ-0OeMZl9ogcZ4ILrGba0', '4200001181202110277723215336', NULL, '2021-10-27 13:19:09', NULL, '2021-10-27 13:19:15', b'0');
+INSERT INTO `pay_order` VALUES (121, 1, 6, 9, 'wx_pub', '1635312124657', '标题:1635312124656', '内容:1635312124656', 'http://127.0.0.1:28080/api/shop/order/pay-notify', 0, 1, 0, 0, 10, '101.82.233.75', '2021-10-28 13:22:05', '2021-10-27 13:22:15', '2021-10-27 13:22:16', 100, 0, 0, 0, 'ockUAwIZ-0OeMZl9ogcZ4ILrGba0', '4200001174202110278060590766', NULL, '2021-10-27 13:22:05', NULL, '2021-10-27 13:22:16', b'0');
+COMMIT;
+
+-- ----------------------------
+-- Table structure for pay_order_extension
+-- ----------------------------
+DROP TABLE IF EXISTS `pay_order_extension`;
+CREATE TABLE `pay_order_extension` (
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT '支付订单编号',
+ `no` varchar(64) NOT NULL COMMENT '支付订单号',
+ `order_id` bigint NOT NULL COMMENT '支付订单编号',
+ `channel_id` bigint NOT NULL COMMENT '渠道编号',
+ `channel_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '渠道编码',
+ `user_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户 IP',
+ `status` tinyint NOT NULL COMMENT '支付状态',
+ `channel_extras` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '支付渠道的额外参数',
+ `channel_notify_data` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '支付渠道异步通知的内容',
+ `creator` varchar(64) DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `updater` varchar(64) DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='支付订单\n';
+
+-- ----------------------------
+-- Records of pay_order_extension
+-- ----------------------------
+BEGIN;
+INSERT INTO `pay_order_extension` VALUES (9, '', 1, 0, '', '', 0, '', '2021-10-23 09:27:37', NULL, '2021-10-23 17:12:10', NULL, '2021-10-23 17:12:10', b'0');
+INSERT INTO `pay_order_extension` VALUES (10, '20211023193842142492', 10, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-23 19:38:42', NULL, '2021-10-23 19:38:42', b'0');
+INSERT INTO `pay_order_extension` VALUES (11, '20211023193939910727', 10, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-23 19:39:40', NULL, '2021-10-23 19:39:40', b'0');
+INSERT INTO `pay_order_extension` VALUES (12, '20211023193959120765', 10, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-23 19:40:00', NULL, '2021-10-23 19:40:00', b'0');
+INSERT INTO `pay_order_extension` VALUES (13, '20211023194227878115', 10, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-23 19:42:27', NULL, '2021-10-23 19:42:27', b'0');
+INSERT INTO `pay_order_extension` VALUES (14, '20211023194954819846', 10, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-23 19:49:55', NULL, '2021-10-23 19:49:55', b'0');
+INSERT INTO `pay_order_extension` VALUES (15, '20211023195101845551', 10, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-23 19:51:02', NULL, '2021-10-23 19:51:02', b'0');
+INSERT INTO `pay_order_extension` VALUES (16, '20211023195217837007', 10, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-23 19:52:18', NULL, '2021-10-23 19:52:18', b'0');
+INSERT INTO `pay_order_extension` VALUES (17, '20211023195729876366', 10, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-23 19:57:29', NULL, '2021-10-23 19:57:29', b'0');
+INSERT INTO `pay_order_extension` VALUES (18, '20211023200000426986', 10, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-23 20:00:00', NULL, '2021-10-23 20:00:00', b'0');
+INSERT INTO `pay_order_extension` VALUES (19, '20211023200023656577', 10, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-23 20:00:23', NULL, '2021-10-23 20:00:23', b'0');
+INSERT INTO `pay_order_extension` VALUES (20, '20211023200035442235', 10, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-23 20:00:35', NULL, '2021-10-23 20:00:35', b'0');
+INSERT INTO `pay_order_extension` VALUES (21, '20211023200108884896', 10, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-23 20:01:08', NULL, '2021-10-23 20:01:08', b'0');
+INSERT INTO `pay_order_extension` VALUES (22, '20211023200148935150', 10, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-23 20:01:49', NULL, '2021-10-23 20:01:49', b'0');
+INSERT INTO `pay_order_extension` VALUES (23, '20211023200246679654', 10, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-23 20:02:46', NULL, '2021-10-23 20:02:46', b'0');
+INSERT INTO `pay_order_extension` VALUES (24, '20211023200952513780', 10, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-23 20:09:52', NULL, '2021-10-23 20:09:52', b'0');
+INSERT INTO `pay_order_extension` VALUES (25, '20211024233244795306', 41, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:32:45', NULL, '2021-10-24 23:32:45', b'0');
+INSERT INTO `pay_order_extension` VALUES (26, '20211024233303886430', 42, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:33:03', NULL, '2021-10-24 23:33:03', b'0');
+INSERT INTO `pay_order_extension` VALUES (27, '20211024233332176343', 42, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:33:33', NULL, '2021-10-24 23:33:33', b'0');
+INSERT INTO `pay_order_extension` VALUES (28, '20211024233747270447', 44, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:37:47', NULL, '2021-10-24 23:37:47', b'0');
+INSERT INTO `pay_order_extension` VALUES (29, '20211024233813637832', 44, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:38:13', NULL, '2021-10-24 23:38:13', b'0');
+INSERT INTO `pay_order_extension` VALUES (30, '20211024233912251285', 46, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:39:13', NULL, '2021-10-24 23:39:13', b'0');
+INSERT INTO `pay_order_extension` VALUES (31, '20211024233944497880', 49, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:39:45', NULL, '2021-10-24 23:39:45', b'0');
+INSERT INTO `pay_order_extension` VALUES (32, '20211024234241316516', 53, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:42:41', NULL, '2021-10-24 23:42:41', b'0');
+INSERT INTO `pay_order_extension` VALUES (33, '20211024234427711411', 54, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:44:28', NULL, '2021-10-24 23:44:28', b'0');
+INSERT INTO `pay_order_extension` VALUES (34, '20211024234428149145', 54, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:44:28', NULL, '2021-10-24 23:44:28', b'0');
+INSERT INTO `pay_order_extension` VALUES (35, '20211024234429753909', 54, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:44:29', NULL, '2021-10-24 23:44:29', b'0');
+INSERT INTO `pay_order_extension` VALUES (36, '20211024234429396293', 54, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:44:30', NULL, '2021-10-24 23:44:30', b'0');
+INSERT INTO `pay_order_extension` VALUES (37, '20211024234429401965', 54, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:44:30', NULL, '2021-10-24 23:44:30', b'0');
+INSERT INTO `pay_order_extension` VALUES (38, '20211024234430210068', 54, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:44:30', NULL, '2021-10-24 23:44:30', b'0');
+INSERT INTO `pay_order_extension` VALUES (39, '20211024234430964487', 54, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:44:30', NULL, '2021-10-24 23:44:30', b'0');
+INSERT INTO `pay_order_extension` VALUES (40, '20211024234430380287', 54, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:44:30', NULL, '2021-10-24 23:44:30', b'0');
+INSERT INTO `pay_order_extension` VALUES (41, '20211024234430758697', 54, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:44:31', NULL, '2021-10-24 23:44:31', b'0');
+INSERT INTO `pay_order_extension` VALUES (42, '20211024234448627934', 56, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:44:49', NULL, '2021-10-24 23:44:49', b'0');
+INSERT INTO `pay_order_extension` VALUES (43, '20211024234453140708', 56, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:44:54', NULL, '2021-10-24 23:44:54', b'0');
+INSERT INTO `pay_order_extension` VALUES (44, '20211024234607812259', 58, 9, 'wx_pub', '127.0.0.1', 0, NULL, NULL, NULL, '2021-10-24 23:46:07', NULL, '2021-10-24 23:46:07', b'0');
+INSERT INTO `pay_order_extension` VALUES (45, '20211025084152506777', 65, 9, 'wx_pub', '101.82.138.223', 0, NULL, NULL, NULL, '2021-10-25 08:41:52', NULL, '2021-10-25 08:41:52', b'0');
+INSERT INTO `pay_order_extension` VALUES (46, '20211025084218756961', 66, 9, 'wx_pub', '101.82.138.223', 0, NULL, NULL, NULL, '2021-10-25 08:42:19', NULL, '2021-10-25 08:42:19', b'0');
+INSERT INTO `pay_order_extension` VALUES (47, '20211025084223637696', 66, 9, 'wx_pub', '101.82.138.223', 0, NULL, NULL, NULL, '2021-10-25 08:42:24', NULL, '2021-10-25 08:42:24', b'0');
+INSERT INTO `pay_order_extension` VALUES (48, '20211025084545919504', 69, 9, 'wx_pub', '101.82.138.223', 0, NULL, NULL, NULL, '2021-10-25 08:45:46', NULL, '2021-10-25 08:45:46', b'0');
+INSERT INTO `pay_order_extension` VALUES (49, '20211025084547682989', 69, 9, 'wx_pub', '101.82.138.223', 0, NULL, NULL, NULL, '2021-10-25 08:45:47', NULL, '2021-10-25 08:45:47', b'0');
+INSERT INTO `pay_order_extension` VALUES (50, '20211025085031437385', 77, 9, 'wx_pub', '101.82.138.223', 0, NULL, NULL, NULL, '2021-10-25 08:50:31', NULL, '2021-10-25 08:50:31', b'0');
+INSERT INTO `pay_order_extension` VALUES (51, '20211025085114816101', 79, 9, 'wx_pub', '101.82.138.223', 0, NULL, NULL, NULL, '2021-10-25 08:51:14', NULL, '2021-10-25 08:51:14', b'0');
+INSERT INTO `pay_order_extension` VALUES (52, '20211025085307768616', 79, 9, 'wx_pub', '101.82.138.223', 0, NULL, NULL, NULL, '2021-10-25 08:53:07', NULL, '2021-10-25 08:53:07', b'0');
+INSERT INTO `pay_order_extension` VALUES (53, '20211025085315553301', 80, 9, 'wx_pub', '101.82.138.223', 0, NULL, NULL, NULL, '2021-10-25 08:53:15', NULL, '2021-10-25 08:53:15', b'0');
+INSERT INTO `pay_order_extension` VALUES (54, '20211025091312320198', 87, 9, 'wx_pub', '101.82.138.223', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-25 09:13:13', NULL, '2021-10-25 09:13:13', b'0');
+INSERT INTO `pay_order_extension` VALUES (55, '20211025091322710425', 87, 9, 'wx_pub', '101.82.138.223', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-25 09:13:22', NULL, '2021-10-25 09:13:22', b'0');
+INSERT INTO `pay_order_extension` VALUES (56, '20211025091405316694', 87, 9, 'wx_pub', '101.82.138.223', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-25 09:14:06', NULL, '2021-10-25 09:14:06', b'0');
+INSERT INTO `pay_order_extension` VALUES (57, '20211025091429783090', 87, 9, 'wx_pub', '101.82.138.223', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-25 09:14:29', NULL, '2021-10-25 09:14:29', b'0');
+INSERT INTO `pay_order_extension` VALUES (58, '20211025091457423311', 87, 9, 'wx_pub', '101.82.138.223', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-25 09:14:57', NULL, '2021-10-25 09:14:57', b'0');
+INSERT INTO `pay_order_extension` VALUES (59, '20211025091651245779', 87, 9, 'wx_pub', '101.82.138.223', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-25 09:16:52', NULL, '2021-10-25 09:16:52', b'0');
+INSERT INTO `pay_order_extension` VALUES (60, '20211025093153397917', 87, 9, 'wx_pub', '101.82.138.223', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-25 09:31:53', NULL, '2021-10-25 09:31:53', b'0');
+INSERT INTO `pay_order_extension` VALUES (61, '20211025093201208115', 88, 9, 'wx_pub', '101.82.138.223', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-25 09:32:01', NULL, '2021-10-25 09:32:01', b'0');
+INSERT INTO `pay_order_extension` VALUES (62, '20211025095407668368', 89, 9, 'wx_pub', '101.82.138.223', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-25 09:54:08', NULL, '2021-10-25 09:54:08', b'0');
+INSERT INTO `pay_order_extension` VALUES (63, '20211025095445170008', 89, 9, 'wx_pub', '101.82.138.223', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-25 09:54:45', NULL, '2021-10-25 09:54:45', b'0');
+INSERT INTO `pay_order_extension` VALUES (64, '20211025095508568823', 89, 9, 'wx_pub', '101.82.138.223', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-25 09:55:08', NULL, '2021-10-25 09:55:08', b'0');
+INSERT INTO `pay_order_extension` VALUES (65, '20211025095523349753', 89, 9, 'wx_pub', '101.82.138.223', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-25 09:55:24', NULL, '2021-10-25 09:55:24', b'0');
+INSERT INTO `pay_order_extension` VALUES (66, '20211025095530432861', 89, 9, 'wx_pub', '101.82.138.223', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-25 09:55:30', NULL, '2021-10-25 09:55:30', b'0');
+INSERT INTO `pay_order_extension` VALUES (67, '20211025095534847863', 90, 9, 'wx_pub', '101.82.138.223', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-25 09:55:35', NULL, '2021-10-25 09:55:35', b'0');
+INSERT INTO `pay_order_extension` VALUES (68, '20211025100349356411', 91, 9, 'wx_pub', '101.82.138.223', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-25 10:03:49', NULL, '2021-10-25 10:03:49', b'0');
+INSERT INTO `pay_order_extension` VALUES (69, '20211026092058874496', 92, 9, 'wx_pub', '101.82.98.72', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-26 09:20:58', NULL, '2021-10-26 09:20:58', b'0');
+INSERT INTO `pay_order_extension` VALUES (70, '20211026092257213499', 94, 9, 'wx_pub', '101.82.98.72', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-26 09:22:57', NULL, '2021-10-26 09:22:57', b'0');
+INSERT INTO `pay_order_extension` VALUES (71, '20211026092451868262', 95, 9, 'wx_pub', '101.82.98.72', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-26 09:24:51', NULL, '2021-10-26 09:24:51', b'0');
+INSERT INTO `pay_order_extension` VALUES (72, '20211026093046878736', 96, 9, 'wx_pub', '101.82.98.72', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-26 09:30:47', NULL, '2021-10-26 09:30:47', b'0');
+INSERT INTO `pay_order_extension` VALUES (73, '20211026093409899041', 96, 9, 'wx_pub', '101.82.98.72', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-26 09:34:09', NULL, '2021-10-26 09:34:09', b'0');
+INSERT INTO `pay_order_extension` VALUES (74, '20211026093425988092', 97, 9, 'wx_pub', '101.82.98.72', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-26 09:34:25', NULL, '2021-10-26 09:34:25', b'0');
+INSERT INTO `pay_order_extension` VALUES (75, '20211026093911898026', 98, 9, 'wx_pub', '101.82.98.72', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-26 09:39:12', NULL, '2021-10-26 09:39:12', b'0');
+INSERT INTO `pay_order_extension` VALUES (76, '20211026093936195779', 99, 9, 'wx_pub', '101.82.98.72', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-26 09:39:36', NULL, '2021-10-26 09:39:36', b'0');
+INSERT INTO `pay_order_extension` VALUES (77, '20211026094104450323', 100, 9, 'wx_pub', '101.82.98.72', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-26 09:41:05', NULL, '2021-10-26 09:41:05', b'0');
+INSERT INTO `pay_order_extension` VALUES (78, '20211026094109746189', 100, 9, 'wx_pub', '101.82.98.72', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-26 09:41:09', NULL, '2021-10-26 09:41:54', b'0');
+INSERT INTO `pay_order_extension` VALUES (79, '20211026094205207212', 101, 9, 'wx_pub', '101.82.98.72', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-26 09:42:05', NULL, '2021-10-26 09:42:21', b'0');
+INSERT INTO `pay_order_extension` VALUES (80, '20211026094257435456', 102, 9, 'wx_pub', '101.82.98.72', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-26 09:42:57', NULL, '2021-10-26 09:42:57', b'0');
+INSERT INTO `pay_order_extension` VALUES (81, '20211026094302217748', 102, 9, 'wx_pub', '101.82.98.72', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-26 09:43:03', NULL, '2021-10-26 09:43:17', b'0');
+INSERT INTO `pay_order_extension` VALUES (82, '20211026094850532322', 103, 9, 'wx_pub', '101.82.98.72', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-26 09:48:50', NULL, '2021-10-26 09:48:56', b'0');
+INSERT INTO `pay_order_extension` VALUES (83, '20211027085119113077', 105, 9, 'wx_pub', '101.82.181.148', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-27 08:51:20', NULL, '2021-10-27 08:51:33', b'0');
+INSERT INTO `pay_order_extension` VALUES (84, '20211027090803894341', 106, 9, 'wx_pub', '101.82.181.148', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-27 09:08:04', NULL, '2021-10-27 09:08:12', b'0');
+INSERT INTO `pay_order_extension` VALUES (85, '20211027092036195615', 107, 9, 'wx_pub', '101.82.181.148', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-27 09:20:36', NULL, '2021-10-27 09:20:59', b'0');
+INSERT INTO `pay_order_extension` VALUES (86, '20211027092146762628', 108, 9, 'wx_pub', '101.82.181.148', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-27 09:21:46', NULL, '2021-10-27 09:21:55', b'0');
+INSERT INTO `pay_order_extension` VALUES (87, '20211027092849374159', 109, 9, 'wx_pub', '101.82.181.148', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-27 09:28:49', NULL, '2021-10-27 09:28:57', b'0');
+INSERT INTO `pay_order_extension` VALUES (88, '20211027092957858804', 110, 9, 'wx_pub', '101.82.181.148', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-27 09:29:57', NULL, '2021-10-27 09:30:05', b'0');
+INSERT INTO `pay_order_extension` VALUES (89, '20211027093542980205', 111, 9, 'wx_pub', '101.82.181.148', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-27 09:35:43', NULL, '2021-10-27 09:35:49', b'0');
+INSERT INTO `pay_order_extension` VALUES (90, '20211027093856598882', 112, 9, 'wx_pub', '101.82.181.148', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-27 09:38:57', NULL, '2021-10-27 09:38:57', b'0');
+INSERT INTO `pay_order_extension` VALUES (91, '20211027093901662188', 112, 9, 'wx_pub', '101.82.181.148', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-27 09:39:02', NULL, '2021-10-27 09:39:08', b'0');
+INSERT INTO `pay_order_extension` VALUES (92, '20211027094003448769', 113, 9, 'wx_pub', '101.82.181.148', 0, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', NULL, NULL, '2021-10-27 09:40:03', NULL, '2021-10-27 09:40:03', b'0');
+INSERT INTO `pay_order_extension` VALUES (93, '20211027094010419256', 113, 9, 'wx_pub', '101.82.181.148', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-27 09:40:11', NULL, '2021-10-27 09:40:21', b'0');
+INSERT INTO `pay_order_extension` VALUES (94, '20211027094549230727', 114, 9, 'wx_pub', '101.82.181.148', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-27 09:45:50', NULL, '2021-10-27 09:45:57', b'0');
+INSERT INTO `pay_order_extension` VALUES (95, '20211027100421694902', 115, 9, 'wx_pub', '101.82.181.148', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-27 10:04:22', NULL, '2021-10-27 10:04:29', b'0');
+INSERT INTO `pay_order_extension` VALUES (96, '20211027131109347140', 117, 9, 'wx_pub', '101.82.233.75', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-27 13:11:10', NULL, '2021-10-27 13:11:16', b'0');
+INSERT INTO `pay_order_extension` VALUES (97, '20211027131703494434', 118, 9, 'wx_pub', '101.82.233.75', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-27 13:17:04', NULL, '2021-10-27 13:17:09', b'0');
+INSERT INTO `pay_order_extension` VALUES (98, '20211027131802329182', 119, 9, 'wx_pub', '101.82.233.75', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-27 13:18:02', NULL, '2021-10-27 13:18:11', b'0');
+INSERT INTO `pay_order_extension` VALUES (99, '20211027131909520645', 120, 9, 'wx_pub', '101.82.233.75', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-27 13:19:10', NULL, '2021-10-27 13:19:15', b'0');
+INSERT INTO `pay_order_extension` VALUES (100, '20211027132205235959', 121, 9, 'wx_pub', '101.82.233.75', 10, '{\"openid\":\"ockUAwIZ-0OeMZl9ogcZ4ILrGba0\"}', '\n\n\n\n\n\n\n\n\n\n\n\n\n1\n\n\n', NULL, '2021-10-27 13:22:06', NULL, '2021-10-27 13:22:16', b'0');
+COMMIT;
+
-- ----------------------------
-- Table structure for sys_dept
-- ----------------------------
@@ -565,12 +1677,14 @@ CREATE TABLE `sys_login_log` (
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=148 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='系统访问记录';
+) ENGINE=InnoDB AUTO_INCREMENT=150 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='系统访问记录';
-- ----------------------------
-- Records of sys_login_log
-- ----------------------------
BEGIN;
+INSERT INTO `sys_login_log` VALUES (148, 201, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36', NULL, '2021-10-27 08:29:49', NULL, '2021-10-27 08:29:49', b'0');
+INSERT INTO `sys_login_log` VALUES (149, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', NULL, '2021-10-27 08:30:10', NULL, '2021-10-27 08:30:10', b'0');
COMMIT;
-- ----------------------------
@@ -800,12 +1914,16 @@ CREATE TABLE `sys_operate_log` (
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=58 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='操作日志记录';
+) ENGINE=InnoDB AUTO_INCREMENT=62 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='操作日志记录';
-- ----------------------------
-- Records of sys_operate_log
-- ----------------------------
BEGIN;
+INSERT INTO `sys_operate_log` VALUES (58, '', 1, '定时任务', '创建定时任务', 2, '', '', 'POST', '/api/infra/job/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', 'CommonResult cn.iocoder.yudao.adminserver.modules.infra.controller.job.InfJobController.createJob(InfJobCreateReqVO)', '{\"createReqVO\":{\"name\":\"payNotifyJob\",\"handlerParam\":null,\"cronExpression\":\"* * * * * ?\",\"retryCount\":0,\"retryInterval\":0,\"monitorTimeout\":null,\"handlerName\":\"支付通知 Job\"}}', '2021-10-27 08:33:35', 57, 0, '', '4', NULL, '2021-10-27 08:33:35', NULL, '2021-10-27 08:33:35', b'0');
+INSERT INTO `sys_operate_log` VALUES (59, '', 1, '定时任务', '触发定时任务', 3, '', '', 'PUT', '/api/infra/job/trigger', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', 'CommonResult cn.iocoder.yudao.adminserver.modules.infra.controller.job.InfJobController.triggerJob(Long)', '{\"id\":3}', '2021-10-27 08:33:59', 35, 0, '', 'true', NULL, '2021-10-27 08:33:59', NULL, '2021-10-27 08:33:59', b'0');
+INSERT INTO `sys_operate_log` VALUES (60, '', 1, '定时任务', '删除定时任务', 4, '', '', 'DELETE', '/api/infra/job/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', 'CommonResult cn.iocoder.yudao.adminserver.modules.infra.controller.job.InfJobController.deleteJob(Long)', '{\"id\":4}', '2021-10-27 08:34:15', 50, 0, '', 'true', NULL, '2021-10-27 08:34:15', NULL, '2021-10-27 08:34:15', b'0');
+INSERT INTO `sys_operate_log` VALUES (61, '', 1, '定时任务', '创建定时任务', 2, '', '', 'POST', '/api/infra/job/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', 'CommonResult cn.iocoder.yudao.adminserver.modules.infra.controller.job.InfJobController.createJob(InfJobCreateReqVO)', '{\"createReqVO\":{\"name\":\"支付通知 Job\",\"handlerParam\":null,\"cronExpression\":\"* * * * * ?\",\"retryCount\":0,\"retryInterval\":0,\"monitorTimeout\":null,\"handlerName\":\"payNotifyJob\"}}', '2021-10-27 08:34:42', 51, 0, '', '5', NULL, '2021-10-27 08:34:42', NULL, '2021-10-27 08:34:42', b'0');
COMMIT;
-- ----------------------------
@@ -1255,7 +2373,7 @@ CREATE TABLE `sys_user` (
-- Records of sys_user
-- ----------------------------
BEGIN;
-INSERT INTO `sys_user` VALUES (1, 'admin', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道源码', '管理员', 103, '[1]', 'aoteman@126.com', '15612345678', 1, 'http://127.0.0.1:48080/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', 0, '127.0.0.1', '2021-10-12 09:22:43', 'admin', '2021-01-05 17:03:47', NULL, '2021-10-12 09:22:43', b'0');
+INSERT INTO `sys_user` VALUES (1, 'admin', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道源码', '管理员', 103, '[1]', 'aoteman@126.com', '15612345678', 1, 'http://127.0.0.1:48080/api/infra/file/get/7e7ed694-2242-46cf-9ac9-0709debcc22f', 0, '127.0.0.1', '2021-10-27 08:30:10', 'admin', '2021-01-05 17:03:47', NULL, '2021-10-27 08:30:10', b'0');
INSERT INTO `sys_user` VALUES (2, 'ry', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '若依', '测试员', 105, '[2]', 'ry@qq.com', '15666666666', 1, '', 0, '127.0.0.1', '2021-01-05 17:03:47', 'admin', '2021-01-05 17:03:47', '', '2021-04-01 04:50:36', b'1');
INSERT INTO `sys_user` VALUES (100, 'yudao', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋道', '不要吓我', 100, '[1]', 'yudao@iocoder.cn', '15601691300', 1, '', 1, '', NULL, '', '2021-01-07 09:07:17', '1', '2021-03-14 22:35:17', b'0');
INSERT INTO `sys_user` VALUES (103, 'yuanma', '', '源码', NULL, 100, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '', NULL, '', '2021-01-13 23:50:35', '', '2021-01-13 23:50:35', b'0');
@@ -1323,9 +2441,10 @@ INSERT INTO `sys_user_session` VALUES ('02f40128d6ae47caae7ebe1eac9300b6', 245,
INSERT INTO `sys_user_session` VALUES ('112ac5cf97a34607b13ad0a5831df9af', 1, 2, '2021-10-12 09:34:24', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36', NULL, '2021-10-12 08:20:37', NULL, '2021-10-12 01:37:21', b'1');
INSERT INTO `sys_user_session` VALUES ('549f940264cc4edf8ed78a9a0bafd7db', 245, 1, '2021-10-10 17:25:06', '15601691300', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2021-10-10 16:55:06', NULL, '2021-10-10 10:17:26', b'1');
INSERT INTO `sys_user_session` VALUES ('5c8f2bb378aa4f8b92ef5b52a6ab282b', 245, 1, '2021-10-10 18:50:07', '15601691300', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2021-10-10 18:20:07', NULL, '2021-10-10 14:47:27', b'1');
+INSERT INTO `sys_user_session` VALUES ('5efe7272e0414d38be45f26228be6dfd', 1, 2, '2021-10-27 09:00:10', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', NULL, '2021-10-27 08:30:10', NULL, '2021-10-27 08:30:10', b'0');
INSERT INTO `sys_user_session` VALUES ('78c34a300fe449e391d8187a61164b6e', 1, 2, '2021-10-11 08:35:34', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36', NULL, '2021-10-11 07:55:00', NULL, '2021-10-12 00:19:28', b'1');
INSERT INTO `sys_user_session` VALUES ('8f4d894746394901bcf7dcf6d4321868', 245, 1, '2021-10-10 23:04:03', '15601691300', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2021-10-10 22:34:03', NULL, '2021-10-10 23:50:42', b'1');
-INSERT INTO `sys_user_session` VALUES ('9ddb53d391f9413cbd460ec2461ceeb0', 1, 2, '2021-10-12 10:07:20', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36', NULL, '2021-10-12 09:22:43', NULL, '2021-10-12 09:37:20', b'0');
+INSERT INTO `sys_user_session` VALUES ('9ddb53d391f9413cbd460ec2461ceeb0', 1, 2, '2021-10-12 10:07:20', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36', NULL, '2021-10-12 09:22:43', NULL, '2021-10-27 00:29:48', b'1');
INSERT INTO `sys_user_session` VALUES ('c1b76bdaf2c146c581caa4d7fd81ee66', 246, 1, '2021-10-10 23:06:27', '15601691301', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2021-10-10 22:36:27', NULL, '2021-10-10 14:50:05', b'1');
INSERT INTO `sys_user_session` VALUES ('dcb1de2e2ef14e37bca3e64f5bbb603f', 245, 1, '2021-10-10 18:55:16', '15601691300', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.11)', NULL, '2021-10-10 18:25:16', NULL, '2021-10-10 14:47:27', b'1');
INSERT INTO `sys_user_session` VALUES ('e206ac2498054d0c822392e599f6151a', 1, 2, '2021-10-10 00:17:31', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36', NULL, '2021-10-09 23:47:31', NULL, '2021-10-10 10:17:26', b'1');
diff --git a/yudao-admin-server/pom.xml b/yudao-admin-server/pom.xml
index f35c14c9a..5cdf85712 100644
--- a/yudao-admin-server/pom.xml
+++ b/yudao-admin-server/pom.xml
@@ -129,11 +129,11 @@
screw-core
-
+
+
com.xkcoding.justauth
justauth-spring-boot-starter
- 1.4.0
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/file/InfFileController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/file/InfFileController.java
index 6b2c743ca..ede2a68bb 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/file/InfFileController.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/file/InfFileController.java
@@ -1,13 +1,14 @@
package cn.iocoder.yudao.adminserver.modules.infra.controller.file;
import cn.hutool.core.io.IoUtil;
+import cn.iocoder.yudao.adminserver.modules.infra.service.file.InfFileService;
+import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO;
+import cn.iocoder.yudao.coreservice.modules.infra.controller.file.vo.InfFileRespVO;
import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO;
+import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO;
-import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFileRespVO;
import cn.iocoder.yudao.adminserver.modules.infra.convert.file.InfFileConvert;
-import cn.iocoder.yudao.adminserver.modules.infra.service.file.InfFileService;
import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -36,6 +37,8 @@ public class InfFileController {
@Resource
private InfFileService fileService;
+ @Resource
+ private InfFileCoreService fileCoreService;
@PostMapping("/upload")
@ApiOperation("上传文件")
@@ -45,7 +48,7 @@ public class InfFileController {
})
public CommonResult uploadFile(@RequestParam("file") MultipartFile file,
@RequestParam("path") String path) throws IOException {
- return success(fileService.createFile(path, IoUtil.readBytes(file.getInputStream())));
+ return success(fileCoreService.createFile(path, IoUtil.readBytes(file.getInputStream())));
}
@DeleteMapping("/delete")
@@ -53,7 +56,7 @@ public class InfFileController {
@ApiImplicitParam(name = "id", value = "编号", required = true)
@PreAuthorize("@ss.hasPermission('infra:file:delete')")
public CommonResult deleteFile(@RequestParam("id") String id) {
- fileService.deleteFile(id);
+ fileCoreService.deleteFile(id);
return success(true);
}
@@ -61,7 +64,7 @@ public class InfFileController {
@ApiOperation("下载文件")
@ApiImplicitParam(name = "path", value = "文件附件", required = true, dataTypeClass = MultipartFile.class)
public void getFile(HttpServletResponse response, @PathVariable("path") String path) throws IOException {
- InfFileDO file = fileService.getFile(path);
+ InfFileDO file = fileCoreService.getFile(path);
if (file == null) {
log.warn("[getFile][path({}) 文件不存在]", path);
response.setStatus(HttpStatus.NOT_FOUND.value());
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/file/InfFileConvert.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/file/InfFileConvert.java
index d39452ffe..aedad94d9 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/file/InfFileConvert.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/file/InfFileConvert.java
@@ -1,8 +1,8 @@
package cn.iocoder.yudao.adminserver.modules.infra.convert.file;
+import cn.iocoder.yudao.coreservice.modules.infra.controller.file.vo.InfFileRespVO;
import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFileRespVO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/logger/InfApiAccessLogConvert.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/logger/InfApiAccessLogConvert.java
index ba21d33ce..1b4faa0be 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/logger/InfApiAccessLogConvert.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/convert/logger/InfApiAccessLogConvert.java
@@ -2,7 +2,6 @@ package cn.iocoder.yudao.adminserver.modules.infra.convert.logger;
import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateDTO;
import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogExcelVO;
import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogRespVO;
import org.mapstruct.Mapper;
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/file/InfFileMapper.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/file/InfFileMapper.java
index 022f90acb..d3dfcccbb 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/file/InfFileMapper.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/dal/mysql/file/InfFileMapper.java
@@ -1,19 +1,19 @@
package cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.file;
+import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO;
import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
-import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO;
import org.apache.ibatis.annotations.Mapper;
+/**
+ * admin 文件操作 Mapper
+ *
+ * @author 芋道源码
+ */
@Mapper
public interface InfFileMapper extends BaseMapperX {
-
- default Integer selectCountById(String id) {
- return selectCount("id", id);
- }
-
default PageResult selectPage(InfFilePageReqVO reqVO) {
return selectPage(reqVO, new QueryWrapperX()
.likeIfPresent("id", reqVO.getId())
@@ -21,5 +21,4 @@ public interface InfFileMapper extends BaseMapperX {
.betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
.orderByDesc("create_time"));
}
-
}
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/InfErrorCodeConstants.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/InfErrorCodeConstants.java
index b53ff8c1d..98155e723 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/InfErrorCodeConstants.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/enums/InfErrorCodeConstants.java
@@ -27,7 +27,4 @@ public interface InfErrorCodeConstants {
ErrorCode API_ERROR_LOG_NOT_FOUND = new ErrorCode(1001002000, "API 错误日志不存在");
ErrorCode API_ERROR_LOG_PROCESSED = new ErrorCode(1001002001, "API 错误日志已处理");
- // ========== 文件 1001003000 ==========
- ErrorCode FILE_NOT_EXISTS = new ErrorCode(1001003000, "文件不存在");
-
}
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/InfFileService.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/InfFileService.java
index e19e3ecab..1c8311b29 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/InfFileService.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/InfFileService.java
@@ -1,8 +1,8 @@
package cn.iocoder.yudao.adminserver.modules.infra.service.file;
+import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO;
import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO;
/**
* 文件 Service 接口
@@ -11,30 +11,6 @@ import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePage
*/
public interface InfFileService {
- /**
- * 保存文件,并返回文件的访问路径
- *
- * @param path 文件路径
- * @param content 文件内容
- * @return 文件路径
- */
- String createFile(String path, byte[] content);
-
- /**
- * 删除文件
- *
- * @param id 编号
- */
- void deleteFile(String id);
-
- /**
- * 获得文件
- *
- * @param path 文件路径
- * @return 文件
- */
- InfFileDO getFile(String path);
-
/**
* 获得文件分页
*
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/impl/InfFileServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/impl/InfFileServiceImpl.java
index 0436b804f..b8967c638 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/impl/InfFileServiceImpl.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/impl/InfFileServiceImpl.java
@@ -1,20 +1,14 @@
package cn.iocoder.yudao.adminserver.modules.infra.service.file.impl;
-import cn.hutool.core.io.FileTypeUtil;
-import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.adminserver.modules.infra.framework.file.config.FileProperties;
-import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO;
import cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.file.InfFileMapper;
import cn.iocoder.yudao.adminserver.modules.infra.service.file.InfFileService;
+import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO;
+import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO;
+import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
-import java.io.ByteArrayInputStream;
-
-import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.FILE_NOT_EXISTS;
-import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.FILE_PATH_EXISTS;
/**
* 文件 Service 实现类
@@ -27,43 +21,6 @@ public class InfFileServiceImpl implements InfFileService {
@Resource
private InfFileMapper fileMapper;
- @Resource
- private FileProperties fileProperties;
-
- @Override
- public String createFile(String path, byte[] content) {
- if (fileMapper.selectCountById(path) > 0) {
- throw exception(FILE_PATH_EXISTS);
- }
- // 保存到数据库
- InfFileDO file = new InfFileDO();
- file.setId(path);
- file.setType(FileTypeUtil.getType(new ByteArrayInputStream(content)));
- file.setContent(content);
- fileMapper.insert(file);
- // 拼接路径返回
- return fileProperties.getBasePath() + path;
- }
-
- @Override
- public void deleteFile(String id) {
- // 校验存在
- this.validateFileExists(id);
- // 更新
- fileMapper.deleteById(id);
- }
-
- private void validateFileExists(String id) {
- if (fileMapper.selectById(id) == null) {
- throw exception(FILE_NOT_EXISTS);
- }
- }
-
- @Override
- public InfFileDO getFile(String path) {
- return fileMapper.selectById(path);
- }
-
@Override
public PageResult getFilePage(InfFilePageReqVO pageReqVO) {
return fileMapper.selectPage(pageReqVO);
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/package-info.java
new file mode 100644
index 000000000..da3973390
--- /dev/null
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/package-info.java
@@ -0,0 +1,6 @@
+/**
+ * 提供 POJO 类的实体转换
+ *
+ * 目前使用 MapStruct 框架
+ */
+package cn.iocoder.yudao.adminserver.modules.pay.convert;
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md
new file mode 100644
index 000000000..8153487b7
--- /dev/null
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md
@@ -0,0 +1 @@
+
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/job/notify/PayNotifyJob.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/job/notify/PayNotifyJob.java
new file mode 100644
index 000000000..58685f1b5
--- /dev/null
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/job/notify/PayNotifyJob.java
@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.adminserver.modules.pay.job.notify;
+
+import cn.iocoder.yudao.coreservice.modules.pay.service.notify.PayNotifyCoreService;
+import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * 支付通知 Job
+ * 通过不断扫描待通知的 PayNotifyTaskDO 记录,回调业务线的回调接口
+ *
+ * @author 芋道源码
+ */
+@Component
+@Slf4j
+public class PayNotifyJob implements JobHandler {
+
+ @Resource
+ private PayNotifyCoreService payNotifyCoreService;
+
+ @Override
+ public String execute(String param) throws Exception {
+ int notifyCount = payNotifyCoreService.executeNotify();
+ return String.format("执行支付通知 %s 个", notifyCount);
+ }
+
+}
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/job/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/job/package-info.java
new file mode 100644
index 000000000..3db569789
--- /dev/null
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/job/package-info.java
@@ -0,0 +1 @@
+package cn.iocoder.yudao.adminserver.modules.pay.job;
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/package-info.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/package-info.java
new file mode 100644
index 000000000..a113b9beb
--- /dev/null
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/pay/package-info.java
@@ -0,0 +1,7 @@
+/**
+ * pay 包下,我们放支付业务,提供业务的支付能力。
+ * 例如说:商户、应用、支付、退款等等
+ *
+ * 缩写:pay
+ */
+package cn.iocoder.yudao.adminserver.modules.pay;
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java
index b87deaca9..16130e17e 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java
@@ -8,10 +8,11 @@ import cn.iocoder.yudao.adminserver.modules.system.enums.permission.MenuTypeEnum
import cn.iocoder.yudao.adminserver.modules.system.service.auth.SysAuthService;
import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService;
import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService;
-import cn.iocoder.yudao.adminserver.modules.system.service.social.SysSocialService;
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
+import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialService;
import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.collection.SetUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
@@ -132,7 +133,7 @@ public class SysAuthController {
@DeleteMapping("/social-unbind")
@ApiOperation("取消社交绑定")
public CommonResult socialUnbind(@RequestBody SysAuthSocialUnbindReqVO reqVO) {
- socialService.unbindSocialUser(getLoginUserId(), reqVO.getType(), reqVO.getUnionId());
+ socialService.unbindSocialUser(getLoginUserId(), reqVO.getType(), reqVO.getUnionId(), UserTypeEnum.ADMIN);
return CommonResult.success(true);
}
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialBindReqVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialBindReqVO.java
index 66d05cedf..e92d3fc50 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialBindReqVO.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialBindReqVO.java
@@ -1,6 +1,6 @@
package cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth;
-import cn.iocoder.yudao.adminserver.modules.system.enums.social.SysSocialTypeEnum;
+import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialLogin2ReqVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialLogin2ReqVO.java
index bedf8ba3e..13aaa71cc 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialLogin2ReqVO.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialLogin2ReqVO.java
@@ -1,6 +1,6 @@
package cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth;
-import cn.iocoder.yudao.adminserver.modules.system.enums.social.SysSocialTypeEnum;
+import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialLoginReqVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialLoginReqVO.java
index b34022d4f..71d19685d 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialLoginReqVO.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialLoginReqVO.java
@@ -1,6 +1,6 @@
package cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth;
-import cn.iocoder.yudao.adminserver.modules.system.enums.social.SysSocialTypeEnum;
+import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialUnbindReqVO.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialUnbindReqVO.java
index 71cdc6fbb..096164ed7 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialUnbindReqVO.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/vo/auth/SysAuthSocialUnbindReqVO.java
@@ -1,6 +1,6 @@
package cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth;
-import cn.iocoder.yudao.adminserver.modules.system.enums.social.SysSocialTypeEnum;
+import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.java
index 523359b08..48236a7ab 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.java
@@ -8,15 +8,16 @@ import cn.iocoder.yudao.adminserver.modules.system.convert.user.SysUserConvert;
import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO;
import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO;
import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO;
-import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.social.SysSocialUserDO;
import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService;
import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService;
import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService;
import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService;
-import cn.iocoder.yudao.adminserver.modules.system.service.social.SysSocialService;
import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
+import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO;
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
+import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialService;
import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService;
+import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import io.swagger.annotations.Api;
@@ -77,7 +78,7 @@ public class SysUserProfileController {
resp.setPosts(SysUserConvert.INSTANCE.convertList02(posts));
}
// 获得社交用户信息
- List socialUsers = socialService.getSocialUserList(user.getId());
+ List socialUsers = socialService.getSocialUserList(user.getId(), UserTypeEnum.ADMIN);
resp.setSocialUsers(SysUserConvert.INSTANCE.convertList03(socialUsers));
return success(resp);
}
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/user/SysUserConvert.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/user/SysUserConvert.java
index dbe5b365f..d25ce02ad 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/user/SysUserConvert.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/convert/user/SysUserConvert.java
@@ -7,7 +7,7 @@ import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*;
import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO;
import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO;
import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.permission.SysRoleDO;
-import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.social.SysSocialUserDO;
+import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO;
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/redis/SysRedisKeyConstants.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/redis/SysRedisKeyConstants.java
index e7c484bb0..e9d3373b2 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/redis/SysRedisKeyConstants.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/redis/SysRedisKeyConstants.java
@@ -19,12 +19,5 @@ public interface SysRedisKeyConstants {
"captcha_code:%s", // 参数为 uuid
STRING, String.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC);
- RedisKeyDefine SOCIAL_AUTH_USER = new RedisKeyDefine("社交的授权用户",
- "social_auth_user:%d:%s", // 参数为 type,code
- STRING, AuthUser.class, Duration.ofDays(1));
-
- RedisKeyDefine SOCIAL_AUTH_STATE = new RedisKeyDefine("社交的 state",
- "social_auth_state:%s", // 参数为 state
- STRING, String.class, Duration.ofHours(24)); // 值为 state
}
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/SysErrorCodeConstants.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/SysErrorCodeConstants.java
index 8a606e062..7da1f4239 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/SysErrorCodeConstants.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/SysErrorCodeConstants.java
@@ -1,7 +1,6 @@
package cn.iocoder.yudao.adminserver.modules.system.enums;
import cn.iocoder.yudao.framework.common.exception.ErrorCode;
-import javafx.beans.binding.MapExpression;
/**
* System 错误码枚举类
@@ -90,8 +89,6 @@ public interface SysErrorCodeConstants {
ErrorCode ERROR_CODE_NOT_EXISTS = new ErrorCode(1002013000, "错误码不存在");
ErrorCode ERROR_CODE_DUPLICATE = new ErrorCode(1002013001, "已经存在编码为【{}】的错误码");
- // ========== 社交模块 1002014000 ==========
- ErrorCode SOCIAL_AUTH_FAILURE = new ErrorCode(1002014000, "社交授权失败,原因是:{}");
- ErrorCode SOCIAL_UNBIND_NOT_SELF = new ErrorCode(1002014001, "社交解绑失败,非当前用户绑定");
+
}
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/social/SysSocialTypeEnum.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/social/SysSocialTypeEnum.java
deleted file mode 100644
index 87d762dce..000000000
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/social/SysSocialTypeEnum.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package cn.iocoder.yudao.adminserver.modules.system.enums.social;
-
-import cn.hutool.core.collection.ListUtil;
-import cn.hutool.core.util.ArrayUtil;
-import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * 社交平台的类型枚举
- *
- * @author 芋道源码
- */
-@Getter
-@AllArgsConstructor
-public enum SysSocialTypeEnum implements IntArrayValuable {
-
- GITEE(10, "GITEE"), // https://gitee.com/api/v5/oauth_doc#/
- DINGTALK(20, "DINGTALK"), // https://developers.dingtalk.com/document/app/obtain-identity-credentials
- WECHAT_ENTERPRISE(30, "WECHAT_ENTERPRISE"), // https://xkcoding.com/2019/08/06/use-justauth-integration-wechat-enterprise.html
- ;
-
- public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SysSocialTypeEnum::getType).toArray();
-
- public static final List WECHAT_ALL = ListUtil.toList(WECHAT_ENTERPRISE.type);
-
- /**
- * 类型
- */
- private final Integer type;
- /**
- * 类型的标识
- */
- private final String source;
-
- @Override
- public int[] array() {
- return ARRAYS;
- }
-
- public static SysSocialTypeEnum valueOfType(Integer type) {
- return ArrayUtil.firstMatch(o -> o.getType().equals(type), values());
- }
-
- public static List getRelationTypes(Integer type) {
- if (WECHAT_ALL.contains(type)) {
- return WECHAT_ALL;
- }
- return ListUtil.toList(type);
- }
-
-}
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
index 654265fe6..caf1fb217 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
@@ -12,18 +12,18 @@ import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAu
import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthSocialLogin2ReqVO;
import cn.iocoder.yudao.adminserver.modules.system.controller.auth.vo.auth.SysAuthSocialLoginReqVO;
import cn.iocoder.yudao.adminserver.modules.system.convert.auth.SysAuthConvert;
-import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.social.SysSocialUserDO;
import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginLogTypeEnum;
import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginResultEnum;
import cn.iocoder.yudao.adminserver.modules.system.service.auth.SysAuthService;
import cn.iocoder.yudao.adminserver.modules.system.service.common.SysCaptchaService;
import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService;
-import cn.iocoder.yudao.adminserver.modules.system.service.social.SysSocialService;
import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
+import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO;
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService;
import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
+import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialService;
import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
@@ -86,6 +86,9 @@ public class SysAuthServiceImpl implements SysAuthService {
private SysPostService sysPostService;
private SysSocialService socialService;
+ // TODO @timfruit:静态枚举类,需要都大写,例如说 USER_TYPE_ENUM;静态变量,放在普通变量前面;这个实践不错哈。
+ private static final UserTypeEnum userTypeEnum = UserTypeEnum.ADMIN;
+
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// 获取 username 对应的 SysUserDO
@@ -219,7 +222,7 @@ public class SysAuthServiceImpl implements SysAuthService {
// 如果未绑定 SysSocialUserDO 用户,则无法自动登录,进行报错
String unionId = socialService.getAuthUserUnionId(authUser);
- List socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId);
+ List socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, userTypeEnum);
if (CollUtil.isEmpty(socialUsers)) {
throw exception(AUTH_THIRD_LOGIN_NOT_BIND);
}
@@ -233,11 +236,10 @@ public class SysAuthServiceImpl implements SysAuthService {
// 创建 LoginUser 对象
LoginUser loginUser = SysAuthConvert.INSTANCE.convert(user);
- // TODO 芋艿:需要改造下,增加各种登录方式
loginUser.setRoleIds(this.getUserRoleIds(loginUser.getId())); // 获取用户角色列表
// 绑定社交用户(更新)
- socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser);
+ socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, userTypeEnum);
// 缓存登录用户到 Redis 中,返回 sessionId 编号
return userSessionCoreService.createUserSession(loginUser, userIp, userAgent);
@@ -254,7 +256,7 @@ public class SysAuthServiceImpl implements SysAuthService {
loginUser.setRoleIds(this.getUserRoleIds(loginUser.getId())); // 获取用户角色列表
// 绑定社交用户(新增)
- socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser);
+ socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, userTypeEnum);
// 缓存登录用户到 Redis 中,返回 sessionId 编号
return userSessionCoreService.createUserSession(loginUser, userIp, userAgent);
@@ -267,7 +269,7 @@ public class SysAuthServiceImpl implements SysAuthService {
Assert.notNull(authUser, "授权用户不为空");
// 绑定社交用户(新增)
- socialService.bindSocialUser(userId, reqVO.getType(), authUser);
+ socialService.bindSocialUser(userId, reqVO.getType(), authUser, userTypeEnum);
}
@Override
@@ -288,7 +290,7 @@ public class SysAuthServiceImpl implements SysAuthService {
reqDTO.setLogType(SysLoginLogTypeEnum.LOGOUT_SELF.getType());
reqDTO.setTraceId(TracerUtils.getTraceId());
reqDTO.setUserId(userId);
- reqDTO.setUserType(UserTypeEnum.ADMIN.getValue());
+ reqDTO.setUserType(userTypeEnum.getValue());
reqDTO.setUsername(username);
reqDTO.setUserAgent(ServletUtils.getUserAgent());
reqDTO.setUserIp(ServletUtils.getClientIP());
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsChannelService.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsChannelService.java
index 5724b1274..0a7220a79 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsChannelService.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/SysSmsChannelService.java
@@ -11,7 +11,7 @@ import java.util.Collection;
import java.util.List;
/**
- * 短信渠道Service接口
+ * 短信渠道 Service 接口
*
* @author zzf
* @date 2021/1/25 9:24
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl/SysSmsTemplateServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl/SysSmsTemplateServiceImpl.java
index deb76e56e..d8c5b9913 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl/SysSmsTemplateServiceImpl.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl/SysSmsTemplateServiceImpl.java
@@ -33,7 +33,7 @@ import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeCons
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
/**
- * 短信模板Service实现类
+ * 短信模板 Service 实现类
*
* @author zzf
* @date 2021/1/25 9:25
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java
index af7705b63..8901ca022 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java
+++ b/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/impl/SysUserServiceImpl.java
@@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
-import cn.iocoder.yudao.adminserver.modules.infra.service.file.InfFileService;
import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO;
import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*;
@@ -16,6 +15,7 @@ import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService;
import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService;
import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService;
import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
+import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService;
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.exception.ServiceException;
@@ -59,7 +59,7 @@ public class SysUserServiceImpl implements SysUserService {
@Resource
private PasswordEncoder passwordEncoder;
@Resource
- private InfFileService fileService;
+ private InfFileCoreService fileService;
@Override
public Long createUser(SysUserCreateReqVO reqVO) {
diff --git a/yudao-admin-server/src/main/resources/application-local.yaml b/yudao-admin-server/src/main/resources/application-local.yaml
index 150b98cfa..b34664b10 100644
--- a/yudao-admin-server/src/main/resources/application-local.yaml
+++ b/yudao-admin-server/src/main/resources/application-local.yaml
@@ -180,6 +180,9 @@ yudao:
exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系
- ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求
- ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求
+ pay:
+ pay-notify-url: http://niubi.natapp1.cc/api/pay/order/notify
+ refund-notify-url: http://niubi.natapp1.cc/api/pay/refund/notify
demo: false # 关闭演示模式
justauth:
diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/InfFileServiceTest.java b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/InfFileServiceTest.java
index 4849d49cd..6a41c9420 100644
--- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/InfFileServiceTest.java
+++ b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/file/InfFileServiceTest.java
@@ -1,13 +1,12 @@
package cn.iocoder.yudao.adminserver.modules.infra.service.file;
-import cn.hutool.core.io.resource.ResourceUtil;
import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
-import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.adminserver.modules.infra.framework.file.config.FileProperties;
import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO;
-import cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.file.InfFileMapper;
-import cn.iocoder.yudao.adminserver.modules.infra.service.file.impl.InfFileServiceImpl;
+import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO;
+import cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.file.InfFileCoreMapper;
+import cn.iocoder.yudao.coreservice.modules.infra.framework.file.config.FileProperties;
+import cn.iocoder.yudao.coreservice.modules.infra.service.file.impl.InfFileCoreServiceImpl;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
@@ -15,79 +14,22 @@ import org.springframework.context.annotation.Import;
import javax.annotation.Resource;
-import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
-import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.FILE_NOT_EXISTS;
-import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.FILE_PATH_EXISTS;
-import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
-import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
-import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
-import static org.junit.jupiter.api.Assertions.*;
+import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
+import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
+import static org.junit.jupiter.api.Assertions.assertEquals;
-@Import({InfFileServiceImpl.class, FileProperties.class})
+@Import({InfFileCoreServiceImpl.class, FileProperties.class})
public class InfFileServiceTest extends BaseDbUnitTest {
@Resource
- private InfFileServiceImpl fileService;
+ private InfFileService fileService;
@MockBean
private FileProperties fileProperties;
@Resource
- private InfFileMapper fileMapper;
-
- @Test
- public void testCreateFile_success() {
- // 准备参数
- String path = randomString();
- byte[] content = ResourceUtil.readBytes("file/erweima.jpg");
-
- // 调用
- String url = fileService.createFile(path, content);
- // 断言
- assertEquals(fileProperties.getBasePath() + path, url);
- // 校验数据
- InfFileDO file = fileMapper.selectById(path);
- assertEquals(path, file.getId());
- assertEquals("jpg", file.getType());
- assertArrayEquals(content, file.getContent());
- }
-
- @Test
- public void testCreateFile_exists() {
- // mock 数据
- InfFileDO dbFile = randomPojo(InfFileDO.class);
- fileMapper.insert(dbFile);
- // 准备参数
- String path = dbFile.getId(); // 模拟已存在
- byte[] content = ResourceUtil.readBytes("file/erweima.jpg");
-
- // 调用,并断言异常
- assertServiceException(() -> fileService.createFile(path, content), FILE_PATH_EXISTS);
- }
-
- @Test
- public void testDeleteFile_success() {
- // mock 数据
- InfFileDO dbFile = randomPojo(InfFileDO.class);
- fileMapper.insert(dbFile);// @Sql: 先插入出一条存在的数据
- // 准备参数
- String id = dbFile.getId();
-
- // 调用
- fileService.deleteFile(id);
- // 校验数据不存在了
- assertNull(fileMapper.selectById(id));
- }
-
- @Test
- public void testDeleteFile_notExists() {
- // 准备参数
- String id = randomString();
-
- // 调用, 并断言异常
- assertServiceException(() -> fileService.deleteFile(id), FILE_NOT_EXISTS);
- }
+ private InfFileCoreMapper fileMapper;
@Test
public void testGetFilePage() {
diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiAccessLogServiceImplTest.java b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiAccessLogServiceImplTest.java
index 9a1edf3cf..73e918da4 100644
--- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiAccessLogServiceImplTest.java
+++ b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiAccessLogServiceImplTest.java
@@ -1,12 +1,10 @@
package cn.iocoder.yudao.adminserver.modules.infra.service.logger;
-import cn.hutool.core.util.RandomUtil;
import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateDTO;
import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogExportReqVO;
import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apiaccesslog.InfApiAccessLogPageReqVO;
import cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.logger.InfApiAccessLogMapper;
@@ -19,7 +17,6 @@ import org.springframework.context.annotation.Import;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
-import java.util.concurrent.Future;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiErrorLogServiceImplTest.java b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiErrorLogServiceImplTest.java
index 97ce8c661..307f0172a 100644
--- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiErrorLogServiceImplTest.java
+++ b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/infra/service/logger/InfApiErrorLogServiceImplTest.java
@@ -1,11 +1,9 @@
package cn.iocoder.yudao.adminserver.modules.infra.service.logger;
-import cn.hutool.core.util.RandomUtil;
import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateDTO;
import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog.InfApiErrorLogExportReqVO;
import cn.iocoder.yudao.adminserver.modules.infra.controller.logger.vo.apierrorlog.InfApiErrorLogPageReqVO;
import cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.logger.InfApiErrorLogMapper;
@@ -19,7 +17,6 @@ import org.springframework.context.annotation.Import;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
-import java.util.concurrent.Future;
import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.API_ERROR_LOG_NOT_FOUND;
import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.API_ERROR_LOG_PROCESSED;
diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysAuthServiceImplTest.java b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysAuthServiceImplTest.java
index 51e59dc0a..c09a194aa 100644
--- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysAuthServiceImplTest.java
+++ b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/SysAuthServiceImplTest.java
@@ -7,11 +7,11 @@ import cn.iocoder.yudao.adminserver.modules.system.enums.logger.SysLoginResultEn
import cn.iocoder.yudao.adminserver.modules.system.service.auth.impl.SysAuthServiceImpl;
import cn.iocoder.yudao.adminserver.modules.system.service.common.SysCaptchaService;
import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService;
-import cn.iocoder.yudao.adminserver.modules.system.service.social.SysSocialService;
import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService;
import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
+import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialService;
import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.security.core.LoginUser;
diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/social/SysSocialServiceTest.java b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/social/SysSocialServiceTest.java
index badaf0e76..cec84c1ed 100644
--- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/social/SysSocialServiceTest.java
+++ b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/social/SysSocialServiceTest.java
@@ -1,11 +1,11 @@
package cn.iocoder.yudao.adminserver.modules.system.service.social;
import cn.iocoder.yudao.adminserver.BaseDbAndRedisUnitTest;
-import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.social.SysSocialUserDO;
-import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.social.SysSocialUserMapper;
-import cn.iocoder.yudao.adminserver.modules.system.dal.redis.social.SysSocialAuthUserRedisDAO;
-import cn.iocoder.yudao.adminserver.modules.system.enums.social.SysSocialTypeEnum;
-import cn.iocoder.yudao.adminserver.modules.system.service.social.impl.SysSocialServiceImpl;
+import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO;
+import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.social.SysSocialUserMapper;
+import cn.iocoder.yudao.coreservice.modules.system.dal.redis.social.SysSocialAuthUserRedisDAO;
+import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum;
+import cn.iocoder.yudao.coreservice.modules.system.service.social.impl.SysSocialServiceImpl;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import com.xkcoding.justauth.AuthRequestFactory;
import me.zhyd.oauth.model.AuthUser;
@@ -23,6 +23,7 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
import static org.junit.jupiter.api.Assertions.assertEquals;
+// TODO @timfruit:这个单元测试,挪到 yudao-core-service
/**
* {@link SysSocialServiceImpl} 的单元测试类
*
@@ -53,7 +54,7 @@ public class SysSocialServiceTest extends BaseDbAndRedisUnitTest {
// mock 方法
// 调用
- socialService.bindSocialUser(userId, type, authUser);
+ socialService.bindSocialUser(userId, type, authUser, UserTypeEnum.ADMIN);
// 断言
List socialUsers = socialUserMapper.selectList("user_id", userId);
assertEquals(1, socialUsers.size());
@@ -78,7 +79,7 @@ public class SysSocialServiceTest extends BaseDbAndRedisUnitTest {
// mock 方法
// 调用
- socialService.bindSocialUser(userId, type, authUser);
+ socialService.bindSocialUser(userId, type, authUser, UserTypeEnum.ADMIN);
// 断言
List socialUsers = socialUserMapper.selectList("user_id", userId);
assertEquals(1, socialUsers.size());
@@ -103,7 +104,7 @@ public class SysSocialServiceTest extends BaseDbAndRedisUnitTest {
// mock 方法
// 调用
- socialService.bindSocialUser(userId, type, authUser);
+ socialService.bindSocialUser(userId, type, authUser, UserTypeEnum.ADMIN);
// 断言
List socialUsers = socialUserMapper.selectList("user_id", userId);
assertEquals(1, socialUsers.size());
@@ -140,7 +141,7 @@ public class SysSocialServiceTest extends BaseDbAndRedisUnitTest {
String newUnionId = oldSocialUser.getUnionId();
// 调用
- socialService.unbindOldSocialUser(userId, type, newUnionId);
+ socialService.unbindOldSocialUser(userId, type, newUnionId, UserTypeEnum.ADMIN);
// 断言
assertEquals(1L, socialUserMapper.selectCount(null).longValue());
}
@@ -163,7 +164,7 @@ public class SysSocialServiceTest extends BaseDbAndRedisUnitTest {
String newUnionId = randomString(10);
// 调用
- socialService.unbindOldSocialUser(userId, type, newUnionId);
+ socialService.unbindOldSocialUser(userId, type, newUnionId, UserTypeEnum.ADMIN);
// 断言
assertEquals(0L, socialUserMapper.selectCount(null).longValue());
}
diff --git a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserServiceImplTest.java b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserServiceImplTest.java
index e20e72793..70751eeac 100644
--- a/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserServiceImplTest.java
+++ b/yudao-admin-server/src/test/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserServiceImplTest.java
@@ -3,7 +3,6 @@ package cn.iocoder.yudao.adminserver.modules.system.service.user;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.RandomUtil;
import cn.iocoder.yudao.adminserver.BaseDbUnitTest;
-import cn.iocoder.yudao.adminserver.modules.infra.service.file.InfFileService;
import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO;
import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*;
@@ -14,6 +13,7 @@ import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService;
import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService;
import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService;
import cn.iocoder.yudao.adminserver.modules.system.service.user.impl.SysUserServiceImpl;
+import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService;
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
@@ -69,7 +69,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest {
@MockBean
private PasswordEncoder passwordEncoder;
@MockBean
- private InfFileService fileService;
+ private InfFileCoreService fileService;
@Test
public void testCreatUser_success() {
diff --git a/yudao-core-service/pom.xml b/yudao-core-service/pom.xml
index 43cdae127..4fd85c0aa 100644
--- a/yudao-core-service/pom.xml
+++ b/yudao-core-service/pom.xml
@@ -3,9 +3,9 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- yudao
cn.iocoder.boot
- 1.1.0-snapshot
+ yudao
+ ${revision}
4.0.0
@@ -32,6 +32,10 @@
cn.iocoder.boot
yudao-spring-boot-starter-biz-sms
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-biz-pay
+
@@ -73,6 +77,12 @@
yudao-spring-boot-starter-mq
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-protection
+
+
cn.iocoder.boot
@@ -85,6 +95,13 @@
com.google.guava
guava
+
+
+
+ com.xkcoding.justauth
+ justauth-spring-boot-starter
+
+
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/file/vo/InfFileRespVO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/controller/file/vo/InfFileRespVO.java
similarity index 90%
rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/file/vo/InfFileRespVO.java
rename to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/controller/file/vo/InfFileRespVO.java
index 2388d7f3d..e264a3fd2 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/controller/file/vo/InfFileRespVO.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/controller/file/vo/InfFileRespVO.java
@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo;
+package cn.iocoder.yudao.coreservice.modules.infra.controller.file.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/logger/InfApiAccessLogCoreConvert.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/logger/InfApiAccessLogCoreConvert.java
index 4bfb4941c..f5152f710 100644
--- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/logger/InfApiAccessLogCoreConvert.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/logger/InfApiAccessLogCoreConvert.java
@@ -1,6 +1,6 @@
package cn.iocoder.yudao.coreservice.modules.infra.convert.logger;
-import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateDTO;
+import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateReqDTO;
import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@@ -10,6 +10,6 @@ public interface InfApiAccessLogCoreConvert {
InfApiAccessLogCoreConvert INSTANCE = Mappers.getMapper(InfApiAccessLogCoreConvert.class);
- InfApiAccessLogDO convert(ApiAccessLogCreateDTO bean);
+ InfApiAccessLogDO convert(ApiAccessLogCreateReqDTO bean);
}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/logger/InfApiErrorLogCoreConvert.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/logger/InfApiErrorLogCoreConvert.java
index 8979013d5..0c130a28b 100644
--- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/logger/InfApiErrorLogCoreConvert.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/convert/logger/InfApiErrorLogCoreConvert.java
@@ -1,6 +1,6 @@
package cn.iocoder.yudao.coreservice.modules.infra.convert.logger;
-import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateDTO;
+import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateReqDTO;
import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@@ -10,6 +10,6 @@ public interface InfApiErrorLogCoreConvert {
InfApiErrorLogCoreConvert INSTANCE = Mappers.getMapper(InfApiErrorLogCoreConvert.class);
- InfApiErrorLogDO convert(ApiErrorLogCreateDTO bean);
+ InfApiErrorLogDO convert(ApiErrorLogCreateReqDTO bean);
}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/config/InfConfigDO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/config/InfConfigDO.java
index 5955fe18c..c8d58196e 100644
--- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/config/InfConfigDO.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/config/InfConfigDO.java
@@ -11,7 +11,7 @@ import lombok.ToString;
/**
* 参数配置表
*
- * @author ruoyi
+ * @author 芋道源码
*/
@TableName("inf_config")
@Data
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/logger/InfApiErrorLogDO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/logger/InfApiErrorLogDO.java
index 114ebf23a..4cd4ebf40 100644
--- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/logger/InfApiErrorLogDO.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/dataobject/logger/InfApiErrorLogDO.java
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.coreservice.modules.infra.enums.logger.InfApiErrorLogProcessStatusEnum;
+import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
@@ -25,6 +26,7 @@ public class InfApiErrorLogDO extends BaseDO {
/**
* 编号
*/
+ @TableId
private Long id;
/**
* 用户编号
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/mysql/file/InfFileCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/mysql/file/InfFileCoreMapper.java
index 180dc2d79..88266caae 100644
--- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/mysql/file/InfFileCoreMapper.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/dal/mysql/file/InfFileCoreMapper.java
@@ -6,5 +6,7 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface InfFileCoreMapper extends BaseMapperX {
-
+ default Integer selectCountById(String id) {
+ return selectCount("id", id);
+ }
}
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/framework/file/config/FileConfiguration.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework/file/config/FileConfiguration.java
similarity index 81%
rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/framework/file/config/FileConfiguration.java
rename to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework/file/config/FileConfiguration.java
index e71377e3f..a10c7a7af 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/framework/file/config/FileConfiguration.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework/file/config/FileConfiguration.java
@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.adminserver.modules.infra.framework.file.config;
+package cn.iocoder.yudao.coreservice.modules.infra.framework.file.config;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/framework/file/config/FileProperties.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework/file/config/FileProperties.java
similarity index 88%
rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/framework/file/config/FileProperties.java
rename to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework/file/config/FileProperties.java
index db1a6b71f..0d8ed7cda 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/framework/file/config/FileProperties.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework/file/config/FileProperties.java
@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.adminserver.modules.infra.framework.file.config;
+package cn.iocoder.yudao.coreservice.modules.infra.framework.file.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/framework/file/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework/file/package-info.java
similarity index 92%
rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/framework/file/package-info.java
rename to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework/file/package-info.java
index a69b53eb5..2c2798ee6 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/framework/file/package-info.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/framework/file/package-info.java
@@ -13,4 +13,4 @@
* 综合考虑,暂时使用方案 3 的方式,比较适合这样一个 all in one 的项目。
* 随着文件的量级大了之后,还是推荐采用云服务。
*/
-package cn.iocoder.yudao.adminserver.modules.infra.framework.file;
+package cn.iocoder.yudao.coreservice.modules.infra.framework.file;
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreService.java
new file mode 100644
index 000000000..a594bcef4
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreService.java
@@ -0,0 +1,36 @@
+package cn.iocoder.yudao.coreservice.modules.infra.service.file;
+
+import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO;
+
+/**
+ * core service 文件接口
+ *
+ * @author 宋天
+ */
+public interface InfFileCoreService {
+
+
+ /**
+ * 保存文件,并返回文件的访问路径
+ *
+ * @param path 文件路径
+ * @param content 文件内容
+ * @return 文件路径
+ */
+ String createFile(String path, byte[] content);
+
+ /**
+ * 删除文件
+ *
+ * @param id 编号
+ */
+ void deleteFile(String id);
+
+ /**
+ * 获得文件
+ *
+ * @param path 文件路径
+ * @return 文件
+ */
+ InfFileDO getFile(String path);
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/impl/InfFileCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/impl/InfFileCoreServiceImpl.java
new file mode 100644
index 000000000..2f0fb2865
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/impl/InfFileCoreServiceImpl.java
@@ -0,0 +1,64 @@
+package cn.iocoder.yudao.coreservice.modules.infra.service.file.impl;
+
+import cn.hutool.core.io.FileTypeUtil;
+import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO;
+import cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.file.InfFileCoreMapper;
+import cn.iocoder.yudao.coreservice.modules.infra.framework.file.config.FileProperties;
+import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.ByteArrayInputStream;
+
+import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.*;
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+
+/**
+ * core service 文件实现类
+ *
+ * @author 宋天
+ */
+@Service
+public class InfFileCoreServiceImpl implements InfFileCoreService {
+
+ @Resource
+ private InfFileCoreMapper fileMapper;
+
+ @Resource
+ private FileProperties fileProperties;
+
+ @Override
+ public String createFile(String path, byte[] content) {
+ if (fileMapper.selectCountById(path) > 0) {
+ throw exception(FILE_PATH_EXISTS);
+ }
+ // 保存到数据库
+ InfFileDO file = new InfFileDO();
+ file.setId(path);
+ file.setType(FileTypeUtil.getType(new ByteArrayInputStream(content)));
+ file.setContent(content);
+ fileMapper.insert(file);
+ // 拼接路径返回
+ return fileProperties.getBasePath() + path;
+ }
+
+ @Override
+ public void deleteFile(String id) {
+ // 校验存在
+ this.validateFileExists(id);
+ // 更新
+ fileMapper.deleteById(id);
+ }
+
+ private void validateFileExists(String id) {
+ if (fileMapper.selectById(id) == null) {
+ throw exception(FILE_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public InfFileDO getFile(String path) {
+ return fileMapper.selectById(path);
+ }
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/impl/InfApiAccessLogCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/impl/InfApiAccessLogCoreServiceImpl.java
index 6ef022b5a..6327b8b96 100644
--- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/impl/InfApiAccessLogCoreServiceImpl.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/impl/InfApiAccessLogCoreServiceImpl.java
@@ -1,18 +1,16 @@
package cn.iocoder.yudao.coreservice.modules.infra.service.logger.impl;
import cn.iocoder.yudao.coreservice.modules.infra.convert.logger.InfApiAccessLogCoreConvert;
-import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateDTO;
+import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateReqDTO;
import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO;
import cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.logger.InfApiAccessLogCoreMapper;
import cn.iocoder.yudao.coreservice.modules.infra.service.logger.InfApiAccessLogCoreService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
-import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
-import java.util.concurrent.Future;
/**
* API 访问日志 Service 实现类
@@ -29,7 +27,7 @@ public class InfApiAccessLogCoreServiceImpl implements InfApiAccessLogCoreServic
@Override
@Async
- public void createApiAccessLogAsync(ApiAccessLogCreateDTO createDTO) {
+ public void createApiAccessLogAsync(ApiAccessLogCreateReqDTO createDTO) {
InfApiAccessLogDO apiAccessLog = InfApiAccessLogCoreConvert.INSTANCE.convert(createDTO);
apiAccessLogMapper.insert(apiAccessLog);
}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/impl/InfApiErrorLogCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/impl/InfApiErrorLogCoreServiceImpl.java
index a11552bcb..4004ea7f6 100644
--- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/impl/InfApiErrorLogCoreServiceImpl.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/impl/InfApiErrorLogCoreServiceImpl.java
@@ -5,15 +5,13 @@ import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiEr
import cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.logger.InfApiErrorLogCoreMapper;
import cn.iocoder.yudao.coreservice.modules.infra.enums.logger.InfApiErrorLogProcessStatusEnum;
import cn.iocoder.yudao.coreservice.modules.infra.service.logger.InfApiErrorLogCoreService;
-import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateDTO;
+import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateReqDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
-import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
-import java.util.concurrent.Future;
/**
* API 错误日志 Service 实现类
@@ -30,7 +28,7 @@ public class InfApiErrorLogCoreServiceImpl implements InfApiErrorLogCoreService
@Override
@Async
- public void createApiErrorLogAsync(ApiErrorLogCreateDTO createDTO) {
+ public void createApiErrorLogAsync(ApiErrorLogCreateReqDTO createDTO) {
InfApiErrorLogDO apiErrorLog = InfApiErrorLogCoreConvert.INSTANCE.convert(createDTO);
apiErrorLog.setProcessStatus(InfApiErrorLogProcessStatusEnum.INIT.getStatus());
apiErrorLogMapper.insert(apiErrorLog);
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/order/PayOrderCoreConvert.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/order/PayOrderCoreConvert.java
new file mode 100644
index 000000000..3e5215cd8
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/order/PayOrderCoreConvert.java
@@ -0,0 +1,22 @@
+package cn.iocoder.yudao.coreservice.modules.pay.convert.order;
+
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO;
+import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderCreateReqDTO;
+import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitReqDTO;
+import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+@Mapper
+public interface PayOrderCoreConvert {
+
+ PayOrderCoreConvert INSTANCE = Mappers.getMapper(PayOrderCoreConvert.class);
+
+ PayOrderDO convert(PayOrderCreateReqDTO bean);
+
+ PayOrderExtensionDO convert(PayOrderSubmitReqDTO bean);
+
+ PayOrderUnifiedReqDTO convert2(PayOrderSubmitReqDTO bean);
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/package-info.java
new file mode 100644
index 000000000..b10c09029
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/package-info.java
@@ -0,0 +1,6 @@
+/**
+ * 提供 POJO 类的实体转换
+ *
+ * 目前使用 MapStruct 框架
+ */
+package cn.iocoder.yudao.coreservice.modules.pay.convert;
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md
new file mode 100644
index 000000000..8153487b7
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md
@@ -0,0 +1 @@
+
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayAppDO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayAppDO.java
new file mode 100644
index 000000000..acc849cbc
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayAppDO.java
@@ -0,0 +1,62 @@
+package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant;
+
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 支付应用 DO
+ * 一个商户下,可能会有多个支付应用。例如说,京东有京东商城、京东到家等等
+ * 不过一般来说,一个商户,只有一个应用哈~
+ *
+ * 即 PayMerchantDO : PayAppDO = 1 : n
+ *
+ * @author 芋道源码
+ */
+@TableName("pay_app")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayAppDO extends BaseDO {
+
+ /**
+ * 应用编号,数据库自增
+ */
+ @TableId
+ private Long id;
+ /**
+ * 应用名
+ */
+ private String name;
+ /**
+ * 状态
+ *
+ * 枚举 {@link CommonStatusEnum}
+ */
+ private Integer status;
+ /**
+ * 备注
+ */
+ private String remark;
+ /**
+ * 支付结果的回调地址
+ */
+ private String payNotifyUrl;
+ /**
+ * 退款结果的回调地址
+ */
+ private String refundNotifyUrl;
+
+ /**
+ * 商户编号
+ *
+ * 关联 {@link PayMerchantDO#getId()}
+ */
+ private Long merchantId;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayChannelDO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayChannelDO.java
new file mode 100644
index 000000000..2101e6634
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayChannelDO.java
@@ -0,0 +1,68 @@
+package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant;
+
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig;
+import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import lombok.*;
+
+/**
+ * 支付渠道 DO
+ * 一个应用下,会有多种支付渠道,例如说微信支付、支付宝支付等等
+ *
+ * 即 PayAppDO : PayChannelDO = 1 : n
+ *
+ * @author 芋道源码
+ */
+@Data
+@TableName(value = "pay_channel", autoResultMap = true)
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayChannelDO extends BaseDO {
+
+ /**
+ * 渠道编号,数据库自增
+ */
+ private Long id;
+ /**
+ * 渠道编码
+ *
+ * 枚举 {@link PayChannelEnum}
+ */
+ private String code;
+ /**
+ * 状态
+ *
+ * 枚举 {@link CommonStatusEnum}
+ */
+ private Integer status;
+ /**
+ * 渠道费率,单位:百分比
+ */
+ private Double feeRate;
+
+ /**
+ * 商户编号
+ *
+ * 关联 {@link PayMerchantDO#getId()}
+ */
+ private Long merchantId;
+ /**
+ * 应用编号
+ *
+ * 关联 {@link PayAppDO#getId()}
+ */
+ private Long appId;
+ /**
+ * 支付渠道配置
+ */
+ @TableField(typeHandler = JacksonTypeHandler.class)
+ private PayClientConfig config;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayMerchantDO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayMerchantDO.java
new file mode 100644
index 000000000..d2b20111a
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayMerchantDO.java
@@ -0,0 +1,53 @@
+package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant;
+
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 支付商户信息 DO
+ * 目前暂时没有特别的用途,主要为未来多商户提供基础。
+ *
+ * @author 芋道源码
+ */
+@Data
+@TableName("pay_merchant")
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayMerchantDO extends BaseDO {
+
+ /**
+ * 商户编号,数据库自增
+ */
+ @TableId
+ private Long id;
+ /**
+ * 商户号
+ * 例如说,M233666999
+ */
+ private String no;
+ /**
+ * 商户全称
+ */
+ private String name;
+ /**
+ * 商户简称
+ */
+ private String shortName;
+ /**
+ * 状态
+ *
+ * 枚举 {@link CommonStatusEnum}
+ */
+ private Integer status;
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/notify/PayNotifyLogDO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/notify/PayNotifyLogDO.java
new file mode 100644
index 000000000..85626006c
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/notify/PayNotifyLogDO.java
@@ -0,0 +1,49 @@
+package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify;
+
+import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyStatusEnum;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 商户支付、退款等的通知 Log
+ * 每次通知时,都会在该表中,记录一次 Log,方便排查问题
+ *
+ * @author 芋道源码
+ */
+@TableName("pay_notify_log")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayNotifyLogDO extends BaseDO {
+
+ /**
+ * 日志编号,自增
+ */
+ private Long id;
+ /**
+ * 通知任务编号
+ *
+ * 关联 {@link PayNotifyTaskDO#getId()}
+ */
+ private Long taskId;
+ /**
+ * 第几次被通知
+ *
+ * 对应到 {@link PayNotifyTaskDO#getNotifyTimes()}
+ */
+ private Integer notifyTimes;
+ /**
+ * HTTP 响应结果
+ */
+ private String response;
+ /**
+ * 支付通知状态
+ *
+ * 外键 {@link PayNotifyStatusEnum}
+ */
+ private Integer status;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/notify/PayNotifyTaskDO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/notify/PayNotifyTaskDO.java
new file mode 100644
index 000000000..3d10ac83a
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/notify/PayNotifyTaskDO.java
@@ -0,0 +1,99 @@
+package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify;
+
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayRefundDO;
+import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyStatusEnum;
+import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * 商户支付、退款等的通知
+ * 在支付系统收到支付渠道的支付、退款的结果后,需要不断的通知到业务系统,直到成功。
+ *
+ * @author 芋道源码
+ */
+@TableName("pay_notify_task")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+public class PayNotifyTaskDO extends BaseDO {
+
+ /**
+ * 通知频率,单位为秒。
+ *
+ * 算上首次的通知,实际是一共 1 + 8 = 9 次。
+ */
+ public static final Integer[] NOTIFY_FREQUENCY = new Integer[]{
+ 15, 15, 30, 180,
+ 1800, 1800, 1800, 3600
+ };
+
+ /**
+ * 编号,自增
+ */
+ private Long id;
+ /**
+ * 商户编号
+ *
+ * 关联 {@link PayMerchantDO#getId()}
+ */
+ private Long merchantId;
+ /**
+ * 应用编号
+ *
+ * 关联 {@link PayAppDO#getId()}
+ */
+ private Long appId;
+ /**
+ * 通知类型
+ *
+ * 外键 {@link PayNotifyTypeEnum}
+ */
+ private Integer type;
+ /**
+ * 数据编号,根据不同 type 进行关联:
+ *
+ * 1. {@link PayNotifyTypeEnum#ORDER} 时,关联 {@link PayOrderDO#getId()}
+ * 2. {@link PayNotifyTypeEnum#REFUND} 时,关联 {@link PayRefundDO#getId()}
+ */
+ private Long dataId;
+ /**
+ * 商户订单编号
+ */
+ private String merchantOrderId;
+ /**
+ * 通知状态
+ *
+ * 外键 {@link PayNotifyStatusEnum}
+ */
+ private Integer status;
+ /**
+ * 下一次通知时间
+ */
+ private Date nextNotifyTime;
+ /**
+ * 最后一次执行时间
+ */
+ private Date lastExecuteTime;
+ /**
+ * 当前通知次数
+ */
+ private Integer notifyTimes;
+ /**
+ * 最大可通知次数
+ */
+ private Integer maxNotifyTimes;
+ /**
+ * 通知地址
+ */
+ private String notifyUrl;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayOrderDO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayOrderDO.java
new file mode 100644
index 000000000..ccaed8a2c
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayOrderDO.java
@@ -0,0 +1,162 @@
+package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order;
+
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;
+import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderNotifyStatusEnum;
+import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderRefundStatusEnum;
+import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderStatusEnum;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.util.Date;
+
+/**
+ * 支付订单 DO
+ *
+ * @author 芋道源码
+ */
+@TableName("pay_order")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayOrderDO extends BaseDO {
+
+ /**
+ * 订单编号,数据库自增
+ */
+ private Long id;
+ /**
+ * 商户编号
+ *
+ * 关联 {@link PayMerchantDO#getId()}
+ */
+ private Long merchantId;
+ /**
+ * 应用编号
+ *
+ * 关联 {@link PayAppDO#getId()}
+ */
+ private Long appId;
+ /**
+ * 渠道编号
+ *
+ * 关联 {@link PayChannelDO#getId()}
+ */
+ private Long channelId;
+ /**
+ * 渠道编码
+ *
+ * 枚举 {@link PayChannelEnum}
+ */
+ private String channelCode;
+
+ // ========== 商户相关字段 ==========
+
+ /**
+ * 商户订单编号
+ * 例如说,内部系统 A 的订单号。需要保证每个 PayMerchantDO 唯一
+ */
+ private String merchantOrderId;
+ /**
+ * 商品标题
+ */
+ private String subject;
+ /**
+ * 商品描述信息
+ */
+ private String body;
+ /**
+ * 异步通知地址
+ */
+ private String notifyUrl;
+ /**
+ * 通知商户支付结果的回调状态
+ *
+ * 枚举 {@link PayOrderNotifyStatusEnum}
+ */
+ private Integer notifyStatus;
+// /**
+// * 商户拓展参数
+// */
+// private Map merchantExtras;
+
+ // ========== 订单相关字段 ==========
+
+ /**
+ * 支付金额,单位:分
+ */
+ private Long amount;
+ /**
+ * 渠道手续费,单位:百分比
+ *
+ * 冗余 {@link PayChannelDO#getFeeRate()}
+ */
+ private Double channelFeeRate;
+ /**
+ * 渠道手续金额,单位:分
+ */
+ private Long channelFeeAmount;
+ /**
+ * 支付状态
+ *
+ * 枚举 {@link PayOrderStatusEnum}
+ */
+ private Integer status;
+ /**
+ * 用户 IP
+ */
+ private String userIp;
+ /**
+ * 订单失效时间
+ */
+ private Date expireTime;
+ /**
+ * 订单支付成功时间
+ */
+ private Date successTime;
+ /**
+ * 订单支付通知时间,即支付渠道的通知时间
+ */
+ private Date notifyTime;
+ /**
+ * 支付成功的订单拓展单编号
+ *
+ * 关联 {@link PayOrderDO#getId()}
+ */
+ private Long successExtensionId;
+
+ // ========== 退款相关字段 ==========
+ /**
+ * 退款状态
+ *
+ * 枚举 {@link PayOrderRefundStatusEnum}
+ */
+ private Integer refundStatus;
+ /**
+ * 退款次数
+ */
+ private Integer refundTimes;
+ /**
+ * 退款总金额,单位:分
+ */
+ private Long refundAmount;
+
+ // ========== 渠道相关字段 ==========
+ /**
+ * 渠道用户编号
+ *
+ * 例如说,微信 openid、支付宝账号
+ */
+ private String channelUserId;
+ /**
+ * 渠道订单号
+ */
+ private String channelOrderNo;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayOrderExtensionDO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayOrderExtensionDO.java
new file mode 100644
index 000000000..92347647a
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayOrderExtensionDO.java
@@ -0,0 +1,82 @@
+package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order;
+
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;
+import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderStatusEnum;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import lombok.*;
+
+import java.util.Map;
+
+/**
+ * 支付订单拓展 DO
+ *
+ *
+ * @author 芋道源码
+ */
+@TableName("pay_order_extension")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayOrderExtensionDO extends BaseDO {
+
+ /**
+ * 订单拓展编号,数据库自增
+ */
+ private Long id;
+ /**
+ * 支付订单号,根据规则生成
+ * 调用支付渠道时,使用该字段作为对接的订单号。
+ * 1. 调用微信支付 https://api.mch.weixin.qq.com/pay/unifiedorder 时,使用该字段作为 out_trade_no
+ * 2. 调用支付宝 https://opendocs.alipay.com/apis 时,使用该字段作为 out_trade_no
+ *
+ * 例如说,P202110132239124200055
+ */
+ private String no;
+ /**
+ * 订单号
+ *
+ * 关联 {@link PayOrderDO#getId()}
+ */
+ private Long orderId;
+ /**
+ * 渠道编号
+ *
+ * 关联 {@link PayChannelDO#getId()}
+ */
+ private Long channelId;
+ /**
+ * 渠道编码
+ */
+ private String channelCode;
+ /**
+ * 用户 IP
+ */
+ private String userIp;
+ /**
+ * 支付状态
+ *
+ * 枚举 {@link PayOrderStatusEnum}
+ * 注意,只包含上述枚举的 WAITING 和 SUCCESS
+ */
+ private Integer status;
+ /**
+ * 支付渠道的额外参数
+ *
+ * 参见 https://www.pingxx.com/api/支付渠道%20extra%20参数说明.html
+ */
+ @TableField(typeHandler = JacksonTypeHandler.class)
+ private Map channelExtras;
+ /**
+ * 支付渠道异步通知的内容
+ *
+ * 在支持成功后,会记录回调的数据
+ */
+ private String channelNotifyData;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayRefundDO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayRefundDO.java
new file mode 100644
index 000000000..77e5a51e7
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/order/PayRefundDO.java
@@ -0,0 +1,128 @@
+package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order;
+
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayMerchantDO;
+import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 支付退款单 DO
+ * 一个支付订单,可以拥有多个支付退款单
+ *
+ * 即 PayOrderDO : PayRefundDO = 1 : n
+ *
+ * @author 芋道源码
+ */
+@Data
+public class PayRefundDO extends BaseDO {
+
+ /**
+ * 退款单编号,数据库自增
+ */
+ private Long id;
+ /**
+ * 退款单号,根据规则生成
+ *
+ * 例如说,R202109181134287570000
+ */
+ private String no;
+ /**
+ * 商户编号
+ *
+ * 关联 {@link PayMerchantDO#getId()}
+ */
+ private Long merchantId;
+ /**
+ * 应用编号
+ *
+ * 关联 {@link PayAppDO#getId()}
+ */
+ private Long appId;
+ /**
+ * 渠道编号
+ *
+ * 关联 {@link PayChannelDO#getId()}
+ */
+ private Long channelId;
+ /**
+ * 商户编码
+ *
+ * 枚举 {@link PayChannelEnum}
+ */
+ private String channelCode;
+ /**
+ * 订单编号
+ *
+ * 关联 {@link PayOrderDO#getId()}
+ */
+ private Long orderId;
+
+ // ========== 商户相关字段 ==========
+ /**
+ * 商户退款订单号
+ * 例如说,内部系统 A 的退款订单号。需要保证每个 PayMerchantDO 唯一 TODO 芋艿:需要在测试下
+ */
+ private String merchantRefundNo;
+// /**
+// * 商户拓展参数
+// */
+// private String merchantExtra;
+ /**
+ * 异步通知地址
+ */
+ private String notifyUrl;
+ /**
+ * 通知商户退款结果的回调状态
+ * TODO 芋艿:0 未发送 1 已发送
+ */
+ private Integer notifyStatus;
+
+ // ========== 退款相关字段 ==========
+ /**
+ * 退款状态
+ *
+ * TODO 芋艿:状态枚举
+ */
+ private Integer status;
+ /**
+ * 用户 IP
+ */
+ private String userIp;
+ /**
+ * 退款金额,单位:分
+ */
+ private Long amount;
+ /**
+ * 退款原因
+ */
+ private String reason;
+ /**
+ * 订单退款成功时间
+ */
+ private Date successTime;
+ /**
+ * 退款失效时间
+ */
+ private Date expireTime;
+ /**
+ * 支付渠道的额外参数
+ *
+ * 参见 https://www.pingxx.com/api/Refunds%20退款概述.html
+ */
+ private String channelExtra;
+
+ // ========== 渠道相关字段 ==========
+ /**
+ * 渠道订单号
+ */
+ private String channelOrderNo;
+ /**
+ * 渠道退款号
+ */
+ private String channelRefundNo;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayAppCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayAppCoreMapper.java
new file mode 100644
index 000000000..603ff4609
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayAppCoreMapper.java
@@ -0,0 +1,9 @@
+package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.merchant;
+
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PayAppCoreMapper extends BaseMapperX {
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayChannelCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayChannelCoreMapper.java
new file mode 100644
index 000000000..d8780a92f
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayChannelCoreMapper.java
@@ -0,0 +1,20 @@
+package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.merchant;
+
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.Date;
+
+@Mapper
+public interface PayChannelCoreMapper extends BaseMapperX {
+
+ default PayChannelDO selectByAppIdAndCode(Long appId, String code) {
+ return selectOne("app_id", appId, "code", code);
+ }
+
+ @Select("SELECT id FROM pay_channel WHERE update_time > #{maxUpdateTime} LIMIT 1")
+ Long selectExistsByUpdateTimeAfter(Date maxUpdateTime);
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/notify/PayNotifyLogCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/notify/PayNotifyLogCoreMapper.java
new file mode 100644
index 000000000..e3f90d614
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/notify/PayNotifyLogCoreMapper.java
@@ -0,0 +1,9 @@
+package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.notify;
+
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify.PayNotifyLogDO;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PayNotifyLogCoreMapper extends BaseMapperX {
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/notify/PayNotifyTaskCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/notify/PayNotifyTaskCoreMapper.java
new file mode 100644
index 000000000..276c6710b
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/notify/PayNotifyTaskCoreMapper.java
@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.notify;
+
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify.PayNotifyTaskDO;
+import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyStatusEnum;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.Date;
+import java.util.List;
+
+@Mapper
+public interface PayNotifyTaskCoreMapper extends BaseMapperX {
+
+ /**
+ * 获得需要通知的 PayNotifyTaskDO 记录。需要满足如下条件:
+ *
+ * 1. status 非成功
+ * 2. nextNotifyTime 小于当前时间
+ *
+ * @return PayTransactionNotifyTaskDO 数组
+ */
+ default List selectListByNotify() {
+ return selectList(new QueryWrapper()
+ .in("status", PayNotifyStatusEnum.WAITING.getStatus(), PayNotifyStatusEnum.REQUEST_SUCCESS.getStatus(),
+ PayNotifyStatusEnum.REQUEST_FAILURE.getStatus())
+ .le("next_notify_time", new Date()));
+ }
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayOrderCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayOrderCoreMapper.java
new file mode 100644
index 000000000..1ed34d549
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayOrderCoreMapper.java
@@ -0,0 +1,22 @@
+package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order;
+
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PayOrderCoreMapper extends BaseMapperX {
+
+ default PayOrderDO selectByAppIdAndMerchantOrderId(Long appId, String merchantOrderId) {
+ return selectOne(new QueryWrapper().eq("app_id", appId)
+ .eq("merchant_order_id", merchantOrderId));
+ }
+
+ default int updateByIdAndStatus(Long id, Integer status, PayOrderDO update) {
+ return update(update, new QueryWrapper()
+ .eq("id", id).eq("status", status));
+ }
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayOrderExtensionCoreMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayOrderExtensionCoreMapper.java
new file mode 100644
index 000000000..3518986f8
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/order/PayOrderExtensionCoreMapper.java
@@ -0,0 +1,20 @@
+package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order;
+
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PayOrderExtensionCoreMapper extends BaseMapperX {
+
+ default PayOrderExtensionDO selectByNo(String no) {
+ return selectOne("no", no);
+ }
+
+ default int updateByIdAndStatus(Long id, Integer status, PayOrderExtensionDO update) {
+ return update(update, new QueryWrapper()
+ .eq("id", id).eq("status", status));
+ }
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/redis/PayRedisKeyCoreConstants.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/redis/PayRedisKeyCoreConstants.java
new file mode 100644
index 000000000..99384ec12
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/redis/PayRedisKeyCoreConstants.java
@@ -0,0 +1,19 @@
+package cn.iocoder.yudao.coreservice.modules.pay.dal.redis;
+
+import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine;
+import org.redisson.api.RLock;
+
+import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.HASH;
+
+/**
+ * Lock4j Redis Key 枚举类
+ *
+ * @author 芋道源码
+ */
+public interface PayRedisKeyCoreConstants {
+
+ RedisKeyDefine PAY_NOTIFY_LOCK = new RedisKeyDefine("通知任务的分布式锁",
+ "pay_notify:lock:", // 参数来自 DefaultLockKeyBuilder 类
+ HASH, RLock.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC); // Redisson 的 Lock 锁,使用 Hash 数据结构
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/redis/notify/PayNotifyLockCoreRedisDAO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/redis/notify/PayNotifyLockCoreRedisDAO.java
new file mode 100644
index 000000000..5ce6b44b3
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/dal/redis/notify/PayNotifyLockCoreRedisDAO.java
@@ -0,0 +1,39 @@
+package cn.iocoder.yudao.coreservice.modules.pay.dal.redis.notify;
+
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.stereotype.Repository;
+
+import javax.annotation.Resource;
+import java.util.concurrent.TimeUnit;
+
+import static cn.iocoder.yudao.coreservice.modules.pay.dal.redis.PayRedisKeyCoreConstants.PAY_NOTIFY_LOCK;
+
+/**
+ * 支付通知的锁 Redis DAO
+ *
+ * @author 芋道源码
+ */
+@Repository
+public class PayNotifyLockCoreRedisDAO {
+
+ @Resource
+ private RedissonClient redissonClient;
+
+ public void lock(Long id, Long timeoutMillis, Runnable runnable) {
+ String lockKey = formatKey(id);
+ RLock lock = redissonClient.getLock(lockKey);
+ try {
+ lock.lock(timeoutMillis, TimeUnit.MILLISECONDS);
+ // 执行逻辑
+ runnable.run();
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ private static String formatKey(Long id) {
+ return String.format(PAY_NOTIFY_LOCK.getKeyTemplate(), id);
+ }
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/PayErrorCodeCoreConstants.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/PayErrorCodeCoreConstants.java
new file mode 100644
index 000000000..d2b940223
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/PayErrorCodeCoreConstants.java
@@ -0,0 +1,31 @@
+package cn.iocoder.yudao.coreservice.modules.pay.enums;
+
+import cn.iocoder.yudao.framework.common.exception.ErrorCode;
+
+/**
+ * Pay 错误码 Core 枚举类
+ *
+ * pay 系统,使用 1-007-000-000 段
+ */
+public interface PayErrorCodeCoreConstants {
+
+ // ========== APP 模块 1-007-000-000 ==========
+ ErrorCode PAY_APP_NOT_FOUND = new ErrorCode(1007000000, "App 不存在");
+ ErrorCode PAY_APP_IS_DISABLE = new ErrorCode(1007000002, "App 已经被禁用");
+
+ // ========== CHANNEL 模块 1-007-001-000 ==========
+ ErrorCode PAY_CHANNEL_NOT_FOUND = new ErrorCode(1007001000, "支付渠道的配置不存在");
+ ErrorCode PAY_CHANNEL_IS_DISABLE = new ErrorCode(1007001001, "支付渠道已经禁用");
+ ErrorCode PAY_CHANNEL_CLIENT_NOT_FOUND = new ErrorCode(1007001002, "支付渠道的客户端不存在");
+
+ // ========== ORDER 模块 1-007-002-000 ==========
+ ErrorCode PAY_ORDER_NOT_FOUND = new ErrorCode(1007002000, "支付订单不存在");
+ ErrorCode PAY_ORDER_STATUS_IS_NOT_WAITING = new ErrorCode(1007002001, "支付订单不处于待支付");
+ ErrorCode PAY_ORDER_STATUS_IS_NOT_SUCCESS = new ErrorCode(1007002002, "支付订单不处于已支付");
+ ErrorCode PAY_ORDER_ERROR_USER = new ErrorCode(1007002003, "支付订单用户不正确");
+ // ========== ORDER 模块(拓展单) 1-007-003-000 ==========
+ ErrorCode PAY_ORDER_EXTENSION_NOT_FOUND = new ErrorCode(1007003000, "支付交易拓展单不存在");
+ ErrorCode PAY_ORDER_EXTENSION_STATUS_IS_NOT_WAITING = new ErrorCode(1007003001, "支付交易拓展单不处于待支付");
+ ErrorCode PAY_ORDER_EXTENSION_STATUS_IS_NOT_SUCCESS = new ErrorCode(1007003002, "支付订单不处于已支付");
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/notify/PayNotifyStatusEnum.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/notify/PayNotifyStatusEnum.java
new file mode 100644
index 000000000..2c3c6b592
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/notify/PayNotifyStatusEnum.java
@@ -0,0 +1,32 @@
+package cn.iocoder.yudao.coreservice.modules.pay.enums.notify;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 支付通知状态枚举
+ *
+ * @author 芋道源码
+ */
+@Getter
+@AllArgsConstructor
+public enum PayNotifyStatusEnum {
+
+ WAITING(1, "等待通知"),
+ SUCCESS(2, "通知成功"),
+ FAILURE(3, "通知失败"), // 多次尝试,彻底失败
+ REQUEST_SUCCESS(4, "请求成功,但是结果失败"),
+ REQUEST_FAILURE(5, "请求失败"),
+
+ ;
+
+ /**
+ * 状态
+ */
+ private final Integer status;
+ /**
+ * 名字
+ */
+ private final String name;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/notify/PayNotifyTypeEnum.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/notify/PayNotifyTypeEnum.java
new file mode 100644
index 000000000..a501bc55f
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/notify/PayNotifyTypeEnum.java
@@ -0,0 +1,28 @@
+package cn.iocoder.yudao.coreservice.modules.pay.enums.notify;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 支付通知类型
+ *
+ * @author 芋道源码
+ */
+@Getter
+@AllArgsConstructor
+public enum PayNotifyTypeEnum {
+
+ ORDER(1, "支付单"),
+ REFUND(2, "退款单"),
+ ;
+
+ /**
+ * 类型
+ */
+ private final Integer type;
+ /**
+ * 名字
+ */
+ private final String name;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayOrderNotifyStatusEnum.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayOrderNotifyStatusEnum.java
new file mode 100644
index 000000000..4bda485d2
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayOrderNotifyStatusEnum.java
@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.coreservice.modules.pay.enums.order;
+
+import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 支付订单的通知状态枚举
+ *
+ * @author 芋道源码
+ */
+@Getter
+@AllArgsConstructor
+public enum PayOrderNotifyStatusEnum implements IntArrayValuable {
+
+ NO(0, "未通知"),
+ SUCCESS(10, "通知成功"),
+ FAILURE(20, "通知失败")
+ ;
+
+ private final Integer status;
+ private final String name;
+
+ @Override
+ public int[] array() {
+ return new int[0];
+ }
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayOrderRefundStatusEnum.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayOrderRefundStatusEnum.java
new file mode 100644
index 000000000..3c283a9d5
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayOrderRefundStatusEnum.java
@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.coreservice.modules.pay.enums.order;
+
+import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 支付订单的退款状态枚举
+ *
+ * @author 芋道源码
+ */
+@Getter
+@AllArgsConstructor
+public enum PayOrderRefundStatusEnum implements IntArrayValuable {
+
+ NO(0, "未退款"),
+ SOME(10, "部分退款"),
+ ALL(20, "全部退款")
+ ;
+
+ private final Integer status;
+ private final String name;
+
+ @Override
+ public int[] array() {
+ return new int[0];
+ }
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayOrderStatusEnum.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayOrderStatusEnum.java
new file mode 100644
index 000000000..b61c0400c
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/enums/order/PayOrderStatusEnum.java
@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.coreservice.modules.pay.enums.order;
+
+import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 支付订单的状态枚举
+ *
+ * @author 芋道源码
+ */
+@Getter
+@AllArgsConstructor
+public enum PayOrderStatusEnum implements IntArrayValuable {
+
+ WAITING(0, "未支付"),
+ SUCCESS(10, "支付成功"),
+ CLOSED(20, "支付关闭"), // 未付款交易超时关闭,或支付完成后全额退款 TODO 芋艿:需要优化下
+ ;
+
+ private final Integer status;
+ private final String name;
+
+ @Override
+ public int[] array() {
+ return new int[0];
+ }
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/package-info.java
new file mode 100644
index 000000000..8f5ba6ac3
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/package-info.java
@@ -0,0 +1,7 @@
+/**
+ * pay 包下,我们放支付业务,提供业务的支付能力。
+ * 例如说:商户、应用、支付、退款等等
+ *
+ * 缩写:pay
+ */
+package cn.iocoder.yudao.coreservice.modules.pay;
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/PayAppCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/PayAppCoreService.java
new file mode 100644
index 000000000..ab6f3f27f
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/PayAppCoreService.java
@@ -0,0 +1,23 @@
+package cn.iocoder.yudao.coreservice.modules.pay.service.merchant;
+
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;
+import cn.iocoder.yudao.framework.common.exception.ServiceException;
+
+/**
+ * 支付应用 Core Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface PayAppCoreService {
+
+ /**
+ * 支付应用的合法性
+ *
+ * 如果不合法,抛出 {@link ServiceException} 业务异常
+ *
+ * @param id 应用编号
+ * @return 应用信息
+ */
+ PayAppDO validPayApp(Long id);
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/PayChannelCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/PayChannelCoreService.java
new file mode 100644
index 000000000..76d467875
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/PayChannelCoreService.java
@@ -0,0 +1,39 @@
+package cn.iocoder.yudao.coreservice.modules.pay.service.merchant;
+
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;
+import cn.iocoder.yudao.framework.common.exception.ServiceException;
+
+/**
+ * 支付渠道 Core Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface PayChannelCoreService {
+
+ /**
+ * 初始化支付客户端
+ */
+ void initPayClients();
+
+ /**
+ * 支付渠道的合法性
+ *
+ * 如果不合法,抛出 {@link ServiceException} 业务异常
+ *
+ * @param id 渠道编号
+ * @return 渠道信息
+ */
+ PayChannelDO validPayChannel(Long id);
+
+ /**
+ * 支付渠道的合法性
+ *
+ * 如果不合法,抛出 {@link ServiceException} 业务异常
+ *
+ * @param appId 应用编号
+ * @param code 支付渠道
+ * @return 渠道信息
+ */
+ PayChannelDO validPayChannel(Long appId, String code);
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/impl/PayAppCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/impl/PayAppCoreServiceImpl.java
new file mode 100644
index 000000000..916b50137
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/impl/PayAppCoreServiceImpl.java
@@ -0,0 +1,43 @@
+package cn.iocoder.yudao.coreservice.modules.pay.service.merchant.impl;
+
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.merchant.PayAppCoreMapper;
+import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.PayAppCoreService;
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.*;
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+
+/**
+ * 支付应用 Core Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Valid
+@Slf4j
+public class PayAppCoreServiceImpl implements PayAppCoreService {
+
+ @Resource
+ private PayAppCoreMapper payAppCoreMapper;
+
+ @Override
+ public PayAppDO validPayApp(Long id) {
+ PayAppDO app = payAppCoreMapper.selectById(id);
+ // 校验是否存在
+ if (app == null) {
+ throw exception(PAY_APP_NOT_FOUND);
+ }
+ // 校验是否禁用
+ if (CommonStatusEnum.DISABLE.getStatus().equals(app.getStatus())) {
+ throw exception(PAY_APP_IS_DISABLE);
+ }
+ return app;
+ }
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/impl/PayChannelCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/impl/PayChannelCoreServiceImpl.java
new file mode 100644
index 000000000..5029b6ebd
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/merchant/impl/PayChannelCoreServiceImpl.java
@@ -0,0 +1,121 @@
+package cn.iocoder.yudao.coreservice.modules.pay.service.merchant.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.merchant.PayChannelCoreMapper;
+import cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants;
+import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.PayChannelCoreService;
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+
+import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.*;
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+
+/**
+ * 支付渠道 Core Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Valid
+@Slf4j
+public class PayChannelCoreServiceImpl implements PayChannelCoreService {
+
+ /**
+ * 定时执行 {@link #schedulePeriodicRefresh()} 的周期
+ * 因为已经通过 Redis Pub/Sub 机制,所以频率不需要高
+ */
+ private static final long SCHEDULER_PERIOD = 5 * 60 * 1000L;
+
+ /**
+ * 缓存菜单的最大更新时间,用于后续的增量轮询,判断是否有更新
+ */
+ private volatile Date maxUpdateTime;
+
+ @Resource
+ private PayChannelCoreMapper payChannelCoreMapper;
+
+ @Resource
+ private PayClientFactory payClientFactory;
+
+ @Override
+ @PostConstruct
+ public void initPayClients() {
+ // 获取支付渠道,如果有更新
+ List payChannels = this.loadPayChannelIfUpdate(maxUpdateTime);
+ if (CollUtil.isEmpty(payChannels)) {
+ return;
+ }
+
+ // 创建或更新支付 Client
+ payChannels.forEach(payChannel -> payClientFactory.createOrUpdatePayClient(payChannel.getId(),
+ payChannel.getCode(), payChannel.getConfig()));
+
+ // 写入缓存
+ assert payChannels.size() > 0; // 断言,避免告警
+ maxUpdateTime = payChannels.stream().max(Comparator.comparing(BaseDO::getUpdateTime)).get().getUpdateTime();
+ log.info("[initPayClients][初始化 PayChannel 数量为 {}]", payChannels.size());
+ }
+
+ @Scheduled(fixedDelay = SCHEDULER_PERIOD, initialDelay = SCHEDULER_PERIOD)
+ public void schedulePeriodicRefresh() {
+ initPayClients();
+ }
+
+ /**
+ * 如果支付渠道发生变化,从数据库中获取最新的全量支付渠道。
+ * 如果未发生变化,则返回空
+ *
+ * @param maxUpdateTime 当前支付渠道的最大更新时间
+ * @return 支付渠道列表
+ */
+ private List loadPayChannelIfUpdate(Date maxUpdateTime) {
+ // 第一步,判断是否要更新。
+ if (maxUpdateTime == null) { // 如果更新时间为空,说明 DB 一定有新数据
+ log.info("[loadPayChannelIfUpdate][首次加载全量支付渠道]");
+ } else { // 判断数据库中是否有更新的支付渠道
+ if (payChannelCoreMapper.selectExistsByUpdateTimeAfter(maxUpdateTime) == null) {
+ return null;
+ }
+ log.info("[loadPayChannelIfUpdate][增量加载全量支付渠道]");
+ }
+ // 第二步,如果有更新,则从数据库加载所有支付渠道
+ return payChannelCoreMapper.selectList();
+ }
+
+ @Override
+ public PayChannelDO validPayChannel(Long id) {
+ PayChannelDO channel = payChannelCoreMapper.selectById(id);
+ this.validPayChannel(channel);
+ return channel;
+ }
+
+ @Override
+ public PayChannelDO validPayChannel(Long appId, String code) {
+ PayChannelDO channel = payChannelCoreMapper.selectByAppIdAndCode(appId, code);
+ this.validPayChannel(channel);
+ return channel;
+ }
+
+ private void validPayChannel(PayChannelDO channel) {
+ if (channel == null) {
+ throw exception(PAY_CHANNEL_NOT_FOUND);
+ }
+ if (CommonStatusEnum.DISABLE.getStatus().equals(channel.getStatus())) {
+ throw exception(PayErrorCodeCoreConstants.PAY_CHANNEL_IS_DISABLE);
+ }
+ }
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/PayNotifyCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/PayNotifyCoreService.java
new file mode 100644
index 000000000..468375709
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/PayNotifyCoreService.java
@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.coreservice.modules.pay.service.notify;
+
+import cn.iocoder.yudao.coreservice.modules.pay.service.notify.dto.PayNotifyTaskCreateReqDTO;
+
+import javax.validation.Valid;
+
+/**
+ * 支付通知 Core Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface PayNotifyCoreService {
+
+ /**
+ * 创建支付通知任务
+ *
+ * @param reqDTO 任务信息
+ */
+ void createPayNotifyTask(@Valid PayNotifyTaskCreateReqDTO reqDTO);
+
+ /**
+ * 执行支付通知
+ *
+ * 注意,该方法提供给定时任务调用。目前是 yudao-admin-server 进行调用
+ * @return 通知数量
+ */
+ int executeNotify() throws InterruptedException;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/dto/PayNotifyTaskCreateReqDTO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/dto/PayNotifyTaskCreateReqDTO.java
new file mode 100644
index 000000000..8d40ffb91
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/dto/PayNotifyTaskCreateReqDTO.java
@@ -0,0 +1,32 @@
+package cn.iocoder.yudao.coreservice.modules.pay.service.notify.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 支付通知创建 DTO
+ *
+ * @author 芋道源码
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayNotifyTaskCreateReqDTO {
+
+ /**
+ * 类型
+ */
+ @NotNull(message = "类型不能为空")
+ private Integer type;
+ /**
+ * 数据编号
+ */
+ @NotNull(message = "数据编号不能为空")
+ private Long dataId;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/impl/PayNotifyCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/impl/PayNotifyCoreServiceImpl.java
new file mode 100644
index 000000000..4e7b91547
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/impl/PayNotifyCoreServiceImpl.java
@@ -0,0 +1,256 @@
+package cn.iocoder.yudao.coreservice.modules.pay.service.notify.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.http.HttpUtil;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify.PayNotifyLogDO;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.notify.PayNotifyTaskDO;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.notify.PayNotifyLogCoreMapper;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.notify.PayNotifyTaskCoreMapper;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.redis.notify.PayNotifyLockCoreRedisDAO;
+import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyStatusEnum;
+import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum;
+import cn.iocoder.yudao.coreservice.modules.pay.service.notify.PayNotifyCoreService;
+import cn.iocoder.yudao.coreservice.modules.pay.service.notify.dto.PayNotifyTaskCreateReqDTO;
+import cn.iocoder.yudao.coreservice.modules.pay.service.notify.vo.PayNotifyOrderReqVO;
+import cn.iocoder.yudao.coreservice.modules.pay.service.notify.vo.PayRefundOrderReqVO;
+import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayOrderCoreService;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.date.DateUtils;
+import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import static cn.hutool.core.exceptions.ExceptionUtil.getRootCauseMessage;
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.SECOND_MILLIS;
+import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;
+
+/**
+ * 支付通知 Core Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Valid
+@Slf4j
+public class PayNotifyCoreServiceImpl implements PayNotifyCoreService {
+
+ /**
+ * 通知超时时间,单位:秒
+ */
+ public static final int NOTIFY_TIMEOUT = 120;
+ /**
+ * {@link #NOTIFY_TIMEOUT} 的毫秒
+ */
+ public static final long NOTIFY_TIMEOUT_MILLIS = 120 * SECOND_MILLIS;
+
+ @Resource
+ @Lazy // 循环依赖,避免报错
+ private PayOrderCoreService payOrderCoreService;
+
+ @Resource
+ private PayNotifyTaskCoreMapper payNotifyTaskCoreMapper;
+ @Resource
+ private PayNotifyLogCoreMapper payNotifyLogCoreMapper;
+
+ @Resource
+ private ThreadPoolTaskExecutor threadPoolTaskExecutor; // TODO 芋艿:未来提供独立的线程池
+
+ @Resource
+ private PayNotifyLockCoreRedisDAO payNotifyLockCoreRedisDAO;
+
+ @Resource
+ @Lazy // 循环依赖(自己依赖自己),避免报错
+ private PayNotifyCoreServiceImpl self;
+
+ @Override
+ public void createPayNotifyTask(PayNotifyTaskCreateReqDTO reqDTO) {
+ PayNotifyTaskDO task = new PayNotifyTaskDO();
+ task.setType(reqDTO.getType()).setDataId(reqDTO.getDataId());
+ task.setStatus(PayNotifyStatusEnum.WAITING.getStatus()).setNextNotifyTime(new Date())
+ .setNotifyTimes(0).setMaxNotifyTimes(PayNotifyTaskDO.NOTIFY_FREQUENCY.length + 1);
+ // 补充 merchantId + appId + notifyUrl 字段
+ if (Objects.equals(task.getType(), PayNotifyTypeEnum.ORDER.getType())) {
+ PayOrderDO order = payOrderCoreService.getPayOrder(task.getDataId()); // 不进行非空判断,有问题直接异常
+ task.setMerchantId(order.getMerchantId()).setAppId(order.getAppId()).
+ setMerchantOrderId(order.getMerchantOrderId()).setNotifyUrl(order.getNotifyUrl());
+ } else if (Objects.equals(task.getType(), PayNotifyTypeEnum.REFUND.getType())) {
+ // TODO 芋艿,需要实现下哈
+ throw new UnsupportedOperationException("需要实现");
+ }
+
+ // 执行插入
+ payNotifyTaskCoreMapper.insert(task);
+
+ // 异步直接发起任务。虽然会有定时任务扫描,但是会导致延迟
+ self.executeNotifyAsync(task);
+ }
+
+ @Override
+ public int executeNotify() throws InterruptedException {
+ // 获得需要通知的任务
+ List tasks = payNotifyTaskCoreMapper.selectListByNotify();
+ if (CollUtil.isEmpty(tasks)) {
+ return 0;
+ }
+
+ // 遍历,逐个通知
+ CountDownLatch latch = new CountDownLatch(tasks.size());
+ tasks.forEach(task -> threadPoolTaskExecutor.execute(() -> {
+ try {
+ executeNotifySync(task);
+ } finally {
+ latch.countDown();
+ }
+ }));
+ // 等待完成
+ this.awaitExecuteNotify(latch);
+ // 返回执行完成的任务数(成功 + 失败)
+ return tasks.size();
+ }
+
+ /**
+ * 等待全部支付通知的完成
+ * 每 1 秒会打印一次剩余任务数量
+ *
+ * @param latch Latch
+ * @throws InterruptedException 如果被打断
+ */
+ private void awaitExecuteNotify(CountDownLatch latch) throws InterruptedException {
+ long size = latch.getCount();
+ for (int i = 0; i < NOTIFY_TIMEOUT; i++) {
+ if (latch.await(1L, TimeUnit.SECONDS)) {
+ return;
+ }
+ log.info("[awaitExecuteNotify][任务处理中, 总任务数({}) 剩余任务数({})]", size, latch.getCount());
+ }
+ log.error("[awaitExecuteNotify][任务未处理完,总任务数({}) 剩余任务数({})]", size, latch.getCount());
+ }
+
+ /**
+ * 异步执行单个支付通知
+ *
+ * @param task 通知任务
+ */
+ @Async
+ public void executeNotifyAsync(PayNotifyTaskDO task) {
+ self.executeNotifySync(task); // 使用 self,避免事务不发起
+ }
+
+ /**
+ * 同步执行单个支付通知
+ *
+ * @param task 通知任务
+ */
+ public void executeNotifySync(PayNotifyTaskDO task) {
+ // 分布式锁,避免并发问题
+ payNotifyLockCoreRedisDAO.lock(task.getId(), NOTIFY_TIMEOUT_MILLIS, () -> {
+ // 校验,当前任务是否已经被通知过
+ // 虽然已经通过分布式加锁,但是可能同时满足通知的条件,然后都去获得锁。此时,第一个执行完后,第二个还是能拿到锁,然后会再执行一次。
+ PayNotifyTaskDO dbTask = payNotifyTaskCoreMapper.selectById(task.getId());
+ if (DateUtils.afterNow(dbTask.getNextNotifyTime())) {
+ log.info("[executeNotify][dbTask({}) 任务被忽略,原因是未到达下次通知时间,可能是因为并发执行了]", toJsonString(dbTask));
+ return;
+ }
+
+ // 执行通知
+ executeNotify(dbTask);
+ });
+ }
+
+ @Transactional
+ public void executeNotify(PayNotifyTaskDO task) {
+ // 发起回调
+ CommonResult> invokeResult = null;
+ Throwable invokeException = null;
+ try {
+ invokeResult = executeNotifyInvoke(task);
+ } catch (Throwable e) {
+ invokeException = e;
+ }
+
+ // 处理
+ Integer newStatus = this.processNotifyResult(task, invokeResult, invokeException);
+
+ // 记录 PayNotifyLog 日志
+ String response = invokeException != null ? getRootCauseMessage(invokeException) : toJsonString(invokeResult);
+ payNotifyLogCoreMapper.insert(PayNotifyLogDO.builder().taskId(task.getId())
+ .notifyTimes(task.getNotifyTimes() + 1).status(newStatus).response(response).build());
+ }
+
+ /**
+ * 执行单个支付任务的 HTTP 调用
+ *
+ * @param task 通知任务
+ * @return HTTP 响应
+ */
+ private CommonResult> executeNotifyInvoke(PayNotifyTaskDO task) {
+ // 拼接参数
+ Object request;
+ if (Objects.equals(task.getType(), PayNotifyTypeEnum.ORDER.getType())) {
+ request = PayNotifyOrderReqVO.builder().merchantOrderId(task.getMerchantOrderId())
+ .payOrderId(task.getDataId()).build();
+ } else if (Objects.equals(task.getType(), PayNotifyTypeEnum.REFUND.getType())) {
+ request = PayRefundOrderReqVO.builder().merchantOrderId(task.getMerchantOrderId())
+ .payRefundId(task.getDataId()).build();
+ } else {
+ throw new RuntimeException("未知的通知任务类型:" + toJsonString(task));
+ }
+ // 请求地址
+ String response = HttpUtil.post(task.getNotifyUrl(), toJsonString(request),
+ (int) NOTIFY_TIMEOUT_MILLIS);
+ // 解析结果
+ return JsonUtils.parseObject(response, CommonResult.class);
+ }
+
+ /**
+ * 处理并更新通知结果
+ *
+ * @param task 通知任务
+ * @param invokeResult 通知结果
+ * @param invokeException 通知异常
+ * @return 最终任务的状态
+ */
+ private Integer processNotifyResult(PayNotifyTaskDO task, CommonResult> invokeResult, Throwable invokeException) {
+ // 设置通用的更新 PayNotifyTaskDO 的字段
+ PayNotifyTaskDO updateTask = new PayNotifyTaskDO()
+ .setId(task.getId())
+ .setLastExecuteTime(new Date())
+ .setNotifyTimes(task.getNotifyTimes() + 1);
+
+ // 情况一:调用成功
+ if (invokeResult != null && invokeResult.isSuccess()) {
+ updateTask.setStatus(PayNotifyStatusEnum.SUCCESS.getStatus());
+ return updateTask.getStatus();
+ }
+ // 情况二:调用失败、调用异常
+ // 2.1 超过最大回调次数
+ if (updateTask.getNotifyTimes() >= PayNotifyTaskDO.NOTIFY_FREQUENCY.length) {
+ updateTask.setStatus(PayNotifyStatusEnum.FAILURE.getStatus());
+ return updateTask.getStatus();
+ }
+ // 2.2 未超过最大回调次数
+ updateTask.setNextNotifyTime(DateUtils.addDate(Calendar.SECOND, PayNotifyTaskDO.NOTIFY_FREQUENCY[updateTask.getNotifyTimes()]));
+ updateTask.setStatus(invokeException != null ? PayNotifyStatusEnum.REQUEST_FAILURE.getStatus()
+ : PayNotifyStatusEnum.REQUEST_SUCCESS.getStatus());
+ return updateTask.getStatus();
+ }
+
+ private void processNotifySuccess(PayNotifyTaskDO task, PayNotifyTaskDO updateTask) {
+ payNotifyTaskCoreMapper.updateById(updateTask);
+ }
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/PayNotifyOrderReqVO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/PayNotifyOrderReqVO.java
new file mode 100644
index 000000000..94b1fec56
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/PayNotifyOrderReqVO.java
@@ -0,0 +1,28 @@
+package cn.iocoder.yudao.coreservice.modules.pay.service.notify.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@ApiModel(value = "支付单的通知 Request VO", description = "业务方接入支付回调时,使用该 VO 对象")
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayNotifyOrderReqVO {
+
+ @ApiModelProperty(value = "商户订单编号", required = true, example = "10")
+ @NotEmpty(message = "商户订单号不能为空")
+ private String merchantOrderId;
+
+ @ApiModelProperty(value = "支付订单编号", required = true, example = "20")
+ @NotNull(message = "支付订单编号不能为空")
+ private Long payOrderId;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/PayRefundOrderReqVO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/PayRefundOrderReqVO.java
new file mode 100644
index 000000000..705800892
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/PayRefundOrderReqVO.java
@@ -0,0 +1,28 @@
+package cn.iocoder.yudao.coreservice.modules.pay.service.notify.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@ApiModel(value = "退款单的通知 Request VO", description = "业务方接入退款回调时,使用该 VO 对象")
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayRefundOrderReqVO {
+
+ @ApiModelProperty(value = "商户订单编号", required = true, example = "10")
+ @NotEmpty(message = "商户订单号不能为空")
+ private String merchantOrderId;
+
+ @ApiModelProperty(value = "支付退款编号", required = true, example = "20")
+ @NotNull(message = "支付退款编号不能为空")
+ private Long payRefundId;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/package-info.java
new file mode 100644
index 000000000..78667d3ce
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/notify/vo/package-info.java
@@ -0,0 +1,6 @@
+/**
+ * 这里的 VO 包有点特殊,是提供给接入支付模块的业务,提供回调接口时,可以直接使用 VO
+ *
+ * 例如说,支付单的回调,使用
+ */
+package cn.iocoder.yudao.coreservice.modules.pay.service.notify.vo;
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayOrderCoreService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayOrderCoreService.java
new file mode 100644
index 000000000..002716eac
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayOrderCoreService.java
@@ -0,0 +1,51 @@
+package cn.iocoder.yudao.coreservice.modules.pay.service.order;
+
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
+import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderCreateReqDTO;
+import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitReqDTO;
+import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitRespDTO;
+
+import javax.validation.Valid;
+
+/**
+ * 支付订单 Core Service
+ *
+ * @author 芋道源码
+ */
+public interface PayOrderCoreService {
+
+ /**
+ * 获得支付单
+ *
+ * @param id 支付单编号
+ * @return 支付单
+ */
+ PayOrderDO getPayOrder(Long id);
+
+ /**
+ * 创建支付单
+ *
+ * @param reqDTO 创建请求
+ * @return 支付单编号
+ */
+ Long createPayOrder(@Valid PayOrderCreateReqDTO reqDTO);
+
+ /**
+ * 提交支付
+ * 此时,会发起支付渠道的调用
+ *
+ * @param reqDTO 提交请求
+ * @return 提交结果
+ */
+ PayOrderSubmitRespDTO submitPayOrder(@Valid PayOrderSubmitReqDTO reqDTO);
+
+ /**
+ * 通知支付单成功
+ *
+ * @param channelId 渠道编号
+ * @param channelCode 渠道编码
+ * @param notifyData 通知数据
+ */
+ void notifyPayOrder(Long channelId, String channelCode, String notifyData) throws Exception;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderCreateReqDTO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderCreateReqDTO.java
new file mode 100644
index 000000000..a5d2b0f4e
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderCreateReqDTO.java
@@ -0,0 +1,64 @@
+package cn.iocoder.yudao.coreservice.modules.pay.service.order.dto;
+
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.DecimalMin;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 支付单创建 Request DTO
+ */
+@Data
+public class PayOrderCreateReqDTO implements Serializable {
+
+ /**
+ * 应用编号
+ */
+ @NotNull(message = "应用编号不能为空")
+ private Long appId;
+ /**
+ * 用户 IP
+ */
+ @NotEmpty(message = "用户 IP 不能为空")
+ private String userIp;
+
+ // ========== 商户相关字段 ==========
+
+ /**
+ * 商户订单编号
+ */
+ @NotEmpty(message = "商户订单编号不能为空")
+ private String merchantOrderId;
+ /**
+ * 商品标题
+ */
+ @NotEmpty(message = "商品标题不能为空")
+ @Length(max = 32, message = "商品标题不能超过 32")
+ private String subject;
+ /**
+ * 商品描述
+ */
+ @NotEmpty(message = "商品描述信息不能为空")
+ @Length(max = 128, message = "商品描述信息长度不能超过128")
+ private String body;
+
+ // ========== 订单相关字段 ==========
+
+ /**
+ * 支付金额,单位:分
+ */
+ @NotNull(message = "支付金额不能为空")
+ @DecimalMin(value = "0", inclusive = false, message = "支付金额必须大于零")
+ private Integer amount;
+
+ /**
+ * 支付过期时间
+ */
+ @NotNull(message = "支付过期时间不能为空")
+ private Date expireTime;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderSubmitReqDTO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderSubmitReqDTO.java
new file mode 100644
index 000000000..eb08fbb3e
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderSubmitReqDTO.java
@@ -0,0 +1,47 @@
+package cn.iocoder.yudao.coreservice.modules.pay.service.order.dto;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * 支付单提交 Request DTO
+ */
+@Data
+@Accessors(chain = true)
+public class PayOrderSubmitReqDTO implements Serializable {
+
+ /**
+ * 应用编号
+ */
+ @NotNull(message = "应用编号不能为空")
+ private Long appId;
+
+ /**
+ * 支付单编号
+ */
+ @NotNull(message = "支付单编号不能为空")
+ private Long id;
+
+ /**
+ * 支付渠道
+ */
+ @NotEmpty(message = "支付渠道不能为空")
+ private String channelCode;
+
+ /**
+ * 用户 IP
+ */
+ @NotEmpty(message = "用户 IP 不能为空")
+ private String userIp;
+
+ /**
+ * 支付渠道的额外参数
+ */
+ private Map channelExtras;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderSubmitRespDTO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderSubmitRespDTO.java
new file mode 100644
index 000000000..2bcb504e8
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/dto/PayOrderSubmitRespDTO.java
@@ -0,0 +1,23 @@
+package cn.iocoder.yudao.coreservice.modules.pay.service.order.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 支付单提交 Response DTO
+ */
+@Data
+public class PayOrderSubmitRespDTO implements Serializable {
+
+ /**
+ * 支付拓展单的编号
+ */
+ private Long extensionId;
+
+ /**
+ * 调用支付渠道的响应结果
+ */
+ private Object invokeResponse;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayOrderCoreServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayOrderCoreServiceImpl.java
new file mode 100644
index 000000000..5515dd87c
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/impl/PayOrderCoreServiceImpl.java
@@ -0,0 +1,242 @@
+package cn.iocoder.yudao.coreservice.modules.pay.service.order.impl;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.iocoder.yudao.coreservice.modules.pay.convert.order.PayOrderCoreConvert;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayAppDO;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderExtensionDO;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderCoreMapper;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.order.PayOrderExtensionCoreMapper;
+import cn.iocoder.yudao.coreservice.modules.pay.enums.notify.PayNotifyTypeEnum;
+import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderNotifyStatusEnum;
+import cn.iocoder.yudao.coreservice.modules.pay.enums.order.PayOrderStatusEnum;
+import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.PayAppCoreService;
+import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.PayChannelCoreService;
+import cn.iocoder.yudao.coreservice.modules.pay.service.notify.PayNotifyCoreService;
+import cn.iocoder.yudao.coreservice.modules.pay.service.notify.dto.PayNotifyTaskCreateReqDTO;
+import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayOrderCoreService;
+import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderCreateReqDTO;
+import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitReqDTO;
+import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitRespDTO;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
+import cn.iocoder.yudao.framework.pay.config.PayProperties;
+import cn.iocoder.yudao.framework.pay.core.client.PayClient;
+import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory;
+import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderNotifyRespDTO;
+import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.Objects;
+
+import static cn.iocoder.yudao.coreservice.modules.pay.enums.PayErrorCodeCoreConstants.*;
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+
+/**
+ * 支付订单 Core Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+@Slf4j
+public class PayOrderCoreServiceImpl implements PayOrderCoreService {
+
+ @Resource
+ private PayProperties payProperties;
+
+ @Resource
+ private PayAppCoreService payAppCoreService;
+ @Resource
+ private PayChannelCoreService payChannelCoreService;
+ @Resource
+ private PayNotifyCoreService payNotifyCoreService;
+
+ @Resource
+ private PayClientFactory payClientFactory;
+
+ @Resource
+ private PayOrderCoreMapper payOrderCoreMapper;
+ @Resource
+ private PayOrderExtensionCoreMapper payOrderExtensionCoreMapper;
+
+ @Override
+ public PayOrderDO getPayOrder(Long id) {
+ return payOrderCoreMapper.selectById(id);
+ }
+
+ @Override
+ public Long createPayOrder(PayOrderCreateReqDTO reqDTO) {
+ // 校验 App
+ PayAppDO app = payAppCoreService.validPayApp(reqDTO.getAppId());
+
+ // 查询对应的支付交易单是否已经存在。如果是,则直接返回
+ PayOrderDO order = payOrderCoreMapper.selectByAppIdAndMerchantOrderId(
+ reqDTO.getAppId(), reqDTO.getMerchantOrderId());
+ if (order != null) {
+ log.warn("[createPayOrder][appId({}) merchantOrderId({}) 已经存在对应的支付单({})]", order.getAppId(),
+ order.getMerchantOrderId(), JsonUtils.toJsonString(order)); // 理论来说,不会出现这个情况
+ return app.getId();
+ }
+
+ // 创建支付交易单
+ order = PayOrderCoreConvert.INSTANCE.convert(reqDTO)
+ .setMerchantId(app.getMerchantId()).setAppId(app.getId());
+ // 商户相关字段
+ order.setNotifyUrl(app.getPayNotifyUrl())
+ .setNotifyStatus(PayOrderNotifyStatusEnum.NO.getStatus());
+ // 订单相关字段
+ order.setStatus(PayOrderStatusEnum.WAITING.getStatus());
+ // 退款相关字段
+ order.setRefundStatus(PayOrderNotifyStatusEnum.NO.getStatus())
+ .setRefundTimes(0).setRefundAmount(0L);
+ payOrderCoreMapper.insert(order);
+ // 最终返回
+ return order.getId();
+ }
+
+ @Override
+ public PayOrderSubmitRespDTO submitPayOrder(PayOrderSubmitReqDTO reqDTO) {
+ // 校验 App
+ payAppCoreService.validPayApp(reqDTO.getAppId());
+ // 校验支付渠道是否有效
+ PayChannelDO channel = payChannelCoreService.validPayChannel(reqDTO.getAppId(), reqDTO.getChannelCode());
+ // 校验支付客户端是否正确初始化
+ PayClient client = payClientFactory.getPayClient(channel.getId());
+ if (client == null) {
+ log.error("[submitPayOrder][渠道编号({}) 找不到对应的支付客户端]", channel.getId());
+ throw exception(PAY_CHANNEL_CLIENT_NOT_FOUND);
+ }
+
+ // 获得 PayOrderDO ,并校验其是否存在
+ PayOrderDO order = payOrderCoreMapper.selectById(reqDTO.getId());
+ if (order == null || !Objects.equals(order.getAppId(), reqDTO.getAppId())) { // 是否存在
+ throw exception(PAY_ORDER_NOT_FOUND);
+ }
+ if (!PayOrderStatusEnum.WAITING.getStatus().equals(order.getStatus())) { // 校验状态,必须是待支付
+ throw exception(PAY_ORDER_STATUS_IS_NOT_WAITING);
+ }
+
+ // 插入 PayOrderExtensionDO
+ PayOrderExtensionDO orderExtension = PayOrderCoreConvert.INSTANCE.convert(reqDTO)
+ .setOrderId(order.getId()).setNo(generateOrderExtensionNo())
+ .setChannelId(channel.getId()).setChannelCode(channel.getCode())
+ .setStatus(PayOrderStatusEnum.WAITING.getStatus());
+ payOrderExtensionCoreMapper.insert(orderExtension);
+
+ // 调用三方接口
+ PayOrderUnifiedReqDTO unifiedOrderReqDTO = PayOrderCoreConvert.INSTANCE.convert2(reqDTO);
+ // 商户相关字段
+ unifiedOrderReqDTO.setMerchantOrderId(orderExtension.getNo()) // 注意,此处使用的是 PayOrderExtensionDO.no 属性!
+ .setSubject(order.getSubject()).setBody(order.getBody())
+ .setNotifyUrl(genChannelPayNotifyUrl(channel));
+ // 订单相关字段
+ unifiedOrderReqDTO.setAmount(order.getAmount()).setExpireTime(order.getExpireTime());
+ CommonResult> unifiedOrderResult = client.unifiedOrder(unifiedOrderReqDTO);
+ unifiedOrderResult.checkError();
+
+ // TODO 轮询三方接口,是否已经支付的任务
+ // 返回成功
+ return new PayOrderSubmitRespDTO().setExtensionId(orderExtension.getId())
+ .setInvokeResponse(unifiedOrderResult.getData());
+ }
+
+ /**
+ * 根据支付渠道的编码,生成支付渠道的回调地址
+ *
+ * @param channel 支付渠道
+ * @return 支付渠道的回调地址
+ */
+ private String genChannelPayNotifyUrl(PayChannelDO channel) {
+ // _ 转化为 - 的原因,是因为 URL 我们统一采用中划线的原则
+ return payProperties.getPayNotifyUrl() + "/" + StrUtil.replace(channel.getCode(), "_", "-")
+ + "/" + channel.getId();
+ }
+
+ private String generateOrderExtensionNo() {
+// wx
+// 2014
+// 10
+// 27
+// 20
+// 09
+// 39
+// 5522657
+// a690389285100
+ // 目前的算法
+ // 时间序列,年月日时分秒 14 位
+ // 纯随机,6 位 TODO 芋艿:此处估计是会有问题的,后续在调整
+ return DateUtil.format(new Date(), "yyyyMMddHHmmss") + // 时间序列
+ RandomUtil.randomInt(100000, 999999) // 随机。为什么是这个范围,因为偷懒
+ ;
+ }
+
+ @Override
+ @Transactional
+ public void notifyPayOrder(Long channelId, String channelCode, String notifyData) throws Exception {
+ // TODO 芋艿,记录回调日志
+ log.info("[notifyPayOrder][channelId({}) 回调数据({})]", channelId, notifyData);
+
+ // 校验支付渠道是否有效
+ PayChannelDO channel = payChannelCoreService.validPayChannel(channelId);
+ // 校验支付客户端是否正确初始化
+ PayClient client = payClientFactory.getPayClient(channel.getId());
+ if (client == null) {
+ log.error("[notifyPayOrder][渠道编号({}) 找不到对应的支付客户端]", channel.getId());
+ throw exception(PAY_CHANNEL_CLIENT_NOT_FOUND);
+ }
+ // 解析支付结果
+ PayOrderNotifyRespDTO notifyRespDTO = client.parseOrderNotify(notifyData);
+
+ // TODO 芋艿,先最严格的校验。即使调用方重复调用,实际哪个订单已经被重复回调的支付,也返回 false 。也没问题,因为实际已经回调成功了。
+ // 1.1 查询 PayOrderExtensionDO
+ PayOrderExtensionDO orderExtension = payOrderExtensionCoreMapper.selectByNo(
+ notifyRespDTO.getOrderExtensionNo());
+ if (orderExtension == null) {
+ throw exception(PAY_ORDER_EXTENSION_NOT_FOUND);
+ }
+ if (!PayOrderStatusEnum.WAITING.getStatus().equals(orderExtension.getStatus())) { // 校验状态,必须是待支付
+ throw exception(PAY_ORDER_EXTENSION_STATUS_IS_NOT_WAITING);
+ }
+ // 1.2 更新 PayOrderExtensionDO
+ int updateCounts = payOrderExtensionCoreMapper.updateByIdAndStatus(orderExtension.getId(),
+ PayOrderStatusEnum.WAITING.getStatus(), PayOrderExtensionDO.builder().id(orderExtension.getId())
+ .status(PayOrderStatusEnum.SUCCESS.getStatus()).channelNotifyData(notifyData).build());
+ if (updateCounts == 0) { // 校验状态,必须是待支付
+ throw exception(PAY_ORDER_EXTENSION_STATUS_IS_NOT_WAITING);
+ }
+ log.info("[notifyPayOrder][支付拓展单({}) 更新为已支付]", orderExtension.getId());
+
+ // 2.1 判断 PayOrderDO 是否处于待支付
+ PayOrderDO order = payOrderCoreMapper.selectById(orderExtension.getOrderId());
+ if (order == null) {
+ throw exception(PAY_ORDER_NOT_FOUND);
+ }
+ if (!PayOrderStatusEnum.WAITING.getStatus().equals(order.getStatus())) { // 校验状态,必须是待支付
+ throw exception(PAY_ORDER_STATUS_IS_NOT_WAITING);
+ }
+ // 2.2 更新 PayOrderDO
+ updateCounts = payOrderCoreMapper.updateByIdAndStatus(order.getId(), PayOrderStatusEnum.WAITING.getStatus(),
+ PayOrderDO.builder().status(PayOrderStatusEnum.SUCCESS.getStatus()).channelId(channelId).channelCode(channelCode)
+ .successTime(notifyRespDTO.getSuccessTime()).successExtensionId(orderExtension.getId())
+ .channelOrderNo(notifyRespDTO.getChannelOrderNo()).channelUserId(notifyRespDTO.getChannelUserId())
+ .notifyTime(new Date()).build());
+ if (updateCounts == 0) { // 校验状态,必须是待支付
+ throw exception(PAY_ORDER_STATUS_IS_NOT_WAITING);
+ }
+ log.info("[notifyPayOrder][支付订单({}) 更新为已支付]", order.getId());
+
+ // 3. 插入支付通知记录
+ payNotifyCoreService.createPayNotifyTask(PayNotifyTaskCreateReqDTO.builder()
+ .type(PayNotifyTypeEnum.ORDER.getType()).dataId(order.getId()).build());
+ }
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/package-info.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/package-info.java
new file mode 100644
index 000000000..13b4863a5
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/pay/service/package-info.java
@@ -0,0 +1 @@
+package cn.iocoder.yudao.coreservice.modules.pay.service;
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth/AuthExtendSource.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth/AuthExtendSource.java
new file mode 100644
index 000000000..e005114ac
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth/AuthExtendSource.java
@@ -0,0 +1,33 @@
+package cn.iocoder.yudao.coreservice.modules.system.compent.justauth;
+
+import me.zhyd.oauth.config.AuthSource;
+
+public enum AuthExtendSource implements AuthSource {
+
+ /**
+ * 微信小程序授权登录
+ */
+ WECHAT_MINI_PROGRAM{
+ @Override
+ public String authorize() {
+ // https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
+ throw new UnsupportedOperationException("不支持获取授权url, 请使用小程序内置函数wx.login()登录获取code");
+ }
+
+ @Override
+ public String accessToken() {
+ // https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html
+ // 获取openid, unionid , session_key
+ return "https://api.weixin.qq.com/sns/jscode2session";
+ }
+
+ @Override
+ public String userInfo() {
+ //https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserProfile.html
+ throw new UnsupportedOperationException("不支持获取用户信息url, 请使用小程序内置函数wx.getUserProfile()获取用户信息");
+ }
+ }
+
+ ;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth/AuthExtendToken.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth/AuthExtendToken.java
new file mode 100644
index 000000000..2ecb0d461
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth/AuthExtendToken.java
@@ -0,0 +1,22 @@
+package cn.iocoder.yudao.coreservice.modules.system.compent.justauth;
+
+import lombok.*;
+import me.zhyd.oauth.model.AuthToken;
+
+/**
+ * TODO @timfruit:类注释
+ * @author timfruit
+ * @date 2021-10-29
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+public class AuthExtendToken extends AuthToken {
+
+ /**
+ * 微信小程序 会话密钥
+ */
+ private String miniSessionKey;
+
+}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth/AuthWeChatMiniProgramRequest.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth/AuthWeChatMiniProgramRequest.java
new file mode 100644
index 000000000..664f9157f
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/compent/justauth/AuthWeChatMiniProgramRequest.java
@@ -0,0 +1,90 @@
+package cn.iocoder.yudao.coreservice.modules.system.compent.justauth;
+
+import com.alibaba.fastjson.JSONObject;
+import me.zhyd.oauth.cache.AuthStateCache;
+import me.zhyd.oauth.config.AuthConfig;
+import me.zhyd.oauth.exception.AuthException;
+import me.zhyd.oauth.model.AuthCallback;
+import me.zhyd.oauth.model.AuthToken;
+import me.zhyd.oauth.model.AuthUser;
+import me.zhyd.oauth.request.AuthDefaultRequest;
+import me.zhyd.oauth.utils.HttpUtils;
+import me.zhyd.oauth.utils.UrlBuilder;
+
+// TODO @timfruit:新建一个 yudao-spring-boot-starter-biz-social 包,把这个拓展拿进去哈。另外,可以思考下。
+// 1. application-local.yaml 的配置里,justauth.extend.enum-class 能否不配置,而是自动配置好
+// 2. application-local.yaml 的配置里,justauth.extend.extend.config.WECHAT_MINI_PROGRAM 有办法和 justauth.type.WECHAT_MP 持平
+/**
+ * 微信小程序登陆
+ *
+ * @author timfruit
+ * @date 2021-10-29
+ */
+public class AuthWeChatMiniProgramRequest extends AuthDefaultRequest {
+
+ public AuthWeChatMiniProgramRequest(AuthConfig config) {
+ super(config, AuthExtendSource.WECHAT_MINI_PROGRAM);
+ }
+
+ public AuthWeChatMiniProgramRequest(AuthConfig config, AuthStateCache authStateCache) {
+ super(config, AuthExtendSource.WECHAT_MINI_PROGRAM, authStateCache);
+ }
+
+ @Override
+ protected AuthToken getAccessToken(AuthCallback authCallback) {
+ // https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html
+ String response = new HttpUtils(config.getHttpConfig()).get(accessTokenUrl(authCallback.getCode()));
+ JSONObject accessTokenObject = JSONObject.parseObject(response); // TODO @timfruit:使用 JsonUtils,项目尽量避免直接使用某个 json 库
+
+ this.checkResponse(accessTokenObject);
+
+ AuthExtendToken token = new AuthExtendToken();
+ token.setMiniSessionKey(accessTokenObject.getString("session_key"));
+ token.setOpenId(accessTokenObject.getString("openid"));
+ token.setUnionId(accessTokenObject.getString("unionid"));
+ return token;
+ }
+
+ @Override
+ protected AuthUser getUserInfo(AuthToken authToken) {
+ // https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserProfile.html
+ // 如果需要用户信息,需要在小程序调用函数后传给后端
+ return AuthUser.builder()
+ .uuid(authToken.getOpenId())
+ //TODO 是使用默认值,还是有小程序获取用户信息 和 code 一起传过来
+ .nickname("")
+ .avatar("")
+ .token(authToken)
+ .source(source.toString())
+ .build();
+ }
+
+ /**
+ * 检查响应内容是否正确
+ *
+ * @param object 请求响应内容
+ */
+ private void checkResponse(JSONObject object) {
+ int code = object.getIntValue("errcode");
+ if(code != 0){ // TODO @timfruit:if (code != 0) { ,注意空格
+ throw new AuthException(object.getIntValue("errcode"), object.getString("errmsg"));
+ }
+ }
+
+ /**
+ * 返回获取 accessToken 的 url
+ *
+ * @param code 授权码
+ * @return 返回获取 accessToken 的 url
+ */
+ @Override
+ protected String accessTokenUrl(String code) {
+ return UrlBuilder.fromBaseUrl(source.accessToken())
+ .queryParam("appid", config.getClientId())
+ .queryParam("secret", config.getClientSecret())
+ .queryParam("js_code", code)
+ .queryParam("grant_type", "authorization_code")
+ .build();
+ }
+
+}
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/social/SysSocialUserDO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/social/SysSocialUserDO.java
similarity index 96%
rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/social/SysSocialUserDO.java
rename to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/social/SysSocialUserDO.java
index 7e998b8fc..d1772a132 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/dataobject/social/SysSocialUserDO.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/dataobject/social/SysSocialUserDO.java
@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.social;
+package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social;
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/social/SysSocialUserMapper.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/social/SysSocialUserMapper.java
similarity index 85%
rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/social/SysSocialUserMapper.java
rename to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/social/SysSocialUserMapper.java
index b5762ec7f..ee8db4eac 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/social/SysSocialUserMapper.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/mysql/social/SysSocialUserMapper.java
@@ -1,6 +1,6 @@
-package cn.iocoder.yudao.adminserver.modules.system.dal.mysql.social;
+package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.social;
-import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.social.SysSocialUserDO;
+import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.ibatis.annotations.Mapper;
@@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.Mapper;
import java.util.Collection;
import java.util.List;
+// TODO @timfruit:SysSocialUserCoreMapper 改名,方便区分
@Mapper
public interface SysSocialUserMapper extends BaseMapperX {
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/SysRedisKeyCoreConstants.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/SysRedisKeyCoreConstants.java
index fb4118874..5db3e9fd4 100644
--- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/SysRedisKeyCoreConstants.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/SysRedisKeyCoreConstants.java
@@ -2,6 +2,9 @@ package cn.iocoder.yudao.coreservice.modules.system.dal.redis;
import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine;
import cn.iocoder.yudao.framework.security.core.LoginUser;
+import me.zhyd.oauth.model.AuthUser;
+
+import java.time.Duration;
import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.STRING;
@@ -16,4 +19,11 @@ public interface SysRedisKeyCoreConstants {
"login_user:%s", // 参数为 sessionId
STRING, LoginUser.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC);
+ RedisKeyDefine SOCIAL_AUTH_USER = new RedisKeyDefine("社交登陆的授权用户",
+ "social_auth_user:%d:%s", // 参数为 type,code
+ STRING, AuthUser.class, Duration.ofDays(1));
+
+ RedisKeyDefine SOCIAL_AUTH_STATE = new RedisKeyDefine("社交登陆的 state",
+ "social_auth_state:%s", // 参数为 state
+ STRING, String.class, Duration.ofHours(24)); // 值为 state
}
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/redis/social/SysSocialAuthUserRedisDAO.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/social/SysSocialAuthUserRedisDAO.java
similarity index 77%
rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/redis/social/SysSocialAuthUserRedisDAO.java
rename to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/social/SysSocialAuthUserRedisDAO.java
index d5e84e62d..514281071 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/redis/social/SysSocialAuthUserRedisDAO.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/dal/redis/social/SysSocialAuthUserRedisDAO.java
@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.adminserver.modules.system.dal.redis.social;
+package cn.iocoder.yudao.coreservice.modules.system.dal.redis.social;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import me.zhyd.oauth.model.AuthCallback;
@@ -8,10 +8,11 @@ import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
-import static cn.iocoder.yudao.adminserver.modules.system.dal.redis.SysRedisKeyConstants.SOCIAL_AUTH_USER;
+import static cn.iocoder.yudao.coreservice.modules.system.dal.redis.SysRedisKeyCoreConstants.SOCIAL_AUTH_USER;
+// TODO @timfruit,这里的 AuthUser 还是保留全路径,主要想体现出来,不是自己定义的
/**
- * 社交 {@link me.zhyd.oauth.model.AuthUser} 的 RedisDAO
+ * 社交 {@link AuthUser} 的 RedisDAO
*
* @author 芋道源码
*/
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysErrorCodeConstants.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysErrorCodeConstants.java
index 3c1fc87ef..173287e52 100644
--- a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysErrorCodeConstants.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/SysErrorCodeConstants.java
@@ -14,4 +14,12 @@ public interface SysErrorCodeConstants {
ErrorCode SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS = new ErrorCode(1006000001, "模板参数({})缺失");
ErrorCode SMS_SEND_TEMPLATE_NOT_EXISTS = new ErrorCode(1006000000, "短信模板不存在");
+ // ========= 文件相关 1006001000=================
+ ErrorCode FILE_PATH_EXISTS = new ErrorCode(1006001000, "文件路径已存在");
+ ErrorCode FILE_NOT_EXISTS = new ErrorCode(1006001002, "文件不存在");
+
+ // ========== 社交模块 1006002000 ==========
+ ErrorCode SOCIAL_AUTH_FAILURE = new ErrorCode(1006002000, "社交授权失败,原因是:{}");
+ ErrorCode SOCIAL_UNBIND_NOT_SELF = new ErrorCode(1006002001, "社交解绑失败,非当前用户绑定");
+
}
diff --git a/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/social/SysSocialTypeEnum.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/social/SysSocialTypeEnum.java
new file mode 100644
index 000000000..3dba5bda0
--- /dev/null
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/enums/social/SysSocialTypeEnum.java
@@ -0,0 +1,84 @@
+package cn.iocoder.yudao.coreservice.modules.system.enums.social;
+
+import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.util.ArrayUtil;
+import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 社交平台的类型枚举
+ *
+ * @author 芋道源码
+ */
+@Getter
+@AllArgsConstructor
+public enum SysSocialTypeEnum implements IntArrayValuable {
+
+ /**
+ * Gitee
+ * 文档链接:https://gitee.com/api/v5/oauth_doc#/
+ */
+ GITEE(10, "GITEE"),
+ /**
+ * 钉钉
+ * 文档链接:https://developers.dingtalk.com/document/app/obtain-identity-credentials
+ */
+ DINGTALK(20, "DINGTALK"),
+
+ /**
+ * 企业微信
+ * 文档链接:https://xkcoding.com/2019/08/06/use-justauth-integration-wechat-enterprise.html
+ */
+ WECHAT_ENTERPRISE(30, "WECHAT_ENTERPRISE"),
+ /**
+ * 微信公众平台 - 移动端 H5
+ * 文档链接:https://www.cnblogs.com/juewuzhe/p/11905461.html
+ */
+ WECHAT_MP(31, "WECHAT_MP"),
+ /**
+ * 微信开放平台 - 网站应用 PC 端扫码授权登录
+ * 文档链接:https://justauth.wiki/guide/oauth/wechat_open/#_2-申请开发者资质认证
+ */
+ WECHAT_OPEN(32, "WECHAT_OPEN"),
+ /**
+ * 微信小程序
+ * 文档链接:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
+ */
+ WECHAT_MINI_PROGRAM(33, "WECHAT_MINI_PROGRAM"),
+ ;
+
+ public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SysSocialTypeEnum::getType).toArray();
+
+ public static final List WECHAT_ALL = ListUtil.toList(WECHAT_ENTERPRISE.type, WECHAT_MP.type, WECHAT_OPEN.type,
+ WECHAT_MINI_PROGRAM.type);
+
+ /**
+ * 类型
+ */
+ private final Integer type;
+ /**
+ * 类型的标识
+ */
+ private final String source;
+
+ @Override
+ public int[] array() {
+ return ARRAYS;
+ }
+
+ public static SysSocialTypeEnum valueOfType(Integer type) {
+ return ArrayUtil.firstMatch(o -> o.getType().equals(type), values());
+ }
+
+ public static List getRelationTypes(Integer type) {
+ if (WECHAT_ALL.contains(type)) {
+ return WECHAT_ALL;
+ }
+ return ListUtil.toList(type);
+ }
+
+}
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/social/SysSocialService.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialService.java
similarity index 78%
rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/social/SysSocialService.java
rename to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialService.java
index 44dfad63a..8a8df27d6 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/social/SysSocialService.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/SysSocialService.java
@@ -1,8 +1,9 @@
-package cn.iocoder.yudao.adminserver.modules.system.service.social;
+package cn.iocoder.yudao.coreservice.modules.system.service.social;
import cn.hutool.core.util.StrUtil;
-import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.social.SysSocialUserDO;
-import cn.iocoder.yudao.adminserver.modules.system.enums.social.SysSocialTypeEnum;
+import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO;
+import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum;
+import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.exception.ServiceException;
import me.zhyd.oauth.model.AuthUser;
@@ -14,6 +15,7 @@ import java.util.List;
*
* @author 芋道源码
*/
+// TODO @timfruit:SysSocialCoreService 改名,方便区分
public interface SysSocialService {
/**
@@ -49,7 +51,7 @@ public interface SysSocialService {
* @param unionId 社交平台的 unionId
* @return 社交用户列表
*/
- List getAllSocialUserList(Integer type, String unionId);
+ List getAllSocialUserList(Integer type, String unionId, UserTypeEnum userTypeEnum);
/**
* 获得指定用户的社交用户列表
@@ -57,7 +59,7 @@ public interface SysSocialService {
* @param userId 用户编号
* @return 社交用户列表
*/
- List getSocialUserList(Long userId);
+ List getSocialUserList(Long userId, UserTypeEnum userTypeEnum);
/**
* 绑定社交用户
@@ -66,7 +68,7 @@ public interface SysSocialService {
* @param type 社交平台的类型 {@link SysSocialTypeEnum}
* @param authUser 授权用户
*/
- void bindSocialUser(Long userId, Integer type, AuthUser authUser);
+ void bindSocialUser(Long userId, Integer type, AuthUser authUser, UserTypeEnum userTypeEnum);
/**
* 取消绑定社交用户
@@ -75,6 +77,7 @@ public interface SysSocialService {
* @param type 社交平台的类型 {@link SysSocialTypeEnum}
* @param unionId 社交平台的 unionId
*/
- void unbindSocialUser(Long userId, Integer type, String unionId);
+ void unbindSocialUser(Long userId, Integer type, String unionId,UserTypeEnum userTypeEnum);
+ // TODO @timfruit:逗号后面要有空格;缺少了 @userTypeEnum 的注释,都补充下哈。
}
diff --git a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/social/impl/SysSocialServiceImpl.java b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/impl/SysSocialServiceImpl.java
similarity index 83%
rename from yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/social/impl/SysSocialServiceImpl.java
rename to yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/impl/SysSocialServiceImpl.java
index 291015aa5..bde40c3c4 100644
--- a/yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/social/impl/SysSocialServiceImpl.java
+++ b/yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/service/social/impl/SysSocialServiceImpl.java
@@ -1,11 +1,11 @@
-package cn.iocoder.yudao.adminserver.modules.system.service.social.impl;
+package cn.iocoder.yudao.coreservice.modules.system.service.social.impl;
import cn.hutool.core.collection.CollUtil;
-import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.social.SysSocialUserDO;
-import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.social.SysSocialUserMapper;
-import cn.iocoder.yudao.adminserver.modules.system.dal.redis.social.SysSocialAuthUserRedisDAO;
-import cn.iocoder.yudao.adminserver.modules.system.enums.social.SysSocialTypeEnum;
-import cn.iocoder.yudao.adminserver.modules.system.service.social.SysSocialService;
+import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO;
+import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.social.SysSocialUserMapper;
+import cn.iocoder.yudao.coreservice.modules.system.dal.redis.social.SysSocialAuthUserRedisDAO;
+import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum;
+import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialService;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.common.util.http.HttpUtils;
@@ -19,14 +19,14 @@ import me.zhyd.oauth.request.AuthRequest;
import me.zhyd.oauth.utils.AuthStateUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
-import javax.validation.Valid;
import java.util.List;
import java.util.Objects;
-import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.SOCIAL_AUTH_FAILURE;
-import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.SOCIAL_UNBIND_NOT_SELF;
+import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.SOCIAL_AUTH_FAILURE;
+import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.SOCIAL_UNBIND_NOT_SELF;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;
@@ -36,7 +36,7 @@ import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString
* @author 芋道源码
*/
@Service
-@Valid
+@Validated
@Slf4j
public class SysSocialServiceImpl implements SysSocialService {
@@ -75,25 +75,25 @@ public class SysSocialServiceImpl implements SysSocialService {
}
@Override
- public List getAllSocialUserList(Integer type, String unionId) {
+ public List getAllSocialUserList(Integer type, String unionId,UserTypeEnum userTypeEnum) {
List types = SysSocialTypeEnum.getRelationTypes(type);
- return socialUserMapper.selectListByTypeAndUnionId(UserTypeEnum.ADMIN.getValue(), types, unionId);
+ return socialUserMapper.selectListByTypeAndUnionId(userTypeEnum.getValue(), types, unionId);
}
@Override
- public List getSocialUserList(Long userId) {
- return socialUserMapper.selectListByUserId(UserTypeEnum.ADMIN.getValue(), userId);
+ public List getSocialUserList(Long userId,UserTypeEnum userTypeEnum) {
+ return socialUserMapper.selectListByUserId(userTypeEnum.getValue(), userId);
}
@Override
@Transactional
- public void bindSocialUser(Long userId, Integer type, AuthUser authUser) {
+ public void bindSocialUser(Long userId, Integer type, AuthUser authUser, UserTypeEnum userTypeEnum) {
// 获得 unionId 对应的 SysSocialUserDO 列表
String unionId = getAuthUserUnionId(authUser);
- List socialUsers = this.getAllSocialUserList(type, unionId);
+ List socialUsers = this.getAllSocialUserList(type, unionId, userTypeEnum);
// 逻辑一:如果 userId 之前绑定过该 type 的其它账号,需要进行解绑
- this.unbindOldSocialUser(userId, type, unionId);
+ this.unbindOldSocialUser(userId, type, unionId, userTypeEnum);
// 逻辑二:如果 socialUsers 指定的 userId 改变,需要进行更新
// 例如说,一个微信 unionId 对应了多个社交账号,结果其中有个关联了新的 userId,则其它也要跟着修改
@@ -112,7 +112,7 @@ public class SysSocialServiceImpl implements SysSocialService {
.nickname(authUser.getNickname()).avatar(authUser.getAvatar()).rawUserInfo(toJsonString(authUser.getRawUserInfo()))
.build();
if (socialUser == null) {
- saveSocialUser.setUserId(userId).setUserType(UserTypeEnum.ADMIN.getValue())
+ saveSocialUser.setUserId(userId).setUserType(userTypeEnum.getValue())
.setType(type).setOpenid(authUser.getUuid()).setUnionId(unionId);
socialUserMapper.insert(saveSocialUser);
} else {
@@ -122,9 +122,9 @@ public class SysSocialServiceImpl implements SysSocialService {
}
@Override
- public void unbindSocialUser(Long userId, Integer type, String unionId) {
+ public void unbindSocialUser(Long userId, Integer type, String unionId, UserTypeEnum userTypeEnum) {
// 获得 unionId 对应的所有 SysSocialUserDO 社交用户
- List socialUsers = this.getAllSocialUserList(type, unionId);
+ List socialUsers = this.getAllSocialUserList(type, unionId, userTypeEnum);
if (CollUtil.isEmpty(socialUsers)) {
return;
}
@@ -140,10 +140,10 @@ public class SysSocialServiceImpl implements SysSocialService {
}
@VisibleForTesting
- public void unbindOldSocialUser(Long userId, Integer type, String newUnionId) {
+ public void unbindOldSocialUser(Long userId, Integer type, String newUnionId, UserTypeEnum userTypeEnum) {
List types = SysSocialTypeEnum.getRelationTypes(type);
List oldSocialUsers = socialUserMapper.selectListByTypeAndUserId(
- UserTypeEnum.ADMIN.getValue(), types, userId);
+ userTypeEnum.getValue(), types, userId);
// 如果新老的 unionId 是一致的,说明无需解绑
if (CollUtil.isEmpty(oldSocialUsers) || Objects.equals(newUnionId, oldSocialUsers.get(0).getUnionId())) {
return;
diff --git a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/BaseDbAndRedisIntegrationTest.java b/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/BaseDbAndRedisIntegrationTest.java
new file mode 100644
index 000000000..dc1580894
--- /dev/null
+++ b/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/BaseDbAndRedisIntegrationTest.java
@@ -0,0 +1,38 @@
+package cn.iocoder.yudao.coreservice;
+
+import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration;
+import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration;
+import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;
+import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration;
+import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
+import org.redisson.spring.starter.RedissonAutoConfiguration;
+import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Import;
+import org.springframework.test.context.ActiveProfiles;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbAndRedisIntegrationTest.Application.class)
+@ActiveProfiles("integration-test") // 设置使用 application-integration-test 配置文件
+public class BaseDbAndRedisIntegrationTest {
+
+ @Import({
+ // DB 配置类
+ DynamicDataSourceAutoConfiguration.class, // Dynamic Datasource 配置类
+ YudaoDataSourceAutoConfiguration.class, // 自己的 DB 配置类
+ DataSourceAutoConfiguration.class, // Spring DB 自动配置类
+ DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动配置类
+ // MyBatis 配置类
+ YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis 配置类
+ MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类
+
+ // Redis 配置类
+ RedisAutoConfiguration.class, // Spring Redis 自动配置类
+ YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类
+ RedissonAutoConfiguration.class, // Redisson 自动高配置类
+ })
+ public static class Application {
+ }
+
+}
diff --git a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/BaseDbIntegrationTest.java b/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/BaseDbIntegrationTest.java
new file mode 100644
index 000000000..c0ebe9873
--- /dev/null
+++ b/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/BaseDbIntegrationTest.java
@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.coreservice;
+
+import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration;
+import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration;
+import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration;
+import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Import;
+import org.springframework.test.context.ActiveProfiles;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbIntegrationTest.Application.class)
+@ActiveProfiles("integration-test") // 设置使用 application-integration-test 配置文件
+public class BaseDbIntegrationTest {
+
+ @Import({
+ // DB 配置类
+ DynamicDataSourceAutoConfiguration.class, // Dynamic Datasource 配置类
+ YudaoDataSourceAutoConfiguration.class, // 自己的 DB 配置类
+ DataSourceAutoConfiguration.class, // Spring DB 自动配置类
+ DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动配置类
+ // MyBatis 配置类
+ YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis 配置类
+ MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类
+ })
+ public static class Application {
+ }
+
+}
diff --git a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/BaseRedisIntegrationTest.java b/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/BaseRedisIntegrationTest.java
new file mode 100644
index 000000000..16b5e98f1
--- /dev/null
+++ b/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/BaseRedisIntegrationTest.java
@@ -0,0 +1,23 @@
+package cn.iocoder.yudao.coreservice;
+
+import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;
+import org.redisson.spring.starter.RedissonAutoConfiguration;
+import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Import;
+import org.springframework.test.context.ActiveProfiles;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseRedisIntegrationTest.Application.class)
+@ActiveProfiles("integration-test") // 设置使用 application-integration-test 配置文件
+public class BaseRedisIntegrationTest {
+
+ @Import({
+ // Redis 配置类
+ RedisAutoConfiguration.class, // Spring Redis 自动配置类
+ YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类
+ RedissonAutoConfiguration.class, // Redisson 自动高配置类
+ })
+ public static class Application {
+ }
+
+}
diff --git a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayChannelDOTest.java b/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayChannelDOTest.java
new file mode 100644
index 000000000..c0fb7d5bd
--- /dev/null
+++ b/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/dal/dataobject/merchant/PayChannelDOTest.java
@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant;
+
+import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
+import cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig;
+import org.junit.jupiter.api.Test;
+
+public class PayChannelDOTest {
+
+ @Test
+ public void testSerialization() {
+ PayChannelDO payChannelDO = new PayChannelDO();
+ // 创建配置
+ WXPayClientConfig config = new WXPayClientConfig();
+ config.setAppId("wx041349c6f39b268b");
+ config.setMchId("1545083881");
+ config.setApiVersion(WXPayClientConfig.API_VERSION_V2);
+ config.setMchKey("0alL64UDQdlCwiKZ73ib7ypaIjMns06p");
+ payChannelDO.setConfig(config);
+
+ // 序列化
+ String text = JsonUtils.toJsonString(payChannelDO);
+ System.out.println(text);
+
+ // 反序列化
+ payChannelDO = JsonUtils.parseObject(text, PayChannelDO.class);
+ System.out.println(payChannelDO.getConfig().getClass());
+ }
+
+}
diff --git a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayChannelCoreMapperTest.java b/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayChannelCoreMapperTest.java
new file mode 100644
index 000000000..b214f7b65
--- /dev/null
+++ b/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/dal/mysql/merchant/PayChannelCoreMapperTest.java
@@ -0,0 +1,56 @@
+package cn.iocoder.yudao.coreservice.modules.pay.dal.mysql.merchant;
+
+import cn.hutool.core.io.IoUtil;
+import cn.iocoder.yudao.coreservice.BaseDbAndRedisIntegrationTest;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.merchant.PayChannelDO;
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig;
+import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
+import org.junit.jupiter.api.Test;
+
+import javax.annotation.Resource;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.util.List;
+
+@Resource
+public class PayChannelCoreMapperTest extends BaseDbAndRedisIntegrationTest {
+
+ @Resource
+ private PayChannelCoreMapper payChannelCoreMapper;
+
+ /**
+ * 插入初始配置
+ */
+ @Test
+ public void testInsert() throws FileNotFoundException {
+ PayChannelDO payChannelDO = new PayChannelDO();
+ payChannelDO.setCode(PayChannelEnum.WX_PUB.getCode());
+ payChannelDO.setStatus(CommonStatusEnum.ENABLE.getStatus());
+ payChannelDO.setFeeRate(1D);
+ payChannelDO.setMerchantId(1L);
+ payChannelDO.setAppId(6L);
+ // 配置
+ WXPayClientConfig config = new WXPayClientConfig();
+ config.setAppId("wx041349c6f39b268b");
+ config.setMchId("1545083881");
+ config.setApiVersion(WXPayClientConfig.API_VERSION_V2);
+ config.setMchKey("0alL64UDQdlCwiKZ73ib7ypaIjMns06p");
+ config.setPrivateKeyContent(IoUtil.readUtf8(new FileInputStream("/Users/yunai/Downloads/wx_pay/apiclient_key.pem")));
+ config.setPrivateCertContent(IoUtil.readUtf8(new FileInputStream("/Users/yunai/Downloads/wx_pay/apiclient_cert.pem")));
+ config.setApiV3Key("joerVi8y5DJ3o4ttA0o1uH47Xz1u2Ase");
+ payChannelDO.setConfig(config);
+ // 执行插入
+ payChannelCoreMapper.insert(payChannelDO);
+ }
+
+ /**
+ * 查询所有支付配置,看看是否都是 ok 的
+ */
+ @Test
+ public void testSelectList() {
+ List payChannels = payChannelCoreMapper.selectList();
+ System.out.println(payChannels.size());
+ }
+
+}
diff --git a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayOrderCoreServiceTest.java b/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayOrderCoreServiceTest.java
new file mode 100644
index 000000000..2a5e13741
--- /dev/null
+++ b/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/service/order/PayOrderCoreServiceTest.java
@@ -0,0 +1,52 @@
+package cn.iocoder.yudao.coreservice.modules.pay.service.order;
+
+import cn.iocoder.yudao.coreservice.BaseDbIntegrationTest;
+import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.impl.PayAppCoreServiceImpl;
+import cn.iocoder.yudao.coreservice.modules.pay.service.merchant.impl.PayChannelCoreServiceImpl;
+import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderCreateReqDTO;
+import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitReqDTO;
+import cn.iocoder.yudao.coreservice.modules.pay.service.order.impl.PayOrderCoreServiceImpl;
+import cn.iocoder.yudao.framework.common.util.date.DateUtils;
+import cn.iocoder.yudao.framework.pay.config.YudaoPayAutoConfiguration;
+import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.annotation.Import;
+
+import javax.annotation.Resource;
+import java.time.Duration;
+
+@Import({PayOrderCoreServiceImpl.class, PayAppCoreServiceImpl.class,
+ PayChannelCoreServiceImpl.class, YudaoPayAutoConfiguration.class})
+public class PayOrderCoreServiceTest extends BaseDbIntegrationTest {
+
+ @Resource
+ private PayOrderCoreService payOrderCoreService;
+
+ @Test
+ public void testCreatePayOrder() {
+ // 构造请求
+ PayOrderCreateReqDTO reqDTO = new PayOrderCreateReqDTO();
+ reqDTO.setAppId(6L);
+ reqDTO.setUserIp("127.0.0.1");
+ reqDTO.setMerchantOrderId(String.valueOf(System.currentTimeMillis()));
+ reqDTO.setSubject("标题");
+ reqDTO.setBody("内容");
+ reqDTO.setAmount(100);
+ reqDTO.setExpireTime(DateUtils.addTime(Duration.ofDays(1)));
+ // 发起请求
+ payOrderCoreService.createPayOrder(reqDTO);
+ }
+
+ @Test
+ public void testSubmitPayOrder() {
+ // 构造请求
+ PayOrderSubmitReqDTO reqDTO = new PayOrderSubmitReqDTO();
+ reqDTO.setId(10L);
+ reqDTO.setAppId(6L);
+ reqDTO.setChannelCode(PayChannelEnum.WX_PUB.getCode());
+ reqDTO.setUserIp("127.0.0.1");
+ // 发起请求
+ payOrderCoreService.submitPayOrder(reqDTO);
+ }
+
+}
diff --git a/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/service/package-info.java b/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/service/package-info.java
new file mode 100644
index 000000000..13b4863a5
--- /dev/null
+++ b/yudao-core-service/src/test-integration/java/cn/iocoder/yudao/coreservice/modules/pay/service/package-info.java
@@ -0,0 +1 @@
+package cn.iocoder.yudao.coreservice.modules.pay.service;
diff --git a/yudao-core-service/src/test-integration/resources/application-integration-test.yaml b/yudao-core-service/src/test-integration/resources/application-integration-test.yaml
new file mode 100644
index 000000000..06353ae11
--- /dev/null
+++ b/yudao-core-service/src/test-integration/resources/application-integration-test.yaml
@@ -0,0 +1,92 @@
+spring:
+ main:
+ lazy-initialization: true # 开启懒加载,加快速度
+ banner-mode: off # 单元测试,禁用 Banner
+
+--- #################### 数据库相关配置 ####################
+
+spring:
+ # 数据源配置项
+ autoconfigure:
+ exclude:
+ - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
+ datasource:
+ druid: # Druid 【监控】相关的全局配置
+ web-stat-filter:
+ enabled: true
+ dynamic: # 多数据源配置
+ druid: # Druid 【连接池】相关的全局配置
+ initial-size: 5 # 初始连接数
+ min-idle: 10 # 最小连接池数量
+ max-active: 20 # 最大连接池数量
+ max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
+ time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
+ min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
+ max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
+ validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
+ test-while-idle: true
+ test-on-borrow: false
+ test-on-return: false
+ primary: master
+ datasource:
+ master:
+ name: ruoyi-vue-pro
+ url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
+ driver-class-name: com.mysql.jdbc.Driver
+ username: root
+ password: 123456
+ slave: # 模拟从库,可根据自己需要修改
+ name: ruoyi-vue-pro
+ url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
+ driver-class-name: com.mysql.jdbc.Driver
+ username: root
+ password: 123456
+
+ # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+ redis:
+ host: 127.0.0.1 # 地址
+ port: 6379 # 端口
+ database: 0 # 数据库索引
+
+mybatis:
+ lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试
+mybatis-plus:
+ configuration:
+ map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印日志
+ global-config:
+ db-config:
+ id-type: AUTO # 自增 ID
+ logic-delete-value: 1 # 逻辑已删除值(默认为 1)
+ logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
+ mapper-locations: classpath*:mapper/*.xml
+ type-aliases-package: ${yudao.core-service.base-package}.modules.*.dal.dataobject
+
+--- #################### 定时任务相关配置 ####################
+
+--- #################### 配置中心相关配置 ####################
+
+--- #################### 服务保障相关配置 ####################
+
+# Lock4j 配置项(单元测试,禁用 Lock4j)
+
+# Resilience4j 配置项
+resilience4j:
+ ratelimiter:
+ instances:
+ backendA:
+ limit-for-period: 1 # 每个周期内,允许的请求数。默认为 50
+ limit-refresh-period: 60s # 每个周期的时长,单位:微秒。默认为 500
+ timeout-duration: 1s # 被限流时,阻塞等待的时长,单位:微秒。默认为 5s
+ register-health-indicator: true # 是否注册到健康监测
+
+--- #################### 监控相关配置 ####################
+
+--- #################### 芋道相关配置 ####################
+
+yudao:
+ info:
+ version: 1.0.0
+ base-package: cn.iocoder.yudao.adminserver
+ core-service:
+ base-package: cn.iocoder.yudao.coreservice
diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreServiceTest.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreServiceTest.java
new file mode 100644
index 000000000..ce3d69395
--- /dev/null
+++ b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/file/InfFileCoreServiceTest.java
@@ -0,0 +1,87 @@
+package cn.iocoder.yudao.coreservice.modules.infra.service.file;
+
+import cn.hutool.core.io.resource.ResourceUtil;
+import cn.iocoder.yudao.coreservice.BaseDbUnitTest;
+import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO;
+import cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.file.InfFileCoreMapper;
+import cn.iocoder.yudao.coreservice.modules.infra.framework.file.config.FileProperties;
+import cn.iocoder.yudao.coreservice.modules.infra.service.file.impl.InfFileCoreServiceImpl;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.context.annotation.Import;
+
+import javax.annotation.Resource;
+
+import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.FILE_NOT_EXISTS;
+import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.FILE_PATH_EXISTS;
+import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
+import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
+import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString;
+import static org.junit.jupiter.api.Assertions.*;
+
+@Import({InfFileCoreServiceImpl.class, FileProperties.class})
+public class InfFileCoreServiceTest extends BaseDbUnitTest {
+
+ @Resource
+ private InfFileCoreService fileCoreService;
+
+ @MockBean
+ private FileProperties fileProperties;
+
+ @Resource
+ private InfFileCoreMapper fileMapper;
+
+ @Test
+ public void testCreateFile_success() {
+ // 准备参数
+ String path = randomString();
+ byte[] content = ResourceUtil.readBytes("file/erweima.jpg");
+
+ // 调用
+ String url = fileCoreService.createFile(path, content);
+ // 断言
+ assertEquals(fileProperties.getBasePath() + path, url);
+ // 校验数据
+ InfFileDO file = fileMapper.selectById(path);
+ assertEquals(path, file.getId());
+ assertEquals("jpg", file.getType());
+ assertArrayEquals(content, file.getContent());
+ }
+
+ @Test
+ public void testCreateFile_exists() {
+ // mock 数据
+ InfFileDO dbFile = randomPojo(InfFileDO.class);
+ fileMapper.insert(dbFile);
+ // 准备参数
+ String path = dbFile.getId(); // 模拟已存在
+ byte[] content = ResourceUtil.readBytes("file/erweima.jpg");
+
+ // 调用,并断言异常
+ assertServiceException(() -> fileCoreService.createFile(path, content), FILE_PATH_EXISTS);
+ }
+
+ @Test
+ public void testDeleteFile_success() {
+ // mock 数据
+ InfFileDO dbFile = randomPojo(InfFileDO.class);
+ fileMapper.insert(dbFile);// @Sql: 先插入出一条存在的数据
+ // 准备参数
+ String id = dbFile.getId();
+
+ // 调用
+ fileCoreService.deleteFile(id);
+ // 校验数据不存在了
+ assertNull(fileMapper.selectById(id));
+ }
+
+ @Test
+ public void testDeleteFile_notExists() {
+ // 准备参数
+ String id = randomString();
+
+ // 调用, 并断言异常
+ assertServiceException(() -> fileCoreService.deleteFile(id), FILE_NOT_EXISTS);
+ }
+
+}
diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiAccessLogCoreServiceTest.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiAccessLogCoreServiceTest.java
index b634cc3c2..c7b2620eb 100644
--- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiAccessLogCoreServiceTest.java
+++ b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiAccessLogCoreServiceTest.java
@@ -5,14 +5,13 @@ import cn.iocoder.yudao.coreservice.BaseDbUnitTest;
import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiAccessLogDO;
import cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.logger.InfApiAccessLogCoreMapper;
import cn.iocoder.yudao.coreservice.modules.infra.service.logger.impl.InfApiAccessLogCoreServiceImpl;
-import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateDTO;
+import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateReqDTO;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.test.core.util.RandomUtils;
import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.Import;
import javax.annotation.Resource;
-import java.util.concurrent.Future;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -32,7 +31,7 @@ public class InfApiAccessLogCoreServiceTest extends BaseDbUnitTest {
@Test
public void testCreateApiAccessLogAsync() {
// 准备参数
- ApiAccessLogCreateDTO createDTO = RandomUtils.randomPojo(ApiAccessLogCreateDTO.class,
+ ApiAccessLogCreateReqDTO createDTO = RandomUtils.randomPojo(ApiAccessLogCreateReqDTO.class,
dto -> dto.setUserType(RandomUtil.randomEle(UserTypeEnum.values()).getValue()));
// 调用
diff --git a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiErrorLogCoreServiceTest.java b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiErrorLogCoreServiceTest.java
index 5ca6449a1..6379ab32a 100644
--- a/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiErrorLogCoreServiceTest.java
+++ b/yudao-core-service/src/test/java/cn/iocoder/yudao/coreservice/modules/infra/service/logger/InfApiErrorLogCoreServiceTest.java
@@ -5,7 +5,7 @@ import cn.iocoder.yudao.coreservice.BaseDbUnitTest;
import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.logger.InfApiErrorLogDO;
import cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.logger.InfApiErrorLogCoreMapper;
import cn.iocoder.yudao.coreservice.modules.infra.service.logger.impl.InfApiErrorLogCoreServiceImpl;
-import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateDTO;
+import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateReqDTO;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.test.core.util.RandomUtils;
import org.junit.jupiter.api.Test;
@@ -31,7 +31,7 @@ public class InfApiErrorLogCoreServiceTest extends BaseDbUnitTest {
@Test
public void testCreateApiErrorLogAsync() {
// 准备参数
- ApiErrorLogCreateDTO createDTO = RandomUtils.randomPojo(ApiErrorLogCreateDTO.class,
+ ApiErrorLogCreateReqDTO createDTO = RandomUtils.randomPojo(ApiErrorLogCreateReqDTO.class,
dto -> dto.setUserType(RandomUtil.randomEle(UserTypeEnum.values()).getValue()));
// 调用
diff --git a/yudao-admin-server/src/test/resources/file/erweima.jpg b/yudao-core-service/src/test/resources/file/erweima.jpg
similarity index 100%
rename from yudao-admin-server/src/test/resources/file/erweima.jpg
rename to yudao-core-service/src/test/resources/file/erweima.jpg
diff --git a/yudao-core-service/src/test/resources/sql/clean.sql b/yudao-core-service/src/test/resources/sql/clean.sql
index 855ccf7eb..e92bf3e43 100644
--- a/yudao-core-service/src/test/resources/sql/clean.sql
+++ b/yudao-core-service/src/test/resources/sql/clean.sql
@@ -1,5 +1,6 @@
-- inf 开头的 DB
DELETE FROM "inf_api_access_log";
+DELETE FROM "inf_file";
DELETE FROM "inf_api_error_log";
-- sys 开头的 DB
diff --git a/yudao-core-service/src/test/resources/sql/create_tables.sql b/yudao-core-service/src/test/resources/sql/create_tables.sql
index 2076e0c5d..d78e9e7fe 100644
--- a/yudao-core-service/src/test/resources/sql/create_tables.sql
+++ b/yudao-core-service/src/test/resources/sql/create_tables.sql
@@ -1,5 +1,17 @@
-- inf 开头的 DB
+CREATE TABLE IF NOT EXISTS "inf_file" (
+ "id" varchar(188) NOT NULL,
+ "type" varchar(63) DEFAULT NULL,
+ "content" blob NOT NULL,
+ "creator" varchar(64) DEFAULT '',
+ "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updater" varchar(64) DEFAULT '',
+ "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "deleted" bit NOT NULL DEFAULT FALSE,
+ PRIMARY KEY ("id")
+) COMMENT '文件表';
+
-- sys 开头的 DB
CREATE TABLE IF NOT EXISTS `sys_user_session` (
diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml
index 6beafe040..cd5efec94 100644
--- a/yudao-dependencies/pom.xml
+++ b/yudao-dependencies/pom.xml
@@ -14,7 +14,7 @@
https://github.com/YunaiV/ruoyi-vue-pro
- 1.1.0-snapshot
+ 1.2.0-snapshot
2.4.5
@@ -52,6 +52,7 @@
4.5.25
2.1.0
1.2.7
+ 1.4.0
@@ -92,6 +93,16 @@
yudao-spring-boot-starter-biz-sms
${revision}
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-biz-pay
+ ${revision}
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-biz-weixin
+ ${revision}
+
@@ -399,7 +410,6 @@
yunpian-java-sdk
${yunpian-java-sdk.version}
-
com.aliyun
aliyun-java-sdk-core
@@ -422,6 +432,13 @@
+
+ com.xkcoding.justauth
+ justauth-spring-boot-starter
+ ${justauth.version}
+
+
+
diff --git a/yudao-framework/pom.xml b/yudao-framework/pom.xml
index e9ff025f5..136ac3073 100644
--- a/yudao-framework/pom.xml
+++ b/yudao-framework/pom.xml
@@ -29,6 +29,9 @@
yudao-spring-boot-starter-biz-dict
yudao-spring-boot-starter-biz-sms
yudao-spring-boot-starter-activiti
+ yudao-spring-boot-starter-biz-pay
+ yudao-spring-boot-starter-biz-weixin
+ yudao-spring-boot-starter-extension
yudao-framework
diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java
index 783747087..d508c6ced 100644
--- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java
+++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java
@@ -6,6 +6,8 @@ import java.util.Date;
/**
* 时间工具类
+ *
+ * @author 芋道源码
*/
public class DateUtils {
@@ -14,6 +16,11 @@ public class DateUtils {
*/
public static final String TIME_ZONE_DEFAULT = "GMT+8";
+ /**
+ * 秒转换成毫秒
+ */
+ public static final long SECOND_MILLIS = 1000;
+
public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss";
public static Date addTime(Duration duration) {
@@ -74,4 +81,43 @@ public class DateUtils {
return a.compareTo(b) > 0 ? a : b;
}
+ public static boolean beforeNow(Date date) {
+ return date.getTime() < System.currentTimeMillis();
+ }
+
+ public static boolean afterNow(Date date) {
+ return date.getTime() >= System.currentTimeMillis();
+ }
+
+ /**
+ * 计算当期时间相差的日期
+ *
+ * @param field 日历字段.
eg:Calendar.MONTH,Calendar.DAY_OF_MONTH,
Calendar.HOUR_OF_DAY等.
+ * @param amount 相差的数值
+ * @return 计算后的日志
+ */
+ public static Date addDate(int field, int amount) {
+ return addDate(null, field, amount);
+ }
+
+ /**
+ * 计算当期时间相差的日期
+ *
+ * @param date 设置时间
+ * @param field 日历字段 例如说,{@link Calendar#DAY_OF_MONTH} 等
+ * @param amount 相差的数值
+ * @return 计算后的日志
+ */
+ public static Date addDate(Date date, int field, int amount) {
+ if (amount == 0) {
+ return date;
+ }
+ Calendar c = Calendar.getInstance();
+ if (date != null) {
+ c.setTime(date);
+ }
+ c.add(field, amount);
+ return c.getTime();
+ }
+
}
diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/FileUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/FileUtils.java
new file mode 100644
index 000000000..56baaed95
--- /dev/null
+++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/FileUtils.java
@@ -0,0 +1,34 @@
+package cn.iocoder.yudao.framework.common.util.io;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.IdUtil;
+import lombok.SneakyThrows;
+
+import java.io.File;
+
+/**
+ * 文件工具类
+ *
+ * @author 芋道源码
+ */
+public class FileUtils {
+
+ /**
+ * 创建临时文件
+ * 该文件会在 JVM 退出时,进行删除
+ *
+ * @param data 文件内容
+ * @return 文件
+ */
+ @SneakyThrows
+ public static File createTempFile(String data) {
+ // 创建文件,通过 UUID 保证唯一
+ File file = File.createTempFile(IdUtil.simpleUUID(), null);
+ // 标记 JVM 退出时,自动删除
+ file.deleteOnExit();
+ // 写入内容
+ FileUtil.writeUtf8String(data, file);
+ return file;
+ }
+
+}
diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/object/ObjectUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/object/ObjectUtils.java
index 29a8d38b8..17a1ef843 100644
--- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/object/ObjectUtils.java
+++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/object/ObjectUtils.java
@@ -29,4 +29,13 @@ public class ObjectUtils {
return obj1.compareTo(obj2) > 0 ? obj1 : obj2;
}
+ public static T defaultIfNull(T... array) {
+ for (T item : array) {
+ if (item != null) {
+ return item;
+ }
+ }
+ return null;
+ }
+
}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/pom.xml b/yudao-framework/yudao-spring-boot-starter-biz-pay/pom.xml
new file mode 100644
index 000000000..217aac56d
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/pom.xml
@@ -0,0 +1,76 @@
+
+
+
+ yudao-framework
+ cn.iocoder.boot
+ ${revision}
+
+ 4.0.0
+
+ yudao-spring-boot-starter-biz-pay
+ ${artifactId}
+ 支付拓展,接入国内多个支付渠道
+ 1. 支付宝,基于官方 SDK 接入
+ 2. 微信支付,基于 weixin-java-pay 接入
+
+
+
+
+ cn.iocoder.boot
+ yudao-common
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+
+
+ jakarta.validation
+ jakarta.validation-api
+
+
+ org.hibernate.validator
+ hibernate-validator
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+
+
+ com.alipay.sdk
+ alipay-sdk-java
+ 4.17.9.ALL
+
+
+ com.github.binarywang
+ weixin-java-pay
+ 4.1.9.B
+
+
+
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-test
+ test
+
+
+
+
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/config/PayProperties.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/config/PayProperties.java
new file mode 100644
index 000000000..c56868477
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/config/PayProperties.java
@@ -0,0 +1,32 @@
+package cn.iocoder.yudao.framework.pay.config;
+
+import lombok.Data;
+import org.hibernate.validator.constraints.URL;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.validation.annotation.Validated;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.time.Duration;
+
+@ConfigurationProperties(prefix = "yudao.pay")
+@Validated
+@Data
+public class PayProperties {
+
+ /**
+ * 支付回调地址
+ * 注意,支付渠道统一回调到 payNotifyUrl 地址,由支付模块统一处理;然后,自己的支付模块,在回调 PayAppDO.payNotifyUrl 地址
+ */
+ @NotEmpty(message = "支付回调地址不能为空")
+ @URL(message = "支付回调地址的格式必须是 URL")
+ private String payNotifyUrl;
+ /**
+ * 退款回调地址
+ * 注意点,同 {@link #payNotifyUrl} 属性
+ */
+ @NotNull(message = "短信发送频率不能为空")
+ @URL(message = "退款回调地址的格式必须是 URL")
+ private String refundNotifyUrl;
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/config/YudaoPayAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/config/YudaoPayAutoConfiguration.java
new file mode 100644
index 000000000..d49c1c2b2
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/config/YudaoPayAutoConfiguration.java
@@ -0,0 +1,22 @@
+package cn.iocoder.yudao.framework.pay.config;
+
+import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory;
+import cn.iocoder.yudao.framework.pay.core.client.impl.PayClientFactoryImpl;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 支付配置类
+ *
+ * @author 芋道源码
+ */
+@EnableConfigurationProperties(PayProperties.class)
+public class YudaoPayAutoConfiguration {
+
+ @Bean
+ public PayClientFactory payClientFactory() {
+ return new PayClientFactoryImpl();
+ }
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/AbstractPayCodeMapping.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/AbstractPayCodeMapping.java
new file mode 100644
index 000000000..88be97f00
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/AbstractPayCodeMapping.java
@@ -0,0 +1,33 @@
+package cn.iocoder.yudao.framework.pay.core.client;
+
+import cn.iocoder.yudao.framework.common.exception.ErrorCode;
+import cn.iocoder.yudao.framework.pay.core.enums.PayFrameworkErrorCodeConstants;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 将 API 的错误码,转换为通用的错误码
+ *
+ * @see PayCommonResult
+ * @see PayFrameworkErrorCodeConstants
+ *
+ * @author 芋道源码
+ */
+@Slf4j
+public abstract class AbstractPayCodeMapping {
+
+ public final ErrorCode apply(String apiCode, String apiMsg) {
+ if (apiCode == null) {
+ log.error("[apply][API 错误码为空,请排查]");
+ return PayFrameworkErrorCodeConstants.EXCEPTION;
+ }
+ ErrorCode errorCode = this.apply0(apiCode, apiMsg);
+ if (errorCode == null) {
+ log.error("[apply][API 错误码({}) 错误提示({}) 无法匹配]", apiCode, apiMsg);
+ return PayFrameworkErrorCodeConstants.PAY_UNKNOWN;
+ }
+ return errorCode;
+ }
+
+ protected abstract ErrorCode apply0(String apiCode, String apiMsg);
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayClient.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayClient.java
new file mode 100644
index 000000000..96a5233fc
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayClient.java
@@ -0,0 +1,37 @@
+package cn.iocoder.yudao.framework.pay.core.client;
+
+import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderNotifyRespDTO;
+import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO;
+
+/**
+ * 支付客户端,用于对接各支付渠道的 SDK,实现发起支付、退款等功能
+ *
+ * @author 芋道源码
+ */
+public interface PayClient {
+
+ /**
+ * 获得渠道编号
+ *
+ * @return 渠道编号
+ */
+ Long getId();
+
+ /**
+ * 调用支付渠道,统一下单
+ *
+ * @param reqDTO 下单信息
+ * @return 各支付渠道的返回结果
+ */
+ PayCommonResult> unifiedOrder(PayOrderUnifiedReqDTO reqDTO);
+
+ /**
+ * 解析支付单的通知结果
+ *
+ * @param data 通知结果
+ * @return 解析结果
+ * @throws Exception 解析失败,抛出异常
+ */
+ PayOrderNotifyRespDTO parseOrderNotify(String data) throws Exception;
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayClientConfig.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayClientConfig.java
new file mode 100644
index 000000000..8d66aedbf
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayClientConfig.java
@@ -0,0 +1,16 @@
+package cn.iocoder.yudao.framework.pay.core.client;
+
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+
+/**
+ * 支付客户端的配置,本质是支付渠道的配置
+ * 每个不同的渠道,需要不同的配置,通过子类来定义
+ *
+ * @author 芋道源码
+ */
+@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS)
+// @JsonTypeInfo 注解的作用,Jackson 多态
+// 1. 序列化到时数据库时,增加 @class 属性。
+// 2. 反序列化到内存对象时,通过 @class 属性,可以创建出正确的类型
+public interface PayClientConfig {
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayClientFactory.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayClientFactory.java
new file mode 100644
index 000000000..f6d0ca6b5
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayClientFactory.java
@@ -0,0 +1,28 @@
+package cn.iocoder.yudao.framework.pay.core.client;
+
+/**
+ * 支付客户端的工厂接口
+ *
+ * @author 芋道源码
+ */
+public interface PayClientFactory {
+
+ /**
+ * 获得支付客户端
+ *
+ * @param channelId 渠道编号
+ * @return 支付客户端
+ */
+ PayClient getPayClient(Long channelId);
+
+ /**
+ * 创建支付客户端
+ *
+ * @param channelId 渠道编号
+ * @param channelCode 渠道编码
+ * @param config 支付配置
+ */
+ void createOrUpdatePayClient(Long channelId, String channelCode,
+ Config config);
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayCommonResult.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayCommonResult.java
new file mode 100644
index 000000000..8837a0ac9
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayCommonResult.java
@@ -0,0 +1,57 @@
+package cn.iocoder.yudao.framework.pay.core.client;
+
+import cn.hutool.core.exceptions.ExceptionUtil;
+import cn.hutool.core.lang.Assert;
+import cn.iocoder.yudao.framework.common.exception.ErrorCode;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.pay.core.enums.PayFrameworkErrorCodeConstants;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+/**
+ * 支付的 CommonResult 拓展类
+ *
+ * 考虑到不同的平台,返回的 code 和 msg 是不同的,所以统一额外返回 {@link #apiCode} 和 {@link #apiMsg} 字段
+ *
+ * @author 芋道源码
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class PayCommonResult extends CommonResult {
+
+ /**
+ * API 返回错误码
+ *
+ * 由于第三方的错误码可能是字符串,所以使用 String 类型
+ */
+ private String apiCode;
+ /**
+ * API 返回提示
+ */
+ private String apiMsg;
+
+ private PayCommonResult() {
+ }
+
+ public static PayCommonResult build(String apiCode, String apiMsg, T data, AbstractPayCodeMapping codeMapping) {
+ Assert.notNull(codeMapping, "参数 codeMapping 不能为空");
+ PayCommonResult result = new PayCommonResult().setApiCode(apiCode).setApiMsg(apiMsg);
+ result.setData(data);
+ // 翻译错误码
+ if (codeMapping != null) {
+ ErrorCode errorCode = codeMapping.apply(apiCode, apiMsg);
+ result.setCode(errorCode.getCode()).setMsg(errorCode.getMsg());
+ }
+ return result;
+ }
+
+ public static PayCommonResult error(Throwable ex) {
+ PayCommonResult result = new PayCommonResult<>();
+ result.setCode(PayFrameworkErrorCodeConstants.EXCEPTION.getCode());
+ result.setMsg(ExceptionUtil.getRootCauseMessage(ex));
+ return result;
+ }
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/dto/PayOrderNotifyRespDTO.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/dto/PayOrderNotifyRespDTO.java
new file mode 100644
index 000000000..e9e3fb457
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/dto/PayOrderNotifyRespDTO.java
@@ -0,0 +1,45 @@
+package cn.iocoder.yudao.framework.pay.core.client.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * 支付通知 Response DTO
+ *
+ * @author 芋道源码
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayOrderNotifyRespDTO {
+
+ /**
+ * 支付订单号(支付模块的)
+ */
+ private String orderExtensionNo;
+ /**
+ * 支付渠道编号
+ */
+ private String channelOrderNo;
+ /**
+ * 支付渠道用户编号
+ */
+ private String channelUserId;
+ /**
+ * 支付成功时间
+ */
+ private Date successTime;
+
+ /**
+ * 通知的原始数据
+ *
+ * 主要用于持久化,方便后续修复数据,或者排错
+ */
+ private String data;
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/dto/PayOrderUnifiedReqDTO.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/dto/PayOrderUnifiedReqDTO.java
new file mode 100644
index 000000000..299f0b3f1
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/dto/PayOrderUnifiedReqDTO.java
@@ -0,0 +1,76 @@
+package cn.iocoder.yudao.framework.pay.core.client.dto;
+
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+import org.hibernate.validator.constraints.URL;
+
+import javax.validation.constraints.DecimalMin;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 统一下单 Request DTO
+ *
+ * @author 芋道源码
+ */
+@Data
+public class PayOrderUnifiedReqDTO {
+
+ /**
+ * 用户 IP
+ */
+ @NotEmpty(message = "用户 IP 不能为空")
+ private String userIp;
+
+ // ========== 商户相关字段 ==========
+
+ /**
+ * 商户订单编号
+ */
+ @NotEmpty(message = "商户订单编号不能为空")
+ private String merchantOrderId;
+ /**
+ * 商品标题
+ */
+ @NotEmpty(message = "商品标题不能为空")
+ @Length(max = 32, message = "商品标题不能超过 32")
+ private String subject;
+ /**
+ * 商品描述信息
+ */
+ @NotEmpty(message = "商品描述信息不能为空")
+ @Length(max = 128, message = "商品描述信息长度不能超过128")
+ private String body;
+ /**
+ * 支付结果的回调地址
+ */
+ @NotEmpty(message = "支付结果的回调地址不能为空")
+ @URL(message = "支付结果的回调地址必须是 URL 格式")
+ private String notifyUrl;
+
+ // ========== 订单相关字段 ==========
+
+ /**
+ * 支付金额,单位:分
+ */
+ @NotNull(message = "支付金额不能为空")
+ @DecimalMin(value = "0", inclusive = false, message = "支付金额必须大于零")
+ private Long amount;
+
+ /**
+ * 支付过期时间
+ */
+ @NotNull(message = "支付过期时间不能为空")
+ private Date expireTime;
+
+ // ========== 拓展参数 ==========
+ /**
+ * 支付渠道的额外参数
+ *
+ * 例如说,微信公众号需要传递 openid 参数
+ */
+ private Map channelExtras;
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/AbstractPayClient.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/AbstractPayClient.java
new file mode 100644
index 000000000..1e228b252
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/AbstractPayClient.java
@@ -0,0 +1,97 @@
+package cn.iocoder.yudao.framework.pay.core.client.impl;
+
+import cn.hutool.extra.validation.ValidationUtil;
+import cn.iocoder.yudao.framework.pay.core.client.AbstractPayCodeMapping;
+import cn.iocoder.yudao.framework.pay.core.client.PayClient;
+import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig;
+import cn.iocoder.yudao.framework.pay.core.client.PayCommonResult;
+import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO;
+import lombok.extern.slf4j.Slf4j;
+
+import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;
+
+/**
+ * 支付客户端的抽象类,提供模板方法,减少子类的冗余代码
+ *
+ * @author 芋道源码
+ */
+@Slf4j
+public abstract class AbstractPayClient implements PayClient {
+
+ /**
+ * 渠道编号
+ */
+ private final Long channelId;
+ /**
+ * 渠道编码
+ */
+ private final String channelCode;
+ /**
+ * 错误码枚举类
+ */
+ protected AbstractPayCodeMapping codeMapping;
+ /**
+ * 支付配置
+ */
+ protected Config config;
+
+ protected Double calculateAmount(Long amount) {
+ return amount / 100.0;
+ }
+
+ public AbstractPayClient(Long channelId, String channelCode, Config config, AbstractPayCodeMapping codeMapping) {
+ this.channelId = channelId;
+ this.channelCode = channelCode;
+ this.codeMapping = codeMapping;
+ this.config = config;
+ }
+
+ /**
+ * 初始化
+ */
+ public final void init() {
+ doInit();
+ log.info("[init][配置({}) 初始化完成]", config);
+ }
+
+ /**
+ * 自定义初始化
+ */
+ protected abstract void doInit();
+
+ public final void refresh(Config config) {
+ // 判断是否更新
+ if (config.equals(this.config)) {
+ return;
+ }
+ log.info("[refresh][配置({})发生变化,重新初始化]", config);
+ this.config = config;
+ // 初始化
+ this.init();
+ }
+
+ @Override
+ public Long getId() {
+ return channelId;
+ }
+
+ @Override
+ public final PayCommonResult> unifiedOrder(PayOrderUnifiedReqDTO reqDTO) {
+ ValidationUtil.validate(reqDTO);
+ // 执行短信发送
+ PayCommonResult> result;
+ try {
+ result = doUnifiedOrder(reqDTO);
+ } catch (Throwable ex) {
+ // 打印异常日志
+ log.error("[unifiedOrder][request({}) 发起支付失败]", toJsonString(reqDTO), ex);
+ // 封装返回
+ return PayCommonResult.error(ex);
+ }
+ return result;
+ }
+
+ protected abstract PayCommonResult> doUnifiedOrder(PayOrderUnifiedReqDTO reqDTO)
+ throws Throwable;
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/PayClientFactoryImpl.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/PayClientFactoryImpl.java
new file mode 100644
index 000000000..16cc49ed2
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/PayClientFactoryImpl.java
@@ -0,0 +1,71 @@
+package cn.iocoder.yudao.framework.pay.core.client.impl;
+
+import cn.hutool.core.lang.Assert;
+import cn.iocoder.yudao.framework.pay.core.client.PayClient;
+import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig;
+import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory;
+import cn.iocoder.yudao.framework.pay.core.client.impl.alipay.AlipayPayClientConfig;
+import cn.iocoder.yudao.framework.pay.core.client.impl.alipay.AlipayQrPayClient;
+import cn.iocoder.yudao.framework.pay.core.client.impl.alipay.AlipayWapPayClient;
+import cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig;
+import cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPubPayClient;
+import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * 支付客户端的工厂实现类
+ *
+ * @author 芋道源码
+ */
+@Slf4j
+public class PayClientFactoryImpl implements PayClientFactory {
+
+ /**
+ * 支付客户端 Map
+ * key:渠道编号
+ */
+ private final ConcurrentMap> channelIdClients = new ConcurrentHashMap<>();
+
+ @Override
+ public PayClient getPayClient(Long channelId) {
+ AbstractPayClient> client = channelIdClients.get(channelId);
+ if (client == null) {
+ log.error("[getPayClient][渠道编号({}) 找不到客户端]", channelId);
+ }
+ return client;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public void createOrUpdatePayClient(Long channelId, String channelCode,
+ Config config) {
+ AbstractPayClient client = (AbstractPayClient) channelIdClients.get(channelId);
+ if (client == null) {
+ client = this.createPayClient(channelId, channelCode, config);
+ client.init();
+ channelIdClients.put(client.getId(), client);
+ } else {
+ client.refresh(config);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private AbstractPayClient createPayClient(
+ Long channelId, String channelCode, Config config) {
+ PayChannelEnum channelEnum = PayChannelEnum.getByCode(channelCode);
+ Assert.notNull(channelEnum, String.format("支付渠道(%s) 为空", channelEnum));
+ // 创建客户端
+ switch (channelEnum) {
+ case WX_PUB: return (AbstractPayClient) new WXPubPayClient(channelId, (WXPayClientConfig) config);
+ case ALIPAY_WAP: return (AbstractPayClient) new AlipayWapPayClient(channelId, (AlipayPayClientConfig) config);
+ case ALIPAY_QR: return (AbstractPayClient) new AlipayQrPayClient(channelId, (AlipayPayClientConfig) config);
+ }
+ // 创建失败,错误日志 + 抛出异常
+ log.error("[createSmsClient][配置({}) 找不到合适的客户端实现]", config);
+ throw new IllegalArgumentException(String.format("配置(%s) 找不到合适的客户端实现", config));
+ }
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayPayClientConfig.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayPayClientConfig.java
new file mode 100644
index 000000000..f5106ecaa
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayPayClientConfig.java
@@ -0,0 +1,89 @@
+package cn.iocoder.yudao.framework.pay.core.client.impl.alipay;
+
+import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig;
+import lombok.Data;
+
+// TODO 芋艿:参数校验
+/**
+ * 支付宝的 PayClientConfig 实现类
+ * 属性主要来自 {@link com.alipay.api.AlipayConfig} 的必要属性
+ *
+ * @author 芋道源码
+ */
+@Data
+public class AlipayPayClientConfig implements PayClientConfig {
+
+ /**
+ * 网关地址 - 线上
+ */
+ public static final String SERVER_URL_PROD = "https://openapi.alipay.com/gateway.do";
+ /**
+ * 网关地址 - 沙箱
+ */
+ public static final String SERVER_URL_SANDBOX = "https://openapi.alipaydev.com/gateway.do";
+
+ /**
+ * 公钥类型 - 公钥模式
+ */
+ private static final Integer MODE_PUBLIC_KEY = 1;
+ /**
+ * 公钥类型 - 证书模式
+ */
+ private static final Integer MODE_CERTIFICATE = 2;
+
+ /**
+ * 签名算法类型 - RSA
+ */
+ public static final String SIGN_TYPE_DEFAULT = "RSA2";
+
+ /**
+ * 网关地址
+ * 1. {@link #SERVER_URL_PROD}
+ * 2. {@link #SERVER_URL_SANDBOX}
+ */
+ private String serverUrl;
+
+ /**
+ * 开放平台上创建的应用的 ID
+ */
+ private String appId;
+
+ /**
+ * 签名算法类型,推荐:RSA2
+ *
+ * {@link #SIGN_TYPE_DEFAULT}
+ */
+ private String signType;
+
+ /**
+ * 公钥类型
+ * 1. {@link #MODE_PUBLIC_KEY} 情况,privateKey + alipayPublicKey
+ * 2. {@link #MODE_CERTIFICATE} 情况,appCertContent + alipayPublicCertContent + rootCertContent
+ */
+ private Integer mode;
+
+ // ========== 公钥模式 ==========
+ /**
+ * 商户私钥
+ */
+ private String privateKey;
+ /**
+ * 支付宝公钥字符串
+ */
+ private String alipayPublicKey;
+
+ // ========== 证书模式 ==========
+ /**
+ * 指定商户公钥应用证书内容字符串
+ */
+ private String appCertContent;
+ /**
+ * 指定支付宝公钥证书内容字符串
+ */
+ private String alipayPublicCertContent;
+ /**
+ * 指定根证书内容字符串
+ */
+ private String rootCertContent;
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayPayCodeMapping.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayPayCodeMapping.java
new file mode 100644
index 000000000..8cafd425d
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayPayCodeMapping.java
@@ -0,0 +1,24 @@
+package cn.iocoder.yudao.framework.pay.core.client.impl.alipay;
+
+import cn.iocoder.yudao.framework.common.exception.ErrorCode;
+import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
+import cn.iocoder.yudao.framework.pay.core.client.AbstractPayCodeMapping;
+
+import java.util.Objects;
+
+/**
+ * 支付宝的 PayCodeMapping 实现类
+ *
+ * @author 芋道源码
+ */
+public class AlipayPayCodeMapping extends AbstractPayCodeMapping {
+
+ @Override
+ protected ErrorCode apply0(String apiCode, String apiMsg) {
+ if (Objects.equals(apiCode, "10000")) {
+ return GlobalErrorCodeConstants.SUCCESS;
+ }
+ return null;
+ }
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayQrPayClient.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayQrPayClient.java
new file mode 100644
index 000000000..e9b5245ff
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayQrPayClient.java
@@ -0,0 +1,74 @@
+package cn.iocoder.yudao.framework.pay.core.client.impl.alipay;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.iocoder.yudao.framework.pay.core.client.PayCommonResult;
+import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderNotifyRespDTO;
+import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO;
+import cn.iocoder.yudao.framework.pay.core.client.impl.AbstractPayClient;
+import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.AlipayConfig;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.domain.AlipayTradePrecreateModel;
+import com.alipay.api.request.AlipayTradePrecreateRequest;
+import com.alipay.api.response.AlipayTradePrecreateResponse;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+
+import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;
+
+/**
+ * 支付宝【扫码支付】的 PayClient 实现类
+ * 文档:https://opendocs.alipay.com/apis/02890k
+ *
+ * @author 芋道源码
+ */
+@Slf4j
+public class AlipayQrPayClient extends AbstractPayClient {
+
+ private DefaultAlipayClient client;
+
+ public AlipayQrPayClient(Long channelId, AlipayPayClientConfig config) {
+ super(channelId, PayChannelEnum.ALIPAY_QR.getCode(), config, new AlipayPayCodeMapping());
+ }
+
+ @Override
+ @SneakyThrows
+ protected void doInit() {
+ AlipayConfig alipayConfig = new AlipayConfig();
+ BeanUtil.copyProperties(config, alipayConfig, false);
+ // 真实客户端
+ this.client = new DefaultAlipayClient(alipayConfig);
+ }
+
+ @Override
+ public PayCommonResult doUnifiedOrder(PayOrderUnifiedReqDTO reqDTO) {
+ // 构建 AlipayTradePrecreateModel 请求
+ AlipayTradePrecreateModel model = new AlipayTradePrecreateModel();
+ model.setOutTradeNo(reqDTO.getMerchantOrderId());
+ model.setSubject(reqDTO.getSubject());
+ model.setBody(reqDTO.getBody());
+ model.setTotalAmount(calculateAmount(reqDTO.getAmount()).toString()); // 单位:元
+ // TODO 芋艿:userIp + expireTime
+ // 构建 AlipayTradePrecreateRequest
+ AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
+ request.setBizModel(model);
+
+ // 执行请求
+ AlipayTradePrecreateResponse response;
+ try {
+ response = client.execute(request);
+ } catch (AlipayApiException e) {
+ log.error("[unifiedOrder][request({}) 发起支付失败]", toJsonString(reqDTO), e);
+ return PayCommonResult.build(e.getErrCode(), e.getErrMsg(), null, codeMapping);
+ }
+ // TODO 芋艿:sub Code 需要测试下各种失败的情况
+ return PayCommonResult.build(response.getCode(), response.getMsg(), response, codeMapping);
+ }
+
+ @Override
+ public PayOrderNotifyRespDTO parseOrderNotify(String data) throws Exception {
+ // TODO 芋艿:待完成
+ return null;
+ }
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayWapPayClient.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayWapPayClient.java
new file mode 100644
index 000000000..7f3bd5a91
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayWapPayClient.java
@@ -0,0 +1,70 @@
+package cn.iocoder.yudao.framework.pay.core.client.impl.alipay;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.iocoder.yudao.framework.pay.core.client.PayCommonResult;
+import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderNotifyRespDTO;
+import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO;
+import cn.iocoder.yudao.framework.pay.core.client.impl.AbstractPayClient;
+import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.AlipayConfig;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.domain.AlipayTradeWapPayModel;
+import com.alipay.api.request.AlipayTradeWapPayRequest;
+import com.alipay.api.response.AlipayTradeWapPayResponse;
+import lombok.SneakyThrows;
+
+/**
+ * 支付宝【手机网站】的 PayClient 实现类
+ * 文档:https://opendocs.alipay.com/apis/api_1/alipay.trade.wap.pay
+ *
+ * @author 芋道源码
+ */
+public class AlipayWapPayClient extends AbstractPayClient {
+
+ private DefaultAlipayClient client;
+
+ public AlipayWapPayClient(Long channelId, AlipayPayClientConfig config) {
+ super(channelId, PayChannelEnum.ALIPAY_WAP.getCode(), config, new AlipayPayCodeMapping());
+ }
+
+ @Override
+ @SneakyThrows
+ protected void doInit() {
+ AlipayConfig alipayConfig = new AlipayConfig();
+ BeanUtil.copyProperties(config, alipayConfig, false);
+ this.client = new DefaultAlipayClient(alipayConfig);
+ }
+
+ @Override
+ public PayCommonResult doUnifiedOrder(PayOrderUnifiedReqDTO reqDTO) {
+ // 构建 AlipayTradeWapPayModel 请求
+ AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
+ model.setOutTradeNo(reqDTO.getMerchantOrderId());
+ model.setSubject(reqDTO.getSubject());
+ model.setBody(reqDTO.getBody());
+ model.setTotalAmount(calculateAmount(reqDTO.getAmount()).toString());
+ model.setProductCode("QUICK_WAP_PAY"); // TODO 芋艿:这里咋整
+ model.setSellerId("2088102147948060"); // TODO 芋艿:这里咋整
+ // TODO 芋艿:userIp + expireTime
+ // 构建 AlipayTradeWapPayRequest
+ AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
+ request.setBizModel(model);
+
+ // 执行请求
+ AlipayTradeWapPayResponse response;
+ try {
+ response = client.pageExecute(request);
+ } catch (AlipayApiException e) {
+ return PayCommonResult.build(e.getErrCode(), e.getErrMsg(), null, codeMapping);
+ }
+// TODO 芋艿:sub Code
+ return PayCommonResult.build(response.getCode(), response.getMsg(), response, codeMapping);
+ }
+
+ @Override
+ public PayOrderNotifyRespDTO parseOrderNotify(String data) throws Exception {
+ // TODO 芋艿:待完成
+ return null;
+ }
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXCodeMapping.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXCodeMapping.java
new file mode 100644
index 000000000..cb5e872e7
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXCodeMapping.java
@@ -0,0 +1,56 @@
+package cn.iocoder.yudao.framework.pay.core.client.impl.wx;
+
+import cn.hutool.core.util.StrUtil;
+import cn.iocoder.yudao.framework.common.exception.ErrorCode;
+import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
+import cn.iocoder.yudao.framework.pay.core.client.AbstractPayCodeMapping;
+
+import java.util.Objects;
+
+import static cn.iocoder.yudao.framework.pay.core.enums.PayFrameworkErrorCodeConstants.*;
+
+/**
+ * 微信支付 PayCodeMapping 实现类
+ *
+ * @author 芋道源码
+ */
+public class WXCodeMapping extends AbstractPayCodeMapping {
+
+ /**
+ * 错误码 - 成功
+ * 由于 weixin-java-pay 封装的 Result 未返回 code,所以自己定义下
+ */
+ public static final String CODE_SUCCESS = "SUCCESS";
+ /**
+ * 错误提示 - 成功
+ */
+ public static final String MESSAGE_SUCCESS = "成功";
+
+ @Override
+ protected ErrorCode apply0(String apiCode, String apiMsg) {
+ if (Objects.equals(apiCode, CODE_SUCCESS)) {
+ return GlobalErrorCodeConstants.SUCCESS;
+ }
+ if (Objects.equals(apiCode, "FAIL")) {
+ if (Objects.equals(apiMsg, "AppID不存在,请检查后再试")) {
+ return PAY_CONFIG_APP_ID_ERROR;
+ }
+ if (Objects.equals(apiMsg, "签名错误,请检查后再试")
+ || Objects.equals(apiMsg, "签名错误")) {
+ return PAY_CONFIG_SIGN_ERROR;
+ }
+ }
+ if (Objects.equals(apiCode, "PARAM_ERROR")) {
+ if (Objects.equals(apiMsg, "无效的openid")) {
+ return PAY_OPENID_ERROR;
+ }
+ }
+ if (Objects.equals(apiCode, "CustomErrorCode")) {
+ if (StrUtil.contains(apiMsg, "必填字段")) {
+ return PAY_PARAM_MISSING;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXPayClientConfig.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXPayClientConfig.java
new file mode 100644
index 000000000..27bab4c1b
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXPayClientConfig.java
@@ -0,0 +1,88 @@
+package cn.iocoder.yudao.framework.pay.core.client.impl.wx;
+
+import cn.hutool.core.io.IoUtil;
+import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig;
+import lombok.Data;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+
+// TODO 芋艿:参数校验
+/**
+ * 微信支付的 PayClientConfig 实现类
+ * 属性主要来自 {@link com.github.binarywang.wxpay.config.WxPayConfig} 的必要属性
+ *
+ * @author 芋道源码
+ */
+@Data
+public class WXPayClientConfig implements PayClientConfig {
+
+ // TODO 芋艿:V2 or V3 客户端
+ /**
+ * API 版本 - V2
+ *
+ * https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_1
+ */
+ public static final String API_VERSION_V2 = "v2";
+ /**
+ * API 版本 - V3
+ *
+ * https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay-1.shtml
+ */
+ public static final String API_VERSION_V3 = "v3";
+
+ /**
+ * 公众号或者小程序的 appid
+ */
+ private String appId;
+ /**
+ * 商户号
+ */
+ private String mchId;
+ /**
+ * API 版本
+ */
+ private String apiVersion;
+
+ // ========== V2 版本的参数 ==========
+
+ /**
+ * 商户密钥
+ */
+ private String mchKey;
+// /**
+// * apiclient_cert.p12 证书文件的绝对路径或者以 classpath: 开头的类路径.
+// * 对应的字符串
+// *
+// * 注意,可通过 {@link #main(String[])} 读取
+// */
+// private String keyContent;
+
+ // ========== V3 版本的参数 ==========
+ /**
+ * apiclient_key.pem 证书文件的绝对路径或者以 classpath: 开头的类路径.
+ * 对应的字符串
+ *
+ * 注意,可通过 {@link #main(String[])} 读取
+ */
+ private String privateKeyContent;
+ /**
+ * apiclient_cert.pem 证书文件的绝对路径或者以 classpath: 开头的类路径.
+ * 对应的字符串
+ *
+ * 注意,可通过 {@link #main(String[])} 读取
+ */
+ private String privateCertContent;
+ /**
+ * apiV3 秘钥值
+ */
+ private String apiV3Key;
+
+ public static void main(String[] args) throws FileNotFoundException {
+ String path = "/Users/yunai/Downloads/wx_pay/apiclient_cert.p12";
+// String path = "/Users/yunai/Downloads/wx_pay/apiclient_key.pem";
+// String path = "/Users/yunai/Downloads/wx_pay/apiclient_cert.pem";
+ System.out.println(IoUtil.readUtf8(new FileInputStream(path)));
+ }
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXPubPayClient.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXPubPayClient.java
new file mode 100644
index 000000000..03e63c9f4
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/wx/WXPubPayClient.java
@@ -0,0 +1,144 @@
+package cn.iocoder.yudao.framework.pay.core.client.impl.wx;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.iocoder.yudao.framework.common.util.io.FileUtils;
+import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
+import cn.iocoder.yudao.framework.pay.core.client.PayCommonResult;
+import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderNotifyRespDTO;
+import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO;
+import cn.iocoder.yudao.framework.pay.core.client.impl.AbstractPayClient;
+import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
+import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
+import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
+import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
+import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderV3Request;
+import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderV3Result;
+import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum;
+import com.github.binarywang.wxpay.config.WxPayConfig;
+import com.github.binarywang.wxpay.constant.WxPayConstants;
+import com.github.binarywang.wxpay.exception.WxPayException;
+import com.github.binarywang.wxpay.service.WxPayService;
+import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.Objects;
+
+import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;
+import static cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXCodeMapping.CODE_SUCCESS;
+import static cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXCodeMapping.MESSAGE_SUCCESS;
+
+/**
+ * 微信支付(公众号)的 PayClient 实现类
+ *
+ * @author 芋道源码
+ */
+@Slf4j
+public class WXPubPayClient extends AbstractPayClient {
+
+ private WxPayService client;
+
+ public WXPubPayClient(Long channelId, WXPayClientConfig config) {
+ super(channelId, PayChannelEnum.WX_PUB.getCode(), config, new WXCodeMapping());
+ }
+
+ @Override
+ protected void doInit() {
+ WxPayConfig payConfig = new WxPayConfig();
+ BeanUtil.copyProperties(config, payConfig, "keyContent");
+ payConfig.setTradeType(WxPayConstants.TradeType.JSAPI); // 设置使用 JS API 支付方式
+// if (StrUtil.isNotEmpty(config.getKeyContent())) {
+// payConfig.setKeyContent(config.getKeyContent().getBytes(StandardCharsets.UTF_8));
+// }
+ if (StrUtil.isNotEmpty(config.getPrivateKeyContent())) {
+ // weixin-pay-java 存在 BUG,无法直接设置内容,所以创建临时文件来解决
+ payConfig.setPrivateKeyPath(FileUtils.createTempFile(config.getPrivateKeyContent()).getPath());
+ }
+ if (StrUtil.isNotEmpty(config.getPrivateCertContent())) {
+ // weixin-pay-java 存在 BUG,无法直接设置内容,所以创建临时文件来解决
+ payConfig.setPrivateCertPath(FileUtils.createTempFile(config.getPrivateCertContent()).getPath());
+ }
+ // 真实客户端
+ this.client = new WxPayServiceImpl();
+ client.setConfig(payConfig);
+ }
+
+ @Override
+ public PayCommonResult doUnifiedOrder(PayOrderUnifiedReqDTO reqDTO) {
+ WxPayMpOrderResult response;
+ try {
+ switch (config.getApiVersion()) {
+ case WXPayClientConfig.API_VERSION_V2:
+ response = this.unifiedOrderV2(reqDTO);
+ break;
+ case WXPayClientConfig.API_VERSION_V3:
+ WxPayUnifiedOrderV3Result.JsapiResult responseV3 = this.unifiedOrderV3(reqDTO);
+ // 将 V3 的结果,统一转换成 V2。返回的字段是一致的
+ response = new WxPayMpOrderResult();
+ BeanUtil.copyProperties(responseV3, response, true);
+ break;
+ default:
+ throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
+ }
+ } catch (WxPayException e) {
+ log.error("[unifiedOrder][request({}) 发起支付失败,原因({})]", toJsonString(reqDTO), e);
+ return PayCommonResult.build(ObjectUtils.defaultIfNull(e.getErrCode(), e.getReturnCode(), "CustomErrorCode"),
+ ObjectUtils.defaultIfNull(e.getErrCodeDes(), e.getCustomErrorMsg()),null, codeMapping);
+ }
+ return PayCommonResult.build(CODE_SUCCESS, MESSAGE_SUCCESS, response, codeMapping);
+ }
+
+ private WxPayMpOrderResult unifiedOrderV2(PayOrderUnifiedReqDTO reqDTO) throws WxPayException {
+ // 构建 WxPayUnifiedOrderRequest 对象
+ WxPayUnifiedOrderRequest request = WxPayUnifiedOrderRequest.newBuilder()
+ .outTradeNo(reqDTO.getMerchantOrderId())
+ // TODO 芋艿:貌似没 title?
+ .body(reqDTO.getBody())
+ .totalFee(reqDTO.getAmount().intValue()) // 单位分
+ .timeExpire(DateUtil.format(reqDTO.getExpireTime(), "yyyyMMddHHmmss"))
+ .spbillCreateIp(reqDTO.getUserIp())
+ .openid(getOpenid(reqDTO))
+ .notifyUrl(reqDTO.getNotifyUrl())
+ .build();
+ // 执行请求
+ return client.createOrder(request);
+ }
+
+ private WxPayUnifiedOrderV3Result.JsapiResult unifiedOrderV3(PayOrderUnifiedReqDTO reqDTO) throws WxPayException {
+ // 构建 WxPayUnifiedOrderRequest 对象
+ WxPayUnifiedOrderV3Request request = new WxPayUnifiedOrderV3Request();
+ request.setOutTradeNo(reqDTO.getMerchantOrderId());
+ // TODO 芋艿:貌似没 title?
+ request.setDescription(reqDTO.getBody());
+ request.setAmount(new WxPayUnifiedOrderV3Request.Amount().setTotal(reqDTO.getAmount().intValue())); // 单位分
+ request.setTimeExpire(DateUtil.format(reqDTO.getExpireTime(), "yyyyMMddHHmmss"));
+ request.setPayer(new WxPayUnifiedOrderV3Request.Payer().setOpenid(getOpenid(reqDTO)));
+ request.setSceneInfo(new WxPayUnifiedOrderV3Request.SceneInfo().setPayerClientIp(reqDTO.getUserIp()));
+ request.setNotifyUrl(reqDTO.getNotifyUrl());
+ // 执行请求
+ return client.createOrderV3(TradeTypeEnum.JSAPI, request);
+ }
+
+ private static String getOpenid(PayOrderUnifiedReqDTO reqDTO) {
+ String openid = MapUtil.getStr(reqDTO.getChannelExtras(), "openid");
+ if (StrUtil.isEmpty(openid)) {
+ throw new IllegalArgumentException("支付请求的 openid 不能为空!");
+ }
+ return openid;
+ }
+
+ @Override
+ public PayOrderNotifyRespDTO parseOrderNotify(String data) throws WxPayException {
+ WxPayOrderNotifyResult notifyResult = client.parseOrderNotifyResult(data);
+ Assert.isTrue(Objects.equals(notifyResult.getResultCode(), "SUCCESS"), "支付结果非 SUCCESS");
+ // 转换结果
+ return PayOrderNotifyRespDTO.builder().orderExtensionNo(notifyResult.getOutTradeNo())
+ .channelOrderNo(notifyResult.getTransactionId()).channelUserId(notifyResult.getOpenid())
+ .successTime(DateUtil.parse(notifyResult.getTimeEnd(), "yyyyMMddHHmmss"))
+ .data(data).build();
+ }
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/enums/PayChannelEnum.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/enums/PayChannelEnum.java
new file mode 100644
index 000000000..ed1389e0e
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/enums/PayChannelEnum.java
@@ -0,0 +1,41 @@
+package cn.iocoder.yudao.framework.pay.core.enums;
+
+import cn.hutool.core.util.ArrayUtil;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 支付渠道的编码的枚举
+ * 枚举值
+ *
+ * @author 芋道源码
+ */
+@Getter
+@AllArgsConstructor
+public enum PayChannelEnum {
+
+ WX_PUB("wx_pub", "微信 JSAPI 支付"), // 公众号的网页
+ WX_LITE("wx_lit","微信小程序支付"),
+ WX_APP("wx_app", "微信 App 支付"),
+
+ ALIPAY_PC("alipay_pc", "支付宝 PC 网站支付"),
+ ALIPAY_WAP("alipay_wap", "支付宝 Wap 网站支付"),
+ ALIPAY_APP("alipay_app", "支付宝App 支付"),
+ ALIPAY_QR("alipay_qr", "支付宝扫码支付");
+
+ /**
+ * 编码
+ *
+ * 参考 https://www.pingxx.com/api/支付渠道属性值.html
+ */
+ private String code;
+ /**
+ * 名字
+ */
+ private String name;
+
+ public static PayChannelEnum getByCode(String code) {
+ return ArrayUtil.firstMatch(o -> o.getCode().equals(code), values());
+ }
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/enums/PayFrameworkErrorCodeConstants.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/enums/PayFrameworkErrorCodeConstants.java
new file mode 100644
index 000000000..7046b4c6f
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/enums/PayFrameworkErrorCodeConstants.java
@@ -0,0 +1,27 @@
+package cn.iocoder.yudao.framework.pay.core.enums;
+
+import cn.iocoder.yudao.framework.common.exception.ErrorCode;
+
+/**
+ * 支付框架的错误码枚举
+ *
+ * 短信框架,使用 2-002-000-000 段
+ *
+ * @author 芋道源码
+ */
+public interface PayFrameworkErrorCodeConstants {
+
+ ErrorCode PAY_UNKNOWN = new ErrorCode(2002000000, "未知错误,需要解析");
+
+ // ========== 配置相关相关 2002000100 ==========
+ ErrorCode PAY_CONFIG_APP_ID_ERROR = new ErrorCode(2002000100, "支付渠道 AppId 不正确");
+ ErrorCode PAY_CONFIG_SIGN_ERROR = new ErrorCode(2002000100, "签名错误"); // 例如说,微信支付,配置错了 mchId 或者 mchKey
+
+
+ // ========== 其它相关 2002000900 开头 ==========
+ ErrorCode PAY_OPENID_ERROR = new ErrorCode(2002000900, "无效的 openid"); // 例如说,微信 openid 未授权过
+ ErrorCode PAY_PARAM_MISSING = new ErrorCode(2002000901, "请求参数缺失"); // 例如说,支付少传了金额
+
+ ErrorCode EXCEPTION = new ErrorCode(2002000999, "调用异常");
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/resources/META-INF/spring.factories b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/resources/META-INF/spring.factories
new file mode 100644
index 000000000..c135d7d79
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,2 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+ cn.iocoder.yudao.framework.pay.config.YudaoPayAutoConfiguration
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-pay/src/test-integration/java/cn/iocoder/yudao/framework/core/client/impl/PayClientFactoryImplTest.java b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/test-integration/java/cn/iocoder/yudao/framework/core/client/impl/PayClientFactoryImplTest.java
new file mode 100644
index 000000000..d7f8e462f
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-pay/src/test-integration/java/cn/iocoder/yudao/framework/core/client/impl/PayClientFactoryImplTest.java
@@ -0,0 +1,129 @@
+package cn.iocoder.yudao.framework.core.client.impl;
+
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.util.RandomUtil;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
+import cn.iocoder.yudao.framework.pay.core.client.PayClient;
+import cn.iocoder.yudao.framework.pay.core.client.dto.PayOrderUnifiedReqDTO;
+import cn.iocoder.yudao.framework.pay.core.client.impl.PayClientFactoryImpl;
+import cn.iocoder.yudao.framework.pay.core.client.impl.alipay.AlipayPayClientConfig;
+import cn.iocoder.yudao.framework.pay.core.client.impl.alipay.AlipayQrPayClient;
+import cn.iocoder.yudao.framework.pay.core.client.impl.alipay.AlipayWapPayClient;
+import cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPayClientConfig;
+import cn.iocoder.yudao.framework.pay.core.client.impl.wx.WXPubPayClient;
+import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
+import org.junit.jupiter.api.Test;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+
+/**
+ * {@link PayClientFactoryImpl} 的集成测试
+ *
+ * @author 芋道源码
+ */
+public class PayClientFactoryImplTest {
+
+ private final PayClientFactoryImpl payClientFactory = new PayClientFactoryImpl();
+
+ /**
+ * {@link WXPubPayClient} 的 V2 版本
+ */
+ @Test
+ public void testCreatePayClient_WX_PUB_V2() {
+ // 创建配置
+ WXPayClientConfig config = new WXPayClientConfig();
+ config.setAppId("wx041349c6f39b268b");
+ config.setMchId("1545083881");
+ config.setApiVersion(WXPayClientConfig.API_VERSION_V2);
+ config.setMchKey("0alL64UDQdlCwiKZ73ib7ypaIjMns06p");
+ // 创建客户端
+ Long channelId = RandomUtil.randomLong();
+ payClientFactory.createOrUpdatePayClient(channelId, PayChannelEnum.WX_PUB.getCode(), config);
+ PayClient client = payClientFactory.getPayClient(channelId);
+ // 发起支付
+ PayOrderUnifiedReqDTO reqDTO = buildPayOrderUnifiedReqDTO();
+ CommonResult> result = client.unifiedOrder(reqDTO);
+ System.out.println(result);
+ }
+
+ /**
+ * {@link WXPubPayClient} 的 V3 版本
+ */
+ @Test
+ public void testCreatePayClient_WX_PUB_V3() throws FileNotFoundException {
+ // 创建配置
+ WXPayClientConfig config = new WXPayClientConfig();
+ config.setAppId("wx041349c6f39b268b");
+ config.setMchId("1545083881");
+ config.setApiVersion(WXPayClientConfig.API_VERSION_V3);
+ config.setPrivateKeyContent(IoUtil.readUtf8(new FileInputStream("/Users/yunai/Downloads/wx_pay/apiclient_key.pem")));
+ config.setPrivateCertContent(IoUtil.readUtf8(new FileInputStream("/Users/yunai/Downloads/wx_pay/apiclient_cert.pem")));
+ config.setApiV3Key("joerVi8y5DJ3o4ttA0o1uH47Xz1u2Ase");
+ // 创建客户端
+ Long channelId = RandomUtil.randomLong();
+ payClientFactory.createOrUpdatePayClient(channelId, PayChannelEnum.WX_PUB.getCode(), config);
+ PayClient client = payClientFactory.getPayClient(channelId);
+ // 发起支付
+ PayOrderUnifiedReqDTO reqDTO = buildPayOrderUnifiedReqDTO();
+ CommonResult> result = client.unifiedOrder(reqDTO);
+ System.out.println(result);
+ }
+
+ /**
+ * {@link AlipayQrPayClient}
+ */
+ @Test
+ public void testCreatePayClient_ALIPAY_QR() {
+ // 创建配置
+ AlipayPayClientConfig config = new AlipayPayClientConfig();
+ config.setAppId("2021000118634035");
+ config.setServerUrl(AlipayPayClientConfig.SERVER_URL_SANDBOX);
+ config.setSignType(AlipayPayClientConfig.SIGN_TYPE_DEFAULT);
+ config.setPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCHsEV1cDupwJv890x84qbppUtRIfhaKSwSVN0thCcsDCaAsGR5MZslDkO8NCT9V4r2SVXjyY7eJUZlZd1M0C8T01Tg4UOx5LUbic0O3A1uJMy6V1n9IyYwbAW3AEZhBd5bSbPgrqvmv3NeWSTQT6Anxnllf+2iDH6zyA2fPl7cYyQtbZoDJQFGqr4F+cGh2R6akzRKNoBkAeMYwoY6es2lX8sJxCVPWUmxNUoL3tScwlSpd7Bxw0q9c/X01jMwuQ0+Va358zgFiGERTE6yD01eu40OBDXOYO3z++y+TAYHlQQ2toMO63trepo88X3xV3R44/1DH+k2pAm2IF5ixiLrAgMBAAECggEAPx3SoXcseaD7rmcGcE0p4SMfbsUDdkUSmBBbtfF0GzwnqNLkWa+mgE0rWt9SmXngTQH97vByAYmLPl1s3G82ht1V7Sk7yQMe74lhFllr8eEyTjeVx3dTK1EEM4TwN+936DTXdFsr4TELJEcJJdD0KaxcCcfBLRDs2wnitEFZ9N+GoZybVmY8w0e0MI7PLObUZ2l0X4RurQnfG9ZxjXjC7PkeMVv7cGGylpNFi3BbvkRhdhLPDC2E6wqnr9e7zk+hiENivAezXrtxtwKovzCtnWJ1r0IO14Rh47H509Ic0wFnj+o5YyUL4LdmpL7yaaH6fM7zcSLFjNZPHvZCKPwYcQKBgQDQFho98QvnL8ex4v6cry4VitGpjSXm1qP3vmMQk4rTsn8iPWtcxPjqGEqOQJjdi4Mi0VZKQOLFwlH0kl95wNrD/isJ4O1yeYfX7YAXApzHqYNINzM79HemO3Yx1qLMW3okRFJ9pPRzbQ9qkTpsaegsmyX316zOBhzGRYjKbutTYwKBgQCm7phr9XdFW5Vh+XR90mVs483nrLmMiDKg7YKxSLJ8amiDjzPejCn7i95Hah08P+2MIZLIPbh2VLacczR6ltRRzN5bg5etFuqSgfkuHyxpoDmpjbe08+Q2h8JBYqcC5Nhv1AKU4iOUhVLHo/FBAQliMcGc/J3eiYTFC7EsNx382QKBgClb20doe7cttgFTXswBvaUmfFm45kmla924B7SpvrQpDD/f+VDtDZRp05fGmxuduSjYdtA3aVtpLiTwWu22OUUvZZqHDGruYOO4Hvdz23mL5b4ayqImCwoNU4bAZIc9v18p/UNf3/55NNE3oGcf/bev9rH2OjCQ4nM+Ktwhg8CFAoGACSgvbkShzUkv0ZcIf9ppu+ZnJh1AdGgINvGwaJ8vQ0nm/8h8NOoFZ4oNoGc+wU5Ubops7dUM6FjPR5e+OjdJ4E7Xp7d5O4J1TaIZlCEbo5OpdhaTDDcQvrkFu+Z4eN0qzj+YAKjDAOOrXc4tbr5q0FsgXscwtcNfaBuzFVTUrUkCgYEAwzPnMNhWG3zOWLUs2QFA2GP4Y+J8cpUYfj6pbKKzeLwyG9qBwF1NJpN8m+q9q7V9P2LY+9Lp9e1mGsGeqt5HMEA3P6vIpcqLJLqE/4PBLLRzfccTcmqb1m71+erxTRhHBRkGS+I7dZEb3olQfnS1Y1tpMBxiwYwR3LW4oXuJwj8=");
+ config.setAlipayPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnq90KnF4dTnlzzmxpujbI05OYqi5WxAS6cL0gnZFv2gK51HExF8v/BaP7P979PhFMgWTqmOOI+Dtno5s+yD09XTY1WkshbLk6i4g2Xlr8fyW9ODnkU88RI2w9UdPhQU4cPPwBNlrsYhKkVK2OxwM3kFqjoBBY0CZoZCsSQ3LDH5WeZqPArlsS6xa2zqJBuuoKjMrdpELl3eXSjP8K54eDJCbeetCZNKWLL3DPahTPB7LZikfYmslb0QUvCgGapD0xkS7eVq70NaL1G57MWABs4tbfWgxike4Daj3EfUrzIVspQxj7w8HEj9WozJPgL88kSJSits0pqD3n5r8HSuseQIDAQAB");
+ // 创建客户端
+ Long channelId = RandomUtil.randomLong();
+ payClientFactory.createOrUpdatePayClient(channelId, PayChannelEnum.ALIPAY_QR.getCode(), config);
+ PayClient client = payClientFactory.getPayClient(channelId);
+ // 发起支付
+ PayOrderUnifiedReqDTO reqDTO = buildPayOrderUnifiedReqDTO();
+ CommonResult> result = client.unifiedOrder(reqDTO);
+ System.out.println(JsonUtils.toJsonString(result));
+ }
+
+ /**
+ * {@link AlipayWapPayClient}
+ */
+ @Test
+ public void testCreatePayClient_ALIPAY_WAP() {
+ // 创建配置
+ AlipayPayClientConfig config = new AlipayPayClientConfig();
+ config.setAppId("2021000118634035");
+ config.setServerUrl(AlipayPayClientConfig.SERVER_URL_SANDBOX);
+ config.setSignType(AlipayPayClientConfig.SIGN_TYPE_DEFAULT);
+ config.setPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCHsEV1cDupwJv890x84qbppUtRIfhaKSwSVN0thCcsDCaAsGR5MZslDkO8NCT9V4r2SVXjyY7eJUZlZd1M0C8T01Tg4UOx5LUbic0O3A1uJMy6V1n9IyYwbAW3AEZhBd5bSbPgrqvmv3NeWSTQT6Anxnllf+2iDH6zyA2fPl7cYyQtbZoDJQFGqr4F+cGh2R6akzRKNoBkAeMYwoY6es2lX8sJxCVPWUmxNUoL3tScwlSpd7Bxw0q9c/X01jMwuQ0+Va358zgFiGERTE6yD01eu40OBDXOYO3z++y+TAYHlQQ2toMO63trepo88X3xV3R44/1DH+k2pAm2IF5ixiLrAgMBAAECggEAPx3SoXcseaD7rmcGcE0p4SMfbsUDdkUSmBBbtfF0GzwnqNLkWa+mgE0rWt9SmXngTQH97vByAYmLPl1s3G82ht1V7Sk7yQMe74lhFllr8eEyTjeVx3dTK1EEM4TwN+936DTXdFsr4TELJEcJJdD0KaxcCcfBLRDs2wnitEFZ9N+GoZybVmY8w0e0MI7PLObUZ2l0X4RurQnfG9ZxjXjC7PkeMVv7cGGylpNFi3BbvkRhdhLPDC2E6wqnr9e7zk+hiENivAezXrtxtwKovzCtnWJ1r0IO14Rh47H509Ic0wFnj+o5YyUL4LdmpL7yaaH6fM7zcSLFjNZPHvZCKPwYcQKBgQDQFho98QvnL8ex4v6cry4VitGpjSXm1qP3vmMQk4rTsn8iPWtcxPjqGEqOQJjdi4Mi0VZKQOLFwlH0kl95wNrD/isJ4O1yeYfX7YAXApzHqYNINzM79HemO3Yx1qLMW3okRFJ9pPRzbQ9qkTpsaegsmyX316zOBhzGRYjKbutTYwKBgQCm7phr9XdFW5Vh+XR90mVs483nrLmMiDKg7YKxSLJ8amiDjzPejCn7i95Hah08P+2MIZLIPbh2VLacczR6ltRRzN5bg5etFuqSgfkuHyxpoDmpjbe08+Q2h8JBYqcC5Nhv1AKU4iOUhVLHo/FBAQliMcGc/J3eiYTFC7EsNx382QKBgClb20doe7cttgFTXswBvaUmfFm45kmla924B7SpvrQpDD/f+VDtDZRp05fGmxuduSjYdtA3aVtpLiTwWu22OUUvZZqHDGruYOO4Hvdz23mL5b4ayqImCwoNU4bAZIc9v18p/UNf3/55NNE3oGcf/bev9rH2OjCQ4nM+Ktwhg8CFAoGACSgvbkShzUkv0ZcIf9ppu+ZnJh1AdGgINvGwaJ8vQ0nm/8h8NOoFZ4oNoGc+wU5Ubops7dUM6FjPR5e+OjdJ4E7Xp7d5O4J1TaIZlCEbo5OpdhaTDDcQvrkFu+Z4eN0qzj+YAKjDAOOrXc4tbr5q0FsgXscwtcNfaBuzFVTUrUkCgYEAwzPnMNhWG3zOWLUs2QFA2GP4Y+J8cpUYfj6pbKKzeLwyG9qBwF1NJpN8m+q9q7V9P2LY+9Lp9e1mGsGeqt5HMEA3P6vIpcqLJLqE/4PBLLRzfccTcmqb1m71+erxTRhHBRkGS+I7dZEb3olQfnS1Y1tpMBxiwYwR3LW4oXuJwj8=");
+ config.setAlipayPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnq90KnF4dTnlzzmxpujbI05OYqi5WxAS6cL0gnZFv2gK51HExF8v/BaP7P979PhFMgWTqmOOI+Dtno5s+yD09XTY1WkshbLk6i4g2Xlr8fyW9ODnkU88RI2w9UdPhQU4cPPwBNlrsYhKkVK2OxwM3kFqjoBBY0CZoZCsSQ3LDH5WeZqPArlsS6xa2zqJBuuoKjMrdpELl3eXSjP8K54eDJCbeetCZNKWLL3DPahTPB7LZikfYmslb0QUvCgGapD0xkS7eVq70NaL1G57MWABs4tbfWgxike4Daj3EfUrzIVspQxj7w8HEj9WozJPgL88kSJSits0pqD3n5r8HSuseQIDAQAB");
+ // 创建客户端
+ Long channelId = RandomUtil.randomLong();
+ payClientFactory.createOrUpdatePayClient(channelId, PayChannelEnum.ALIPAY_WAP.getCode(), config);
+ PayClient client = payClientFactory.getPayClient(channelId);
+ // 发起支付
+ PayOrderUnifiedReqDTO reqDTO = buildPayOrderUnifiedReqDTO();
+ CommonResult> result = client.unifiedOrder(reqDTO);
+ System.out.println(JsonUtils.toJsonString(result));
+ }
+
+ private static PayOrderUnifiedReqDTO buildPayOrderUnifiedReqDTO() {
+ PayOrderUnifiedReqDTO reqDTO = new PayOrderUnifiedReqDTO();
+ reqDTO.setAmount(123L);
+ reqDTO.setSubject("IPhone 13");
+ reqDTO.setBody("biubiubiu");
+ reqDTO.setMerchantOrderId(String.valueOf(System.currentTimeMillis()));
+ reqDTO.setUserIp("127.0.0.1");
+ reqDTO.setNotifyUrl("http://127.0.0.1:8080");
+ return reqDTO;
+ }
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-sms/pom.xml b/yudao-framework/yudao-spring-boot-starter-biz-sms/pom.xml
index c72a63b30..bfed26a86 100644
--- a/yudao-framework/yudao-spring-boot-starter-biz-sms/pom.xml
+++ b/yudao-framework/yudao-spring-boot-starter-biz-sms/pom.xml
@@ -79,4 +79,5 @@
+
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/SmsClient.java b/yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/SmsClient.java
index 2f936de8c..06bcba084 100644
--- a/yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/SmsClient.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/SmsClient.java
@@ -8,7 +8,7 @@ import cn.iocoder.yudao.framework.sms.core.client.dto.SmsTemplateRespDTO;
import java.util.List;
/**
- * 短信客户端接口
+ * 短信客户端,用于对接各短信平台的 SDK,实现短信发送等功能
*
* @author zzf
* @date 2021/1/25 14:14
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/SmsClientFactory.java b/yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/SmsClientFactory.java
index d880b4ebd..338e83f52 100644
--- a/yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/SmsClientFactory.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/SmsClientFactory.java
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.framework.sms.core.client;
import cn.iocoder.yudao.framework.sms.core.property.SmsChannelProperties;
/**
- * 短信客户端工厂接口
+ * 短信客户端的工厂接口
*
* @author zzf
* @date 2021/1/28 14:01
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/impl/AbstractSmsClient.java b/yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/impl/AbstractSmsClient.java
index a96038059..0ef4869b4 100644
--- a/yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/impl/AbstractSmsClient.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/impl/AbstractSmsClient.java
@@ -13,7 +13,7 @@ import lombok.extern.slf4j.Slf4j;
import java.util.List;
/**
- * 短信客户端抽象类
+ * 短信客户端的抽象类,提供模板方法,减少子类的冗余代码
*
* @author zzf
* @date 2021/2/1 9:28
@@ -30,11 +30,6 @@ public abstract class AbstractSmsClient implements SmsClient {
*/
protected final SmsCodeMapping codeMapping;
- /**
- * 短信客户端有参构造函数
- *
- * @param properties 短信配置
- */
public AbstractSmsClient(SmsChannelProperties properties, SmsCodeMapping codeMapping) {
this.properties = properties;
this.codeMapping = codeMapping;
@@ -48,6 +43,11 @@ public abstract class AbstractSmsClient implements SmsClient {
log.info("[init][配置({}) 初始化完成]", properties);
}
+ /**
+ * 自定义初始化
+ */
+ protected abstract void doInit();
+
public final void refresh(SmsChannelProperties properties) {
// 判断是否更新
if (properties.equals(this.properties)) {
@@ -59,11 +59,6 @@ public abstract class AbstractSmsClient implements SmsClient {
this.init();
}
- /**
- * 自定义初始化
- */
- protected abstract void doInit();
-
@Override
public Long getId() {
return properties.getId();
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/impl/yunpian/YunpianSmsClient.java b/yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/impl/yunpian/YunpianSmsClient.java
index 8adff8f60..9867e08db 100644
--- a/yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/impl/yunpian/YunpianSmsClient.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/impl/yunpian/YunpianSmsClient.java
@@ -83,7 +83,8 @@ public class YunpianSmsClient extends AbstractSmsClient {
}
// 参考 https://www.yunpian.com/official/document/sms/zh_cn/introduction_demos_encode_sample 格式化
StringJoiner joiner = new StringJoiner("&");
- templateParams.forEach(param -> joiner.add(String.format("#%s#=%s", param.getKey(), URLUtil.encode(String.valueOf(param.getValue())))));
+ templateParams.forEach(param -> joiner.add(String.format("#%s#=%s", param.getKey(),
+ URLUtil.encode(String.valueOf(param.getValue())))));
return joiner.toString();
}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-weixin/pom.xml b/yudao-framework/yudao-spring-boot-starter-biz-weixin/pom.xml
new file mode 100644
index 000000000..fddab18a4
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-weixin/pom.xml
@@ -0,0 +1,43 @@
+
+
+
+ cn.iocoder.boot
+ yudao-framework
+ ${revision}
+
+ 4.0.0
+ yudao-spring-boot-starter-biz-weixin
+ jar
+
+ ${artifactId}
+ 微信拓展
+ 1. 基于 weixin-java-mp 库,对接微信公众号平台。目前主要解决微信公众号的支付场景。
+
+ https://github.com/YunaiV/ruoyi-vue-pro
+
+
+
+ cn.iocoder.boot
+ yudao-common
+
+
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-test
+ test
+
+
+
+
+ com.github.binarywang
+
+ wx-java-mp-spring-boot-starter
+ 4.1.9.B
+
+
+
+
+
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-weixin/src/test-integration/java/cn/iocoder/yudao/framework/weixin/WxMpServiceTest.java b/yudao-framework/yudao-spring-boot-starter-biz-weixin/src/test-integration/java/cn/iocoder/yudao/framework/weixin/WxMpServiceTest.java
new file mode 100644
index 000000000..392e651c5
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-weixin/src/test-integration/java/cn/iocoder/yudao/framework/weixin/WxMpServiceTest.java
@@ -0,0 +1,34 @@
+package cn.iocoder.yudao.framework.weixin;
+
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.mp.api.WxMpService;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.annotation.Resource;
+
+@SpringBootTest(classes = WxMpServiceTest.Application.class)
+public class WxMpServiceTest {
+
+ @Resource
+ private WxMpService wxMpService;
+
+ @Test
+ public void testGetAccessToken() throws WxErrorException {
+ String accessToken = wxMpService.getAccessToken();
+ System.out.println(accessToken);
+ }
+
+ @Test
+ public void testGet() throws WxErrorException {
+ String jsapiTicket = wxMpService.getJsapiTicket();
+ System.out.println(jsapiTicket);
+ }
+
+ @SpringBootApplication
+ public static class Application {
+
+ }
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-weixin/src/test-integration/resources/application.yml b/yudao-framework/yudao-spring-boot-starter-biz-weixin/src/test-integration/resources/application.yml
new file mode 100644
index 000000000..9b30060a8
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-biz-weixin/src/test-integration/resources/application.yml
@@ -0,0 +1,11 @@
+--- #################### 微信公众号相关配置 ####################
+wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档
+ mp:
+ # 公众号配置(必填)
+ app-id: wx041349c6f39b268b
+ secret: 5abee519483bc9f8cb37ce280e814bd0
+ # 存储配置,解决 AccessToken 的跨节点的共享
+# config-storage:
+# type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
+# key-prefix: wx # Redis Key 的前缀 TODO 芋艿:解决下 Redis key 管理的配置
+# http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/pom.xml b/yudao-framework/yudao-spring-boot-starter-extension/pom.xml
new file mode 100644
index 000000000..bc6a36e8d
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/pom.xml
@@ -0,0 +1,68 @@
+
+
+
+ yudao-framework
+ cn.iocoder.boot
+ ${revision}
+
+ 4.0.0
+
+ yudao-spring-boot-starter-extension
+ jar
+
+ ${artifactId}
+ 扩展点组件
+ https://github.com/YunaiV/ruoyi-vue-pro
+
+
+
+
+
+
+
+ cn.iocoder.boot
+ yudao-common
+
+
+
+
+ org.springframework
+ spring-context
+ provided
+
+
+
+ org.springframework
+ spring-beans
+ provided
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+ junit
+ junit
+ test
+
+
+
+
+ jakarta.validation
+ jakarta.validation-api
+
+
+
\ No newline at end of file
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/config/YudaoExtensionAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/config/YudaoExtensionAutoConfiguration.java
new file mode 100644
index 000000000..8b047ae1b
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/config/YudaoExtensionAutoConfiguration.java
@@ -0,0 +1,62 @@
+package cn.iocoder.yudao.framework.extension.config;
+
+import cn.iocoder.yudao.framework.extension.core.ExtensionBootstrap;
+import cn.iocoder.yudao.framework.extension.core.context.ExtensionContext;
+import cn.iocoder.yudao.framework.extension.core.context.ExtensionContextHolder;
+import cn.iocoder.yudao.framework.extension.core.context.ExtensionExecutor;
+import cn.iocoder.yudao.framework.extension.core.factory.ExtensionFactory;
+import cn.iocoder.yudao.framework.extension.core.factory.ExtensionRegisterFactory;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @description 扩展点组件自动装配
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-28 21:50
+ * @class cn.iocoder.yudao.framework.extension.config.YudaoExtensionAutoConfiguration.java
+ */
+@Configuration
+public class YudaoExtensionAutoConfiguration {
+
+ /**
+ * 组件初始化
+ * @return
+ */
+ @Bean(initMethod = "init")
+ @ConditionalOnMissingBean(ExtensionBootstrap.class)
+ public ExtensionBootstrap bootstrap() {
+ return new ExtensionBootstrap();
+ }
+
+ /**
+ * 扩展点工厂
+ * @return
+ */
+ @Bean
+ @ConditionalOnMissingBean({ExtensionRegisterFactory.class, ExtensionFactory.class})
+ public ExtensionRegisterFactory registerFactory() {
+ return new ExtensionRegisterFactory();
+ }
+
+ /**
+ * 扩展组件上下文对象
+ * @return
+ */
+ @Bean
+ @ConditionalOnMissingBean({ExtensionContextHolder.class, ExtensionContext.class})
+ public ExtensionContextHolder context() {
+ return new ExtensionContextHolder();
+ }
+
+ /**
+ * 扩展组件执行器
+ * @return
+ */
+ @Bean
+ @ConditionalOnMissingBean(ExtensionExecutor.class)
+ public ExtensionExecutor executor() {
+ return new ExtensionExecutor();
+ }
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/BusinessScenario.java b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/BusinessScenario.java
new file mode 100644
index 000000000..732350c67
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/BusinessScenario.java
@@ -0,0 +1,142 @@
+package cn.iocoder.yudao.framework.extension.core;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.StringJoiner;
+
+/**
+ * @description 业务场景 = businessId + useCase + scenario, 用来标识系统中唯一的一个场景
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-28 22:19
+ * @class cn.iocoder.yudao.framework.extension.core.BusinessScenario.java
+ */
+public class BusinessScenario implements Serializable {
+
+ /**
+ * 默认业务id
+ */
+ public final static String DEFAULT_BUSINESS_ID = "#defaultBusinessId#";
+
+ /**
+ * 默认用例
+ */
+ public final static String DEFAULT_USECASE = "#defaultUseCase#";
+
+ /**
+ * 默认场景
+ */
+ public final static String DEFAULT_SCENARIO = "#defaultScenario#";
+
+ /**
+ * 分隔符
+ */
+ private final static String DOT_SEPARATOR = ".";
+
+ /**
+ * 业务Id
+ */
+ private String businessId;
+
+ /**
+ * 用例
+ */
+ private String useCase;
+
+ /**
+ * 场景
+ */
+ private String scenario;
+
+ public BusinessScenario() {
+ this.businessId = DEFAULT_BUSINESS_ID;
+ this.useCase = DEFAULT_USECASE;
+ this.scenario = DEFAULT_SCENARIO;
+ }
+
+ public BusinessScenario(@NotNull String businessId, @NotNull String useCase, @NotNull String scenario) {
+ this.businessId = businessId;
+ this.useCase = useCase;
+ this.scenario = scenario;
+ }
+
+ public BusinessScenario(@NotNull String scenario) {
+ this();
+ this.scenario = scenario;
+ }
+
+ public BusinessScenario(@NotNull String useCase, @NotNull String scenario) {
+ this(DEFAULT_BUSINESS_ID, useCase, scenario);
+ }
+
+ public String getBusinessId() {
+ return businessId;
+ }
+
+ public void setBusinessId(String businessId) {
+ this.businessId = businessId;
+ }
+
+ public String getUseCase() {
+ return useCase;
+ }
+
+ public void setUseCase(String useCase) {
+ this.useCase = useCase;
+ }
+
+ public String getScenario() {
+ return scenario;
+ }
+
+ public void setScenario(String scenario) {
+ this.scenario = scenario;
+ }
+
+ /**
+ * 构建业务场景
+ * @param businessId
+ * @param useCase
+ * @param scenario
+ * @return
+ */
+ public static BusinessScenario valueOf(@NotNull String businessId, @NotNull String useCase, @NotNull String scenario) {
+ return new BusinessScenario(businessId, useCase, scenario);
+ }
+
+ /**
+ * 构建业务场景
+ * @param useCase
+ * @param scenario
+ * @return
+ */
+ public static BusinessScenario valueOf(@NotNull String useCase, @NotNull String scenario) {
+ return new BusinessScenario(useCase, scenario);
+ }
+
+ /**
+ * 构建业务场景
+ * @param scenario
+ * @return
+ */
+ public static BusinessScenario valueOf(@NotNull String scenario) {
+ return new BusinessScenario(scenario);
+ }
+
+ /**
+ * 业务场景唯一标识
+ * @return
+ */
+ public String getUniqueIdentity(){
+ return new StringJoiner(DOT_SEPARATOR).add(businessId).add(useCase).add(scenario).toString();
+ }
+
+ @Override
+ public String toString() {
+ return "BusinessScenario{" +
+ "businessId='" + businessId + '\'' +
+ ", useCase='" + useCase + '\'' +
+ ", scenario='" + scenario + '\'' +
+ '}';
+ }
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/ExtensionBootstrap.java b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/ExtensionBootstrap.java
new file mode 100644
index 000000000..800c431be
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/ExtensionBootstrap.java
@@ -0,0 +1,41 @@
+package cn.iocoder.yudao.framework.extension.core;
+
+import cn.iocoder.yudao.framework.extension.core.factory.ExtensionRegisterFactory;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * @description
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-29 00:18
+ * @class cn.iocoder.yudao.framework.extension.core.ExtensionBootstrap.java
+ */
+public class ExtensionBootstrap implements ApplicationContextAware {
+
+ /**
+ * spring 容器
+ */
+ private ApplicationContext applicationContext;
+
+ @Autowired
+ private ExtensionRegisterFactory registerFactory;
+
+ /**
+ * 初始化
+ */
+ @PostConstruct
+ public void init() {
+ registerFactory.setApplicationContext(applicationContext);
+ registerFactory.register(null);
+ }
+
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+ this.applicationContext = applicationContext;
+ }
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/context/AbstractComponentExecutor.java b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/context/AbstractComponentExecutor.java
new file mode 100644
index 000000000..f46d05d90
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/context/AbstractComponentExecutor.java
@@ -0,0 +1,131 @@
+package cn.iocoder.yudao.framework.extension.core.context;
+
+import cn.iocoder.yudao.framework.extension.core.BusinessScenario;
+import cn.iocoder.yudao.framework.extension.core.point.ExtensionPoint;
+
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+/**
+ * @description 执行器通用方法
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-29 00:38
+ * @class cn.iocoder.yudao.framework.extension.core.context.AbstractComponentExecutor.java
+ */
+public abstract class AbstractComponentExecutor {
+
+ /**
+ * ("业务" + "用例" + "场景")执行扩展组件,并返回执行结果
+ * @param targetClazz
+ * @param businessId
+ * @param useCase
+ * @param scenario
+ * @param function
+ * @param
+ * @param
+ * @return
+ */
+ public R execute(Class targetClazz, String businessId, String useCase, String scenario, Function function) {
+ return execute(targetClazz, BusinessScenario.valueOf(businessId, useCase, scenario), function);
+ }
+
+
+ /**
+ * ("用例" + "场景")执行扩展组件,并返回执行结果
+ * @param targetClazz
+ * @param useCase
+ * @param scenario
+ * @param function
+ * @param
+ * @param
+ * @return
+ */
+ public R execute(Class targetClazz, String useCase, String scenario, Function function) {
+ return execute(targetClazz, BusinessScenario.valueOf(useCase, scenario), function);
+ }
+
+ /**
+ * ("场景")执行扩展组件,并返回执行结果
+ * @param targetClazz
+ * @param scenario
+ * @param function
+ * @param
+ * @param
+ * @return
+ */
+ public R execute(Class targetClazz, String scenario, Function function) {
+ return execute(targetClazz, BusinessScenario.valueOf(scenario), function);
+ }
+
+ /**
+ * 执行扩展组件,并返回执行结果
+ * @param targetClazz
+ * @param businessScenario
+ * @param function
+ * @param Response Type
+ * @param Parameter Type
+ * @return
+ */
+ public R execute(Class targetClazz, BusinessScenario businessScenario, Function function) {
+ T component = locateComponent(targetClazz, businessScenario);
+ return function.apply(component);
+ }
+
+ /**
+ * ("业务" + "用例" + "场景")执行扩展组件,适用于无返回值的业务
+ * @param targetClazz
+ * @param businessId
+ * @param useCase
+ * @param scenario
+ * @param consumer
+ * @param
+ */
+ public void accept(Class targetClazz, String businessId, String useCase, String scenario, Consumer consumer) {
+ accept(targetClazz, BusinessScenario.valueOf(businessId, useCase, scenario), consumer);
+ }
+
+ /**
+ * ("场景")执行扩展组件,适用于无返回值的业务
+ * @param targetClazz
+ * @param useCase
+ * @param scenario
+ * @param consumer
+ * @param
+ */
+ public void accept(Class targetClazz, String useCase, String scenario, Consumer consumer) {
+ accept(targetClazz, BusinessScenario.valueOf(useCase, scenario), consumer);
+ }
+
+ /**
+ * ("场景")执行扩展组件,适用于无返回值的业务
+ * @param targetClazz
+ * @param scenario
+ * @param consumer
+ * @param
+ */
+ public void accept(Class targetClazz, String scenario, Consumer consumer) {
+ accept(targetClazz, BusinessScenario.valueOf(scenario), consumer);
+ }
+
+ /**
+ * 执行扩展组件,适用于无返回值的业务
+ * @param targetClazz
+ * @param businessScenario
+ * @param consumer
+ * @param Parameter Type
+ */
+ public void accept(Class targetClazz, BusinessScenario businessScenario, Consumer consumer) {
+ T component = locateComponent(targetClazz, businessScenario);
+ consumer.accept(component);
+ }
+
+ /**
+ * 获取/定位扩展点组件
+ * @param targetClazz
+ * @param businessScenario
+ * @param
+ * @return
+ */
+ protected abstract C locateComponent(Class targetClazz, BusinessScenario businessScenario);
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/context/ExtensionContext.java b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/context/ExtensionContext.java
new file mode 100644
index 000000000..5704cc49f
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/context/ExtensionContext.java
@@ -0,0 +1,56 @@
+package cn.iocoder.yudao.framework.extension.core.context;
+
+import cn.iocoder.yudao.framework.extension.core.BusinessScenario;
+import cn.iocoder.yudao.framework.extension.core.point.ExtensionPoint;
+
+/**
+ * @description 上下文,包含各个扩展点的相关操作
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-28 22:15
+ * @class cn.iocoder.yudao.framework.extension.core.context.ExtensionContext.java
+ */
+public interface ExtensionContext {
+
+ /**
+ * 根据业务场景唯一标识获取扩展点组件实现类
+ * @param businessId
+ * @param useCase
+ * @param scenario
+ * @param clazz
+ * @param
+ * @return
+ */
+ T getPoint(String businessId, String useCase, String scenario, Class clazz);
+
+ /**
+ * 根据("实例" + "场景")获取扩展点组件实现类,其中:业务id(businessId)= {@linkplain cn.iocoder.yudao.framework.extension.core.BusinessScenario.DEFAULT_BUSINESS_ID}
+ * @param useCase
+ * @param scenario
+ * @param clazz
+ * @param
+ * @return
+ */
+ T getPoint(String useCase, String scenario, Class clazz);
+
+ /**
+ * 根据("场景")获取扩展点组件实现类
+ * 其中:
+ * 业务id(businessId)= {@linkplain cn.iocoder.yudao.framework.extension.core.BusinessScenario.DEFAULT_BUSINESS_ID}
+ * 实例(useCase)= {@linkplain cn.iocoder.yudao.framework.extension.core.BusinessScenario.DEFAULT_USECASE}
+ * @param scenario
+ * @param clazz
+ * @param
+ * @return
+ */
+ T getPoint(String scenario, Class clazz);
+
+ /**
+ * 根据业务场景唯一标识获取扩展点组件实现类
+ * @param businessScenario
+ * @param clazz
+ * @param
+ * @return
+ */
+ T getPoint(BusinessScenario businessScenario, Class clazz);
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/context/ExtensionContextHolder.java b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/context/ExtensionContextHolder.java
new file mode 100644
index 000000000..6e121b70d
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/context/ExtensionContextHolder.java
@@ -0,0 +1,45 @@
+package cn.iocoder.yudao.framework.extension.core.context;
+
+import cn.iocoder.yudao.framework.extension.core.BusinessScenario;
+import cn.iocoder.yudao.framework.extension.core.factory.ExtensionFactory;
+import cn.iocoder.yudao.framework.extension.core.point.ExtensionPoint;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @description 上下文及扩展点组件工厂的持有类
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-29 00:29
+ * @class cn.iocoder.yudao.framework.extension.core.context.ExtensionContextHolder.java
+ */
+@Component
+@Slf4j
+public class ExtensionContextHolder implements ExtensionContext{
+
+ @Autowired
+ private ExtensionFactory factory;
+
+ @Override
+ public T getPoint(@NotNull String businessId, @NotNull String useCase, @NotNull String scenario, Class clazz) {
+ return getPoint(BusinessScenario.valueOf(businessId, useCase, scenario), clazz);
+ }
+
+ @Override
+ public T getPoint(@NotNull String useCase, String scenario, Class clazz) {
+ return getPoint(BusinessScenario.valueOf(useCase, scenario), clazz);
+ }
+
+ @Override
+ public T getPoint(@NotNull String scenario, Class clazz) {
+ return getPoint(BusinessScenario.valueOf(scenario), clazz);
+ }
+
+ @Override
+ public T getPoint(@NotNull BusinessScenario businessScenario, Class clazz) {
+ return factory.get(businessScenario, clazz);
+ }
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/context/ExtensionExecutor.java b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/context/ExtensionExecutor.java
new file mode 100644
index 000000000..5f48652e5
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/context/ExtensionExecutor.java
@@ -0,0 +1,28 @@
+package cn.iocoder.yudao.framework.extension.core.context;
+
+import cn.iocoder.yudao.framework.extension.core.BusinessScenario;
+import cn.iocoder.yudao.framework.extension.core.point.ExtensionPoint;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * @description 扩展组件执行器
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-29 00:32
+ * @class cn.iocoder.yudao.framework.extension.core.context.ExtensionExecutor.java
+ */
+@Component
+@Slf4j
+public class ExtensionExecutor extends AbstractComponentExecutor{
+
+ @Autowired
+ private ExtensionContextHolder contextHolder;
+
+
+ @Override
+ protected C locateComponent(Class targetClazz, BusinessScenario businessScenario) {
+ return contextHolder.getPoint(businessScenario, targetClazz);
+ }
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/factory/ExtensionDefinition.java b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/factory/ExtensionDefinition.java
new file mode 100644
index 000000000..5feed6660
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/factory/ExtensionDefinition.java
@@ -0,0 +1,96 @@
+package cn.iocoder.yudao.framework.extension.core.factory;
+
+import cn.iocoder.yudao.framework.extension.core.BusinessScenario;
+import cn.iocoder.yudao.framework.extension.core.point.ExtensionPoint;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Objects;
+
+/**
+ * @description 扩展定义(扩展坐标),标识唯一一个业务场景实现
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-28 23:14
+ * @class cn.iocoder.yudao.framework.extension.core.factory.ExtensionDefinition.java
+ */
+@Setter
+@Getter
+public class ExtensionDefinition implements Serializable {
+
+ /**
+ * 业务场景唯一标识(id)
+ */
+ private String uniqueIdentify;
+
+ /**
+ * 扩展点实现类名称
+ */
+ private String extensionPointName;
+
+ /**
+ * 业务场景
+ */
+ private BusinessScenario businessScenario;
+
+ /**
+ * 扩展点实现类
+ */
+ private ExtensionPoint extensionPoint;
+
+ /**
+ * class
+ */
+ private Class extensionPointClass;
+
+ public ExtensionDefinition() {
+ }
+
+ public ExtensionDefinition(@NotNull BusinessScenario businessScenario, @NotNull ExtensionPoint extensionPoint) {
+ this.businessScenario = businessScenario;
+ this.extensionPoint = extensionPoint;
+ this.uniqueIdentify = this.businessScenario.getUniqueIdentity();
+ this.extensionPointClass = this.extensionPoint.getClass();
+ }
+
+ /**
+ * 构建definition
+ * @param businessScenario
+ * @param point
+ * @return
+ */
+ public static ExtensionDefinition valueOf(@NotNull BusinessScenario businessScenario, @NotNull ExtensionPoint point) {
+ return new ExtensionDefinition(businessScenario, point);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ ExtensionDefinition that = (ExtensionDefinition) o;
+ return Objects.equals(uniqueIdentify, that.uniqueIdentify) && Objects.equals(extensionPointName, that.extensionPointName);
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((uniqueIdentify == null) ? 0 : uniqueIdentify.hashCode());
+ result = prime * result + ((extensionPointName == null) ? 0 : extensionPointName.hashCode());
+ return result;
+ }
+
+ @Override
+ public String toString() {
+ return "ExtensionDefinition{" +
+ "uniqueIdentify='" + uniqueIdentify + '\'' +
+ ", extensionPointName='" + extensionPointName + '\'' +
+ '}';
+ }
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/factory/ExtensionFactory.java b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/factory/ExtensionFactory.java
new file mode 100644
index 000000000..c03175c13
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/factory/ExtensionFactory.java
@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.framework.extension.core.factory;
+
+import cn.iocoder.yudao.framework.extension.core.BusinessScenario;
+import cn.iocoder.yudao.framework.extension.core.point.ExtensionPoint;
+
+/**
+ * @description 扩展点工厂
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-28 23:04
+ * @class cn.iocoder.yudao.framework.extension.core.factory.ExtensionFactory.java
+ */
+public interface ExtensionFactory {
+
+ /**
+ * 注册所有扩展点实现类
+ * @param basePackage
+ */
+ void register(String basePackage);
+
+ /**
+ * 根据业务场景获取指定类型的扩展点
+ * @param businessScenario
+ * @param clazz
+ * @param
+ * @return
+ */
+ T get(BusinessScenario businessScenario, Class clazz);
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/factory/ExtensionRegisterFactory.java b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/factory/ExtensionRegisterFactory.java
new file mode 100644
index 000000000..15b802436
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/factory/ExtensionRegisterFactory.java
@@ -0,0 +1,86 @@
+package cn.iocoder.yudao.framework.extension.core.factory;
+
+import cn.iocoder.yudao.framework.extension.core.BusinessScenario;
+import cn.iocoder.yudao.framework.extension.core.point.ExtensionPoint;
+import cn.iocoder.yudao.framework.extension.core.stereotype.Extension;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.aop.support.AopUtils;
+import org.springframework.context.ApplicationContext;
+import org.springframework.core.annotation.AnnotationUtils;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ClassUtils;
+
+import javax.validation.constraints.NotNull;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @description 注册工厂
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-28 23:07
+ * @class cn.iocoder.yudao.framework.extension.core.factory.ExtensionRegisterFactory.java
+ */
+@Component
+@Slf4j
+public class ExtensionRegisterFactory implements ExtensionFactory {
+
+ /**
+ * spring ApplicationContext
+ */
+ private ApplicationContext applicationContext;
+
+ /**
+ * 扩展点实现类集合
+ */
+ private Map registerExtensionBeans = new ConcurrentHashMap<>();
+
+ @Override
+ public void register(String basePackage) {
+ final Map beans = applicationContext.getBeansWithAnnotation(Extension.class);
+ if(beans == null || beans.isEmpty()) {
+ return;
+ }
+
+ beans.values().forEach(point -> doRegister((ExtensionPoint) point));
+ log.info("业务场景相关扩展点注册完成,注册数量: {}", registerExtensionBeans.size());
+ }
+
+ @Override
+ public T get(BusinessScenario businessScenario, Class clazz) {
+
+ final ExtensionDefinition definition = registerExtensionBeans.get(businessScenario.getUniqueIdentity());
+ if(definition == null) {
+ log.error("获取业务场景扩展点实现失败,失败原因:尚未定义该业务场景相关扩展点。{}", businessScenario);
+ throw new RuntimeException("尚未定义该业务场景相关扩展点 [" + businessScenario + "]");
+ }
+
+ return (T) definition.getExtensionPoint();
+ }
+
+ /**
+ * 注册扩展点
+ * @param point
+ */
+ private void doRegister(@NotNull ExtensionPoint point) {
+ Class> extensionClazz = point.getClass();
+
+ if (AopUtils.isAopProxy(point)) {
+ extensionClazz = ClassUtils.getUserClass(point);
+ }
+
+ Extension extension = AnnotationUtils.findAnnotation(extensionClazz, Extension.class);
+ final BusinessScenario businessScenario = BusinessScenario.valueOf(extension.businessId(), extension.useCase(), extension.scenario());
+ final ExtensionDefinition definition = ExtensionDefinition.valueOf(businessScenario, point);
+ final ExtensionDefinition exist = registerExtensionBeans.get(businessScenario.getUniqueIdentity());
+ if(exist != null && !exist.equals(definition)) {
+ throw new RuntimeException("相同的业务场景重复注册了不同类型的扩展点实现 :【" + definition + "】【" + exist + "】");
+ }
+
+ registerExtensionBeans.put(businessScenario.getUniqueIdentity(), definition);
+ }
+
+ public void setApplicationContext(ApplicationContext applicationContext) {
+ this.applicationContext = applicationContext;
+ }
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/package-info.java b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/package-info.java
new file mode 100644
index 000000000..636491eca
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/package-info.java
@@ -0,0 +1,8 @@
+/**
+ * @description core 核心
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-28 21:54
+ * @class cn.iocoder.yudao.framework.extension.core.package-info.java
+ */
+package cn.iocoder.yudao.framework.extension.core;
\ No newline at end of file
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/point/ExtensionPoint.java b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/point/ExtensionPoint.java
new file mode 100644
index 000000000..e1a86d791
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/point/ExtensionPoint.java
@@ -0,0 +1,11 @@
+package cn.iocoder.yudao.framework.extension.core.point;
+/**
+ * @description 扩展点
+ * 表示一块逻辑在不同的业务有不同的实现,使用扩展点做接口申明,然后用{@linkplain cn.iocoder.yudao.framework.extension.core.stereotype.Extension}(扩展)去实现扩展点。
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-28 22:06
+ * @class cn.iocoder.yudao.framework.extension.core.point.ExtensionPoint.java
+ */
+public interface ExtensionPoint {
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/stereotype/Extension.java b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/stereotype/Extension.java
new file mode 100644
index 000000000..eaa9f99f8
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/core/stereotype/Extension.java
@@ -0,0 +1,41 @@
+package cn.iocoder.yudao.framework.extension.core.stereotype;
+
+import cn.iocoder.yudao.framework.extension.core.BusinessScenario;
+import org.springframework.stereotype.Component;
+
+import java.lang.annotation.*;
+
+/**
+ * @description 表示带注释的类是“扩展组件”
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-28 21:59
+ * @class cn.iocoder.yudao.framework.extension.core.stereotype.Extension.java
+ */
+@Inherited
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+@Component
+public @interface Extension {
+
+ /**
+ * 业务
+ * 一个自负盈亏的财务主体,比如tmall、淘宝和零售通就是三个不同的业务
+ * @return
+ */
+ String businessId() default BusinessScenario.DEFAULT_BUSINESS_ID;
+
+ /**
+ * 用例
+ * 描述了用户和系统之间的互动,每个用例提供了一个或多个场景。比如,支付订单就是一个典型的用例。
+ * @return
+ */
+ String useCase() default BusinessScenario.DEFAULT_USECASE;
+
+ /**
+ * 场景
+ * 场景也被称为用例的实例(Instance),包括用例所有的可能情况(正常的和异常的)。比如对于"订单支付"这个用例,就有“支付宝支付”、“银行卡支付”、"微信支付"等多个场景
+ * @return
+ */
+ String scenario() default BusinessScenario.DEFAULT_SCENARIO;
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/package-info.java b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/package-info.java
new file mode 100644
index 000000000..1c4ae94ae
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/main/java/cn/iocoder/yudao/framework/extension/package-info.java
@@ -0,0 +1,8 @@
+/**
+ * @description 扩展点组件
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-28 14:35
+ * @class cn.iocoder.yudao.framework.extension.package-info.java
+ */
+package cn.iocoder.yudao.framework.extension;
\ No newline at end of file
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/main/resources/META-INF/spring.factories b/yudao-framework/yudao-spring-boot-starter-extension/src/main/resources/META-INF/spring.factories
new file mode 100644
index 000000000..82d14b8b0
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,2 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+ cn.iocoder.yudao.framework.extension.config.YudaoExtensionAutoConfiguration
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/Application.java b/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/Application.java
new file mode 100644
index 000000000..a589affd3
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/Application.java
@@ -0,0 +1,19 @@
+package cn.iocoder.yudao.framework.extension;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @description Application
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-30 10:32
+ * @class cn.iocoder.yudao.framework.extension.Application.java
+ */
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/ExtensionTest.java b/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/ExtensionTest.java
new file mode 100644
index 000000000..aa3b900c3
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/ExtensionTest.java
@@ -0,0 +1,43 @@
+package cn.iocoder.yudao.framework.extension;
+
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.json.JSONUtil;
+import cn.iocoder.yudao.framework.extension.core.BusinessScenario;
+import cn.iocoder.yudao.framework.extension.core.context.ExtensionExecutor;
+import cn.iocoder.yudao.framework.extension.pay.PayExtensionPoint;
+import cn.iocoder.yudao.framework.extension.pay.command.TransactionsCommand;
+import cn.iocoder.yudao.framework.extension.pay.domain.TransactionsResult;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import java.math.BigDecimal;
+
+/**
+ * @description
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-30 10:30
+ * @class cn.iocoder.yudao.framework.extension.ExtensionTest.java
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringBootTest(classes = Application.class)
+@Slf4j
+public class ExtensionTest {
+
+ @Autowired
+ private ExtensionExecutor extensionExecutor;
+
+ @Test
+ public void unifiedOrder() {
+ final BusinessScenario scenario = BusinessScenario.valueOf("pay", "jsapi", "wechat");
+ final TransactionsCommand command = new TransactionsCommand(IdUtil.objectId(), new BigDecimal(105), "Image形象店-深圳腾大-QQ公仔", "https://www.weixin.qq.com/wxpay/pay.php");
+ final TransactionsResult result = extensionExecutor.execute(PayExtensionPoint.class, scenario, extension -> extension.unifiedOrder(command));
+ log.info("result is: {}", JSONUtil.toJsonStr(result));
+ Assert.assertSame("wechat", result.getChannel());
+ }
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/package-info.java b/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/package-info.java
new file mode 100644
index 000000000..d0bc63e1c
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/package-info.java
@@ -0,0 +1,8 @@
+/**
+ * @description
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-30 10:25
+ * @class cn.iocoder.yudao.framework.extension.package-info.java
+ */
+package cn.iocoder.yudao.framework.extension;
\ No newline at end of file
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/pay/PayExtensionPoint.java b/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/pay/PayExtensionPoint.java
new file mode 100644
index 000000000..9adc56b4c
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/pay/PayExtensionPoint.java
@@ -0,0 +1,22 @@
+package cn.iocoder.yudao.framework.extension.pay;
+
+import cn.iocoder.yudao.framework.extension.core.point.ExtensionPoint;
+import cn.iocoder.yudao.framework.extension.pay.command.TransactionsCommand;
+import cn.iocoder.yudao.framework.extension.pay.domain.TransactionsResult;
+
+/**
+ * @description 支付操作接口
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-30 10:35
+ * @class cn.iocoder.yudao.framework.extension.pay.PayExtensionPoint.java
+ */
+public interface PayExtensionPoint extends ExtensionPoint {
+
+ /**
+ * 统一下单:获取"预支付交易会话标识"
+ * @param command
+ * @return
+ */
+ TransactionsResult unifiedOrder(TransactionsCommand command);
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/pay/command/TransactionsCommand.java b/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/pay/command/TransactionsCommand.java
new file mode 100644
index 000000000..0ac1908dd
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/pay/command/TransactionsCommand.java
@@ -0,0 +1,40 @@
+package cn.iocoder.yudao.framework.extension.pay.command;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @description 下单请求
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-30 10:48
+ * @class cn.iocoder.yudao.framework.extension.pay.command.TransactionsCommand.java
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class TransactionsCommand implements Serializable {
+ /**
+ * 订单编号
+ */
+ private String orderNo;
+
+ /**
+ * 支付金额
+ */
+ private BigDecimal amount;
+
+ /**
+ * 商品描述
+ */
+ private String productDescription;
+
+ /**
+ * 通知地址
+ */
+ private String notifyUrl;
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/pay/domain/TransactionsResult.java b/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/pay/domain/TransactionsResult.java
new file mode 100644
index 000000000..35861bbd0
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/pay/domain/TransactionsResult.java
@@ -0,0 +1,39 @@
+package cn.iocoder.yudao.framework.extension.pay.domain;
+
+import lombok.*;
+
+import java.io.Serializable;
+
+/**
+ * @description 下单: 预支付交易单返回结果
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-30 10:43
+ * @class cn.iocoder.yudao.framework.extension.pay.domain.TransactionsResult.java
+ */
+@Data
+@AllArgsConstructor
+public class TransactionsResult implements Serializable {
+
+ /**
+ * 预支付交易会话标识
+ */
+ private String prepayId;
+
+ /**
+ * 订单编号
+ */
+ private String orderNo;
+
+ /**
+ * 系统内部支付单号
+ */
+ private String paymentNo;
+
+ /**
+ * 支付渠道:微信 or 支付宝
+ */
+ private String channel;
+
+
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/pay/impl/AlipayService.java b/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/pay/impl/AlipayService.java
new file mode 100644
index 000000000..2daac2ff6
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/pay/impl/AlipayService.java
@@ -0,0 +1,26 @@
+package cn.iocoder.yudao.framework.extension.pay.impl;
+
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.json.JSONUtil;
+import cn.iocoder.yudao.framework.extension.core.stereotype.Extension;
+import cn.iocoder.yudao.framework.extension.pay.PayExtensionPoint;
+import cn.iocoder.yudao.framework.extension.pay.command.TransactionsCommand;
+import cn.iocoder.yudao.framework.extension.pay.domain.TransactionsResult;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @description 微信 JSAPI 支付
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-30 10:38
+ * @class cn.iocoder.yudao.framework.extension.pay.impl.AlipayService.java
+ */
+@Extension(businessId = "pay", useCase = "jsapi", scenario = "alipay")
+@Slf4j
+public class AlipayService implements PayExtensionPoint {
+ @Override
+ public TransactionsResult unifiedOrder(TransactionsCommand command) {
+ log.info("微信 JSAPI 支付:{}", JSONUtil.toJsonStr(command));
+ return new TransactionsResult("alipay26112221580621e9b071c00d9e093b0000", command.getOrderNo(), IdUtil.objectId(), "alipay");
+ }
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/pay/impl/WechatPayService.java b/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/pay/impl/WechatPayService.java
new file mode 100644
index 000000000..cae294092
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/src/test/java/cn/iocoder/yudao/framework/extension/pay/impl/WechatPayService.java
@@ -0,0 +1,26 @@
+package cn.iocoder.yudao.framework.extension.pay.impl;
+
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.json.JSONUtil;
+import cn.iocoder.yudao.framework.extension.core.stereotype.Extension;
+import cn.iocoder.yudao.framework.extension.pay.PayExtensionPoint;
+import cn.iocoder.yudao.framework.extension.pay.command.TransactionsCommand;
+import cn.iocoder.yudao.framework.extension.pay.domain.TransactionsResult;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @description 微信 JSAPI 支付
+ * @author Qingchen
+ * @version 1.0.0
+ * @date 2021-08-30 10:37
+ * @class cn.iocoder.yudao.framework.extension.pay.impl.WechatPayService.java
+ */
+@Extension(businessId = "pay", useCase = "jsapi", scenario = "wechat")
+@Slf4j
+public class WechatPayService implements PayExtensionPoint {
+ @Override
+ public TransactionsResult unifiedOrder(TransactionsCommand command) {
+ log.info("微信 JSAPI 支付:{}", JSONUtil.toJsonStr(command));
+ return new TransactionsResult("wx26112221580621e9b071c00d9e093b0000", command.getOrderNo(), IdUtil.objectId(), "wechat");
+ }
+}
diff --git a/yudao-framework/yudao-spring-boot-starter-extension/《芋道 Spring Boot 扩展点组件》.md b/yudao-framework/yudao-spring-boot-starter-extension/《芋道 Spring Boot 扩展点组件》.md
new file mode 100644
index 000000000..59ff2dcb3
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-extension/《芋道 Spring Boot 扩展点组件》.md
@@ -0,0 +1,19 @@
+### 作用
+
+ 为了解决同一个流程不同业务有不同处理逻辑而产生,减少代码中 if else 逻辑,降低代码的耦合性,通过统一的扩展形式来支撑业务的变化。
+
+### 原理
+
+ https://blog.csdn.net/significantfrank/article/details/100074716
+
+
+
+### 使用介绍
+
+参考测试代码 `cn.iocoder.yudao.framework.extension.ExtensionTest`
+
+
+
+
+
+
diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java
index a80d21b68..4335577d7 100644
--- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java
+++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java
@@ -28,6 +28,10 @@ public interface BaseMapperX extends BaseMapper {
return selectOne(new QueryWrapper().eq(field, value));
}
+ default T selectOne(String field1, Object value1, String field2, Object value2) {
+ return selectOne(new QueryWrapper().eq(field1, value1).eq(field2, value2));
+ }
+
default Integer selectCount(String field, Object value) {
return selectCount(new QueryWrapper().eq(field, value));
}
diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/filter/ApiAccessLogFilter.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/filter/ApiAccessLogFilter.java
index 008d6ca6a..57133c840 100644
--- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/filter/ApiAccessLogFilter.java
+++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/filter/ApiAccessLogFilter.java
@@ -6,7 +6,7 @@ import cn.hutool.extra.servlet.ServletUtil;
import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.apilog.core.service.ApiAccessLogFrameworkService;
-import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateDTO;
+import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateReqDTO;
import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
import cn.iocoder.yudao.framework.web.config.WebProperties;
import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
@@ -68,7 +68,7 @@ public class ApiAccessLogFilter extends OncePerRequestFilter {
private void createApiAccessLog(HttpServletRequest request, Date beginTime,
Map queryString, String requestBody, Exception ex) {
- ApiAccessLogCreateDTO accessLog = new ApiAccessLogCreateDTO();
+ ApiAccessLogCreateReqDTO accessLog = new ApiAccessLogCreateReqDTO();
try {
this.buildApiAccessLogDTO(accessLog, request, beginTime, queryString, requestBody, ex);
apiAccessLogFrameworkService.createApiAccessLogAsync(accessLog);
@@ -77,7 +77,7 @@ public class ApiAccessLogFilter extends OncePerRequestFilter {
}
}
- private void buildApiAccessLogDTO(ApiAccessLogCreateDTO accessLog, HttpServletRequest request, Date beginTime,
+ private void buildApiAccessLogDTO(ApiAccessLogCreateReqDTO accessLog, HttpServletRequest request, Date beginTime,
Map queryString, String requestBody, Exception ex) {
// 处理用户信息
accessLog.setUserId(WebFrameworkUtils.getLoginUserId(request));
diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/ApiAccessLogFrameworkService.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/ApiAccessLogFrameworkService.java
index a999e8339..71df0f6fb 100644
--- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/ApiAccessLogFrameworkService.java
+++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/ApiAccessLogFrameworkService.java
@@ -1,9 +1,8 @@
package cn.iocoder.yudao.framework.apilog.core.service;
-import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateDTO;
+import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiAccessLogCreateReqDTO;
import javax.validation.Valid;
-import java.util.concurrent.Future;
/**
* API 访问日志 Framework Service 接口
@@ -17,6 +16,6 @@ public interface ApiAccessLogFrameworkService {
*
* @param createDTO 创建信息
*/
- void createApiAccessLogAsync(@Valid ApiAccessLogCreateDTO createDTO);
+ void createApiAccessLogAsync(@Valid ApiAccessLogCreateReqDTO createDTO);
}
diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/ApiErrorLogFrameworkService.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/ApiErrorLogFrameworkService.java
index 55733e95f..9229745d7 100644
--- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/ApiErrorLogFrameworkService.java
+++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/ApiErrorLogFrameworkService.java
@@ -1,9 +1,8 @@
package cn.iocoder.yudao.framework.apilog.core.service;
-import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateDTO;
+import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateReqDTO;
import javax.validation.Valid;
-import java.util.concurrent.Future;
/**
* API 错误日志 Framework Service 接口
@@ -17,6 +16,6 @@ public interface ApiErrorLogFrameworkService {
*
* @param createDTO 创建信息
*/
- void createApiErrorLogAsync(@Valid ApiErrorLogCreateDTO createDTO);
+ void createApiErrorLogAsync(@Valid ApiErrorLogCreateReqDTO createDTO);
}
diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/dto/ApiAccessLogCreateDTO.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/dto/ApiAccessLogCreateReqDTO.java
similarity index 97%
rename from yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/dto/ApiAccessLogCreateDTO.java
rename to yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/dto/ApiAccessLogCreateReqDTO.java
index c665853d7..a32f7b346 100644
--- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/dto/ApiAccessLogCreateDTO.java
+++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/dto/ApiAccessLogCreateReqDTO.java
@@ -11,7 +11,7 @@ import java.util.Date;
* @author 芋道源码
*/
@Data
-public class ApiAccessLogCreateDTO {
+public class ApiAccessLogCreateReqDTO {
/**
* 链路追踪编号
diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/dto/ApiErrorLogCreateDTO.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/dto/ApiErrorLogCreateReqDTO.java
similarity index 96%
rename from yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/dto/ApiErrorLogCreateDTO.java
rename to yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/dto/ApiErrorLogCreateReqDTO.java
index 51258d735..70baebc5c 100644
--- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/dto/ApiErrorLogCreateDTO.java
+++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/dto/ApiErrorLogCreateReqDTO.java
@@ -4,7 +4,6 @@ import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
-import java.io.Serializable;
import java.util.Date;
/**
@@ -14,7 +13,7 @@ import java.util.Date;
*/
@Data
@Accessors(chain = true)
-public class ApiErrorLogCreateDTO implements Serializable {
+public class ApiErrorLogCreateReqDTO {
/**
* 链路编号
diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java
index cb0aefd8d..578ad76f9 100644
--- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java
+++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java
@@ -6,7 +6,7 @@ import cn.hutool.extra.servlet.ServletUtil;
import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.apilog.core.service.ApiErrorLogFrameworkService;
-import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateDTO;
+import cn.iocoder.yudao.framework.apilog.core.service.dto.ApiErrorLogCreateReqDTO;
import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
@@ -15,7 +15,6 @@ import io.github.resilience4j.ratelimiter.RequestNotPermitted;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.util.Assert;
import org.springframework.validation.BindException;
@@ -28,7 +27,6 @@ import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
import org.springframework.web.servlet.NoHandlerFoundException;
-import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
@@ -231,7 +229,7 @@ public class GlobalExceptionHandler {
private void createExceptionLog(HttpServletRequest req, Throwable e) {
// 插入错误日志
- ApiErrorLogCreateDTO errorLog = new ApiErrorLogCreateDTO();
+ ApiErrorLogCreateReqDTO errorLog = new ApiErrorLogCreateReqDTO();
try {
// 初始化 errorLog
initExceptionLog(errorLog, req, e);
@@ -242,7 +240,7 @@ public class GlobalExceptionHandler {
}
}
- private void initExceptionLog(ApiErrorLogCreateDTO errorLog, HttpServletRequest request, Throwable e) {
+ private void initExceptionLog(ApiErrorLogCreateReqDTO errorLog, HttpServletRequest request, Throwable e) {
// 处理用户信息
errorLog.setUserId(WebFrameworkUtils.getLoginUserId(request));
errorLog.setUserType(WebFrameworkUtils.getLoginUserType(request));
diff --git a/yudao-user-server/pom.xml b/yudao-user-server/pom.xml
index 2aa1ee772..e7b1cd82d 100644
--- a/yudao-user-server/pom.xml
+++ b/yudao-user-server/pom.xml
@@ -31,6 +31,10 @@
cn.iocoder.boot
yudao-spring-boot-starter-biz-sms
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-biz-weixin
+
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/SysUserProfileController.http b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/SysUserProfileController.http
index 72cf861b8..1ce9eea62 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/SysUserProfileController.http
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/SysUserProfileController.http
@@ -1,3 +1,11 @@
### 请求 /system/user/profile/get 接口 => 没有权限
GET {{userServerUrl}}/system/user/profile/get
Authorization: Bearer test245
+
+### 请求 /system/user/profile/revise-nickname 接口 成功
+PUT {{userServerUrl}}/system/user/profile/update-nickname?nickName=yunai222
+Authorization: Bearer test245
+
+### 请求 /system/user/profile/get-user-info 接口 成功
+GET {{userServerUrl}}/system/user/profile/get-user-info?id=245
+Authorization: Bearer test245
\ No newline at end of file
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/SysUserProfileController.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/SysUserProfileController.java
index 4b66b4e18..870d33718 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/SysUserProfileController.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/SysUserProfileController.java
@@ -1,14 +1,24 @@
package cn.iocoder.yudao.userserver.modules.member.controller.user;
+import cn.iocoder.yudao.userserver.modules.member.controller.user.vo.MbrUserInfoRespVO;
+import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
+import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+
+import java.io.IOException;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
+import static cn.iocoder.yudao.userserver.modules.member.enums.MbrErrorCodeConstants.FILE_IS_EMPTY;
@Api(tags = "用户个人中心")
@RestController
@@ -17,11 +27,34 @@ import org.springframework.web.bind.annotation.RestController;
@Slf4j
public class SysUserProfileController {
- @GetMapping("/get")
- @ApiOperation("获得登录用户信息")
+ @Resource
+ private MbrUserService userService;
+
+ @PutMapping("/update-nickname")
+ @ApiOperation("修改用户昵称")
@PreAuthenticated
- public CommonResult profile() {
- return null;
+ public CommonResult updateNickname(@RequestParam("nickName") String nickName) {
+ userService.updateNickname(getLoginUserId(), nickName);
+ return success(true);
+ }
+
+ @PutMapping("/update-avatar")
+ @ApiOperation("修改用户头像")
+ @PreAuthenticated
+ public CommonResult updateAvatar(@RequestParam("avatarFile") MultipartFile file) throws IOException {
+ if (file.isEmpty()) {
+ throw ServiceExceptionUtil.exception(FILE_IS_EMPTY);
+ }
+ String avatar = userService.updateAvatar(getLoginUserId(), file.getInputStream());
+ return success(avatar);
+ }
+
+ @GetMapping("/get-user-info")
+ @ApiOperation("获取用户头像与昵称")
+ @PreAuthenticated
+ public CommonResult getUserInfo() {
+ return success(userService.getUserInfo(getLoginUserId()));
}
}
+
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/vo/MbrUserInfoRespVO.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/vo/MbrUserInfoRespVO.java
new file mode 100644
index 000000000..e46bd410f
--- /dev/null
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/controller/user/vo/MbrUserInfoRespVO.java
@@ -0,0 +1,20 @@
+package cn.iocoder.yudao.userserver.modules.member.controller.user.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@ApiModel("用户个人信息 Response VO")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class MbrUserInfoRespVO {
+
+ @ApiModelProperty(value = "用户昵称", required = true, example = "芋艿")
+ private String nickName;
+
+ @ApiModelProperty(value = "用户头像", required = true, example = "/infra/file/get/35a12e57-4297-4faa-bf7d-7ed2f211c952")
+ private String avatar;
+}
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/enums/MbrErrorCodeConstants.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/enums/MbrErrorCodeConstants.java
index 265d1d485..3794eb09d 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/enums/MbrErrorCodeConstants.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/enums/MbrErrorCodeConstants.java
@@ -9,4 +9,9 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
*/
public interface MbrErrorCodeConstants {
+ // ==========用户相关 1004001000============
+ ErrorCode USER_NOT_EXISTS = new ErrorCode(1004001000, "用户不存在");
+
+ // ==========文件相关 1004002000 ===========
+ ErrorCode FILE_IS_EMPTY = new ErrorCode(1004002000, "文件为空");
}
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/enums/social/SysSocialTypeEnum.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/enums/social/SysSocialTypeEnum.java
deleted file mode 100644
index fe93f39c8..000000000
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/enums/social/SysSocialTypeEnum.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package cn.iocoder.yudao.userserver.modules.member.enums.social;
-
-import cn.hutool.core.collection.ListUtil;
-import cn.hutool.core.util.ArrayUtil;
-import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * 社交平台的类型枚举
- *
- * @author 芋道源码
- */
-@Getter
-@AllArgsConstructor
-public enum SysSocialTypeEnum implements IntArrayValuable {
-
- GITEE(10, "GITEE"), // https://gitee.com/api/v5/oauth_doc#/
- DINGTALK(20, "DINGTALK"), // https://developers.dingtalk.com/document/app/obtain-identity-credentials
- WECHAT_ENTERPRISE(30, "WECHAT_ENTERPRISE"), // https://xkcoding.com/2019/08/06/use-justauth-integration-wechat-enterprise.html
- ;
-
- public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SysSocialTypeEnum::getType).toArray();
-
- public static final List WECHAT_ALL = ListUtil.toList(WECHAT_ENTERPRISE.type);
-
- /**
- * 类型
- */
- private final Integer type;
- /**
- * 类型的标识
- */
- private final String source;
-
- @Override
- public int[] array() {
- return ARRAYS;
- }
-
- public static SysSocialTypeEnum valueOfType(Integer type) {
- return ArrayUtil.firstMatch(o -> o.getType().equals(type), values());
- }
-
- public static List getRelationTypes(Integer type) {
- if (WECHAT_ALL.contains(type)) {
- return WECHAT_ALL;
- }
- return ListUtil.toList(type);
- }
-
-}
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/package-info.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/package-info.java
index 4b11f981b..2334d44bf 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/package-info.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/package-info.java
@@ -1,7 +1,8 @@
/**
- * member 包下,我们放会员业务.
- * 例如说:会员中心等等
+ * weixin 包下,我们放微信相关业务.
+ * 例如说:微信公众号、等等
+ * ps:微信支付,还是放在 pay 包下
*
- * 缩写:mbr
+ * 缩写:wx
*/
-package cn.iocoder.yudao.userserver.modules.member;
\ No newline at end of file
+package cn.iocoder.yudao.userserver.modules.member;
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/user/MbrUserService.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/user/MbrUserService.java
index 2d5466865..6b6a36a8e 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/user/MbrUserService.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/user/MbrUserService.java
@@ -1,8 +1,11 @@
package cn.iocoder.yudao.userserver.modules.member.service.user;
import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO;
+import cn.iocoder.yudao.userserver.modules.member.controller.user.vo.MbrUserInfoRespVO;
import cn.iocoder.yudao.framework.common.validation.Mobile;
+import java.io.InputStream;
+
/**
* 前台用户 Service 接口
*
@@ -44,4 +47,26 @@ public interface MbrUserService {
*/
MbrUserDO getUser(Long id);
+ /**
+ * 修改用户昵称
+ * @param userId 用户id
+ * @param nickName 用户新昵称
+ */
+ void updateNickname(Long userId, String nickName);
+
+ /**
+ * 修改用户头像
+ * @param userId 用户id
+ * @param inputStream 头像文件
+ * @return 头像url
+ */
+ String updateAvatar(Long userId, InputStream inputStream);
+
+ /**
+ * 根据用户id,获取用户头像与昵称
+ * @param userId 用户id
+ * @return 用户响应实体类
+ */
+ MbrUserInfoRespVO getUserInfo(Long userId);
+
}
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/user/impl/MbrUserServiceImpl.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/user/impl/MbrUserServiceImpl.java
index 71fb9dd88..f340c5fe9 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/user/impl/MbrUserServiceImpl.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/member/service/user/impl/MbrUserServiceImpl.java
@@ -1,18 +1,26 @@
package cn.iocoder.yudao.userserver.modules.member.service.user.impl;
+import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.IdUtil;
+import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService;
import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO;
+import cn.iocoder.yudao.userserver.modules.member.controller.user.vo.MbrUserInfoRespVO;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.userserver.modules.member.dal.mysql.user.MbrUserMapper;
import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService;
+import com.google.common.annotations.VisibleForTesting;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.validation.Valid;
+import java.io.InputStream;
import java.util.Date;
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.userserver.modules.member.enums.MbrErrorCodeConstants.USER_NOT_EXISTS;
+
/**
* User Service 实现类
*
@@ -26,6 +34,9 @@ public class MbrUserServiceImpl implements MbrUserService {
@Resource
private MbrUserMapper userMapper;
+ @Resource
+ private InfFileCoreService fileCoreService;
+
@Resource
private PasswordEncoder passwordEncoder;
@@ -68,4 +79,53 @@ public class MbrUserServiceImpl implements MbrUserService {
return userMapper.selectById(id);
}
+ @Override
+ public void updateNickname(Long userId, String nickName) {
+ MbrUserDO user = this.checkUserExists(userId);
+ // 仅当新昵称不等于旧昵称时进行修改
+ if (nickName.equals(user.getNickname())){
+ return;
+ }
+ MbrUserDO userDO = new MbrUserDO();
+ userDO.setId(user.getId());
+ userDO.setNickname(nickName);
+ userMapper.updateById(userDO);
+ }
+
+ @Override
+ public String updateAvatar(Long userId, InputStream avatarFile) {
+ this.checkUserExists(userId);
+ // 创建文件
+ String avatar = fileCoreService.createFile(IdUtil.fastUUID(), IoUtil.readBytes(avatarFile));
+ // 更新头像路径
+ MbrUserDO userDO = MbrUserDO.builder()
+ .id(userId)
+ .avatar(avatar)
+ .build();
+ userMapper.updateById(userDO);
+ return avatar;
+ }
+
+ @Override
+ public MbrUserInfoRespVO getUserInfo(Long userId) {
+ MbrUserDO user = this.checkUserExists(userId);
+ // 拼接返回结果
+ MbrUserInfoRespVO userResp = new MbrUserInfoRespVO();
+ userResp.setNickName(user.getNickname());
+ userResp.setAvatar(user.getAvatar());
+ return userResp;
+ }
+
+ @VisibleForTesting
+ public MbrUserDO checkUserExists(Long id) {
+ if (id == null) {
+ return null;
+ }
+ MbrUserDO user = userMapper.selectById(id);
+ if (user == null) {
+ throw exception(USER_NOT_EXISTS);
+ }else{
+ return user;
+ }
+ }
}
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/PayOrderController.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/PayOrderController.java
new file mode 100644
index 000000000..74a7249a8
--- /dev/null
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/PayOrderController.java
@@ -0,0 +1,61 @@
+package cn.iocoder.yudao.userserver.modules.pay.controller.order;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.iocoder.yudao.coreservice.modules.pay.dal.dataobject.order.PayOrderDO;
+import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayOrderCoreService;
+import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitReqDTO;
+import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderSubmitRespDTO;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
+import cn.iocoder.yudao.userserver.modules.pay.controller.order.vo.PayOrderSubmitReqVO;
+import cn.iocoder.yudao.userserver.modules.pay.controller.order.vo.PayOrderSubmitRespVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
+
+@Api(tags = "支付订单")
+@RestController
+@RequestMapping("/pay/order")
+@Validated
+@Slf4j
+public class PayOrderController {
+
+ @Resource
+ private PayOrderCoreService payOrderCoreService;
+
+ @PostMapping("/submit")
+ @ApiOperation("提交支付订单")
+// @PreAuthenticated // TODO 暂时不加登陆验证,前端暂时没做好
+ public CommonResult submitPayOrder(@RequestBody PayOrderSubmitReqVO reqVO) {
+ // 获得订单
+ PayOrderDO payOrder = payOrderCoreService.getPayOrder(reqVO.getId());
+
+ // 提交支付
+ PayOrderSubmitReqDTO reqDTO = new PayOrderSubmitReqDTO();
+ BeanUtil.copyProperties(reqVO, reqDTO, false);
+ reqDTO.setUserIp(getClientIP());
+ reqDTO.setAppId(payOrder.getAppId());
+ PayOrderSubmitRespDTO respDTO = payOrderCoreService.submitPayOrder(reqDTO);
+
+ // 拼接返回
+ return success(PayOrderSubmitRespVO.builder().invokeResponse(respDTO.getInvokeResponse()).build());
+ }
+
+ // ========== 支付渠道的回调 ==========
+
+ @PostMapping("/notify/wx-pub/{channelId}")
+ @ApiOperation("通知微信公众号的结果")
+ public String notifyWxPayOrder(@PathVariable("channelId") Long channelId,
+ @RequestBody String xmlData) throws Exception {
+ payOrderCoreService.notifyPayOrder(channelId, PayChannelEnum.WX_PUB.getCode(), xmlData);
+ return "success";
+ }
+
+}
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayOrderSubmitReqVO.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayOrderSubmitReqVO.java
new file mode 100644
index 000000000..407edb171
--- /dev/null
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayOrderSubmitReqVO.java
@@ -0,0 +1,28 @@
+package cn.iocoder.yudao.userserver.modules.pay.controller.order.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Map;
+
+@ApiModel("支付订单提交 Request VO")
+@Data
+@Accessors(chain = true)
+public class PayOrderSubmitReqVO {
+
+ @ApiModelProperty(value = "支付单编号", required = true, example = "1024")
+ @NotNull(message = "支付单编号不能为空")
+ private Long id;
+
+ @ApiModelProperty(value = "支付渠道", required = true, example = "wx_pub")
+ @NotEmpty(message = "支付渠道不能为空")
+ private String channelCode;
+
+ @ApiModelProperty(value = "支付渠道的额外参数", notes = "例如说,微信公众号需要传递 openid 参数")
+ private Map channelExtras;
+
+}
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayOrderSubmitRespVO.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayOrderSubmitRespVO.java
new file mode 100644
index 000000000..907a97946
--- /dev/null
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/controller/order/vo/PayOrderSubmitRespVO.java
@@ -0,0 +1,23 @@
+package cn.iocoder.yudao.userserver.modules.pay.controller.order.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+@ApiModel("支付订单提交 Response VO")
+@Data
+@Accessors(chain = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PayOrderSubmitRespVO {
+
+ /**
+ * 调用支付渠道的响应结果
+ */
+ private Object invokeResponse;
+
+}
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/package-info.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/package-info.java
new file mode 100644
index 000000000..1aa11cdd2
--- /dev/null
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/pay/package-info.java
@@ -0,0 +1,7 @@
+/**
+ * pay 包下,我们放支付业务,提供业务的支付能力。
+ * 例如说:商户、应用、支付、退款等等
+ *
+ * 缩写:pay
+ */
+package cn.iocoder.yudao.userserver.modules.pay;
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/shop/controller/ShopOrderController.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/shop/controller/ShopOrderController.java
new file mode 100644
index 000000000..4767c074d
--- /dev/null
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/shop/controller/ShopOrderController.java
@@ -0,0 +1,65 @@
+package cn.iocoder.yudao.userserver.modules.shop.controller;
+
+import cn.iocoder.yudao.coreservice.modules.pay.service.notify.vo.PayNotifyOrderReqVO;
+import cn.iocoder.yudao.coreservice.modules.pay.service.order.PayOrderCoreService;
+import cn.iocoder.yudao.coreservice.modules.pay.service.order.dto.PayOrderCreateReqDTO;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.date.DateUtils;
+import cn.iocoder.yudao.userserver.modules.shop.controller.vo.ShopOrderCreateRespVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.time.Duration;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
+
+@Api(tags = "商城订单")
+@RestController
+@RequestMapping("/shop/order")
+@Validated
+@Slf4j
+public class ShopOrderController {
+
+ @Resource
+ private PayOrderCoreService payOrderCoreService;
+
+ @PostMapping("/create")
+ @ApiOperation("创建商城订单")
+// @PreAuthenticated // TODO 暂时不加登陆验证,前端暂时没做好
+ public CommonResult create() {
+ // 假装创建商城订单
+ Long shopOrderId = System.currentTimeMillis();
+
+ // 创建对应的支付订单
+ PayOrderCreateReqDTO reqDTO = new PayOrderCreateReqDTO();
+ reqDTO.setAppId(6L);
+ reqDTO.setUserIp(getClientIP());
+ reqDTO.setMerchantOrderId(String.valueOf(System.currentTimeMillis()));
+ reqDTO.setSubject("标题:" + shopOrderId);
+ reqDTO.setBody("内容:" + shopOrderId);
+ reqDTO.setAmount(1); // 单位:分
+ reqDTO.setExpireTime(DateUtils.addTime(Duration.ofDays(1)));
+ Long payOrderId = payOrderCoreService.createPayOrder(reqDTO);
+
+ // 拼接返回
+ return success(ShopOrderCreateRespVO.builder().id(shopOrderId)
+ .payOrderId(payOrderId).build());
+ }
+
+ @PostMapping("/pay-notify")
+ @ApiOperation("支付回调")
+ public CommonResult payNotify(@RequestBody @Valid PayNotifyOrderReqVO reqVO) {
+ log.info("[payNotify][回调成功]");
+ return success(true);
+ }
+
+}
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/shop/controller/vo/ShopOrderCreateRespVO.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/shop/controller/vo/ShopOrderCreateRespVO.java
new file mode 100644
index 000000000..682afc4e9
--- /dev/null
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/shop/controller/vo/ShopOrderCreateRespVO.java
@@ -0,0 +1,21 @@
+package cn.iocoder.yudao.userserver.modules.shop.controller.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+
+@ApiModel("商城订单创建 Response VO")
+@Data
+@Builder
+@AllArgsConstructor
+public class ShopOrderCreateRespVO {
+
+ @ApiModelProperty(value = "商城订单编号", required = true, example = "1024")
+ private Long id;
+
+ @ApiModelProperty(value = "支付订单编号", required = true, example = "2048")
+ private Long payOrderId;
+
+}
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/shop/package-info.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/shop/package-info.java
new file mode 100644
index 000000000..c592130af
--- /dev/null
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/shop/package-info.java
@@ -0,0 +1,8 @@
+/**
+ * shop 包下,我们放商城业务
+ * 例如说:商品、订单等等
+ * 注意,目前仅仅作为 demo 演示,对接 pay 支付系统
+ *
+ * 缩写:shop
+ */
+package cn.iocoder.yudao.userserver.modules.shop;
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.java
index 2b1fd6161..6d18d53be 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.java
@@ -1,9 +1,12 @@
package cn.iocoder.yudao.userserver.modules.system.controller.auth;
+import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialService;
+import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.*;
import cn.iocoder.yudao.userserver.modules.system.service.auth.SysAuthService;
import cn.iocoder.yudao.userserver.modules.system.service.sms.SysSmsCodeService;
+import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -13,11 +16,13 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getUserAgent;
+import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@Api(tags = "认证")
@RestController
@@ -30,6 +35,9 @@ public class SysAuthController {
private SysAuthService authService;
@Resource
private SysSmsCodeService smsCodeService;
+ @Resource
+ private SysSocialService socialService;
+
@PostMapping("/login")
@ApiOperation("使用手机 + 密码登录")
@@ -70,42 +78,51 @@ public class SysAuthController {
})
public CommonResult socialAuthRedirect(@RequestParam("type") Integer type,
@RequestParam("redirectUri") String redirectUri) {
-// return CommonResult.success(socialService.getAuthorizeUrl(type, redirectUri));
- return null;
+ return CommonResult.success(socialService.getAuthorizeUrl(type, redirectUri));
+ }
+
+ // TODO @timfruit:这个接口,是要删除的么?
+ @GetMapping("/social-login-get")
+ @ApiOperation("微信公众号授权回调地址,输出social-login2的必要参数用于测试,使用 code 授权码")
+ @ResponseBody
+ @Deprecated
+ public CommonResult socialLoginGet(HttpServletRequest request,String code,String state) {
+ // 返回结果
+ MbrAuthSocialLoginReqVO reqVO = MbrAuthSocialLoginReqVO.builder().state(state).code(code).build();
+ reqVO.setType(12);
+ //输出social-login2的必要参数用于测试
+ System.out.println(JSON.toJSON(reqVO));
+ return success(reqVO);
}
@PostMapping("/social-login")
@ApiOperation("社交登录,使用 code 授权码")
- public CommonResult socialLogin(@RequestBody @Valid MbrAuthSocialLoginReqVO reqVO) {
-// String token = authService.socialLogin(reqVO, getClientIP(), getUserAgent());
-// // 返回结果
-// return success(MbrAuthLoginRespVO.builder().token(token).build());
- return null;
+ public CommonResult socialLogin(@RequestBody @Valid MbrAuthSocialLoginReqVO reqVO) {
+ String token = authService.socialLogin(reqVO, getClientIP(), getUserAgent());
+ return success(SysAuthLoginRespVO.builder().token(token).build());
}
+ // TODO @timfruit:社交登陆时,使用手机验证码来验证哈。这块我当时没设计好,改改,嘿嘿。
+
@PostMapping("/social-login2")
@ApiOperation("社交登录,使用 code 授权码 + 账号密码")
public CommonResult socialLogin2(@RequestBody @Valid MbrAuthSocialLogin2ReqVO reqVO) {
-// String token = authService.socialLogin2(reqVO, getClientIP(), getUserAgent());
-// // 返回结果
-// return success(MbrAuthLoginRespVO.builder().token(token).build());
- return null;
+ String token = authService.socialLogin2(reqVO, getClientIP(), getUserAgent());
+ return success(SysAuthLoginRespVO.builder().token(token).build());
}
@PostMapping("/social-bind")
@ApiOperation("社交绑定,使用 code 授权码")
public CommonResult socialBind(@RequestBody @Valid MbrAuthSocialBindReqVO reqVO) {
-// authService.socialBind(getLoginUserId(), reqVO);
-// return CommonResult.success(true);
- return null;
+ authService.socialBind(getLoginUserId(), reqVO);
+ return CommonResult.success(true);
}
@DeleteMapping("/social-unbind")
@ApiOperation("取消社交绑定")
public CommonResult socialUnbind(@RequestBody MbrAuthSocialUnbindReqVO reqVO) {
-// socialService.unbindSocialUser(getLoginUserId(), reqVO.getType(), reqVO.getUnionId());
-// return CommonResult.success(true);
- return null;
+ socialService.unbindSocialUser(getLoginUserId(), reqVO.getType(), reqVO.getUnionId(), UserTypeEnum.MEMBER);
+ return CommonResult.success(true);
}
}
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialBindReqVO.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialBindReqVO.java
index d866411d2..767446b5f 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialBindReqVO.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialBindReqVO.java
@@ -1,7 +1,7 @@
package cn.iocoder.yudao.userserver.modules.system.controller.auth.vo;
+import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum;
import cn.iocoder.yudao.framework.common.validation.InEnum;
-import cn.iocoder.yudao.userserver.modules.member.enums.social.SysSocialTypeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLogin2ReqVO.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLogin2ReqVO.java
index 371e7e9b3..584df7ed1 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLogin2ReqVO.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLogin2ReqVO.java
@@ -1,7 +1,7 @@
package cn.iocoder.yudao.userserver.modules.system.controller.auth.vo;
+import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum;
import cn.iocoder.yudao.framework.common.validation.InEnum;
-import cn.iocoder.yudao.userserver.modules.member.enums.social.SysSocialTypeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLoginReqVO.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLoginReqVO.java
index 5fdd424c1..cb430231a 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLoginReqVO.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLoginReqVO.java
@@ -1,7 +1,7 @@
package cn.iocoder.yudao.userserver.modules.system.controller.auth.vo;
+import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum;
import cn.iocoder.yudao.framework.common.validation.InEnum;
-import cn.iocoder.yudao.userserver.modules.member.enums.social.SysSocialTypeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialUnbindReqVO.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialUnbindReqVO.java
index ea9050a29..75e31701d 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialUnbindReqVO.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialUnbindReqVO.java
@@ -1,7 +1,7 @@
package cn.iocoder.yudao.userserver.modules.system.controller.auth.vo;
+import cn.iocoder.yudao.coreservice.modules.system.enums.social.SysSocialTypeEnum;
import cn.iocoder.yudao.framework.common.validation.InEnum;
-import cn.iocoder.yudao.userserver.modules.member.enums.social.SysSocialTypeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/SysErrorCodeConstants.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/SysErrorCodeConstants.java
index e5f4ac678..f24be9cc6 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/SysErrorCodeConstants.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/enums/SysErrorCodeConstants.java
@@ -14,6 +14,7 @@ public interface SysErrorCodeConstants {
ErrorCode AUTH_LOGIN_USER_DISABLED = new ErrorCode(1005000001, "登录失败,账号被禁用");
ErrorCode AUTH_LOGIN_FAIL_UNKNOWN = new ErrorCode(1005000002, "登录失败"); // 登录失败的兜底,未知原因
ErrorCode AUTH_TOKEN_EXPIRED = new ErrorCode(1005000003, "Token 已经过期");
+ ErrorCode AUTH_THIRD_LOGIN_NOT_BIND = new ErrorCode(1005000004, "未绑定账号,需要进行绑定");
// ========== SMS CODE 模块 1005001000 ==========
ErrorCode USER_SMS_CODE_NOT_FOUND = new ErrorCode(1005001000, "验证码不存在");
@@ -22,4 +23,7 @@ public interface SysErrorCodeConstants {
ErrorCode USER_SMS_CODE_NOT_CORRECT = new ErrorCode(1005001003, "验证码不正确");
ErrorCode USER_SMS_CODE_EXCEED_SEND_MAXIMUM_QUANTITY_PER_DAY = new ErrorCode(1005001004, "超过每日短信发送数量");
ErrorCode USER_SMS_CODE_SEND_TOO_FAST = new ErrorCode(1005001005, "短信发送过于频率");
+
+ // ========== 用户模块 1005002000 ==========
+ ErrorCode USER_NOT_EXISTS = new ErrorCode(1005002001, "用户不存在");
}
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/SysAuthService.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/SysAuthService.java
index b35d1c27a..628f95c80 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/SysAuthService.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/SysAuthService.java
@@ -1,8 +1,7 @@
package cn.iocoder.yudao.userserver.modules.system.service.auth;
import cn.iocoder.yudao.framework.security.core.service.SecurityAuthFrameworkService;
-import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.SysAuthLoginReqVO;
-import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.SysAuthSmsLoginReqVO;
+import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.*;
import javax.validation.Valid;
@@ -35,4 +34,33 @@ public interface SysAuthService extends SecurityAuthFrameworkService {
*/
String smsLogin(@Valid SysAuthSmsLoginReqVO reqVO, String userIp, String userAgent);
+
+ /**
+ * 社交登录,使用 code 授权码
+ *
+ * @param reqVO 登录信息
+ * @param userIp 用户 IP
+ * @param userAgent 用户 UA
+ * @return 身份令牌,使用 JWT 方式
+ */
+ String socialLogin(@Valid MbrAuthSocialLoginReqVO reqVO, String userIp, String userAgent);
+
+ /**
+ * 社交登录,使用 code 授权码 + 账号密码
+ *
+ * @param reqVO 登录信息
+ * @param userIp 用户 IP
+ * @param userAgent 用户 UA
+ * @return 身份令牌,使用 JWT 方式
+ */
+ String socialLogin2(@Valid MbrAuthSocialLogin2ReqVO reqVO, String userIp, String userAgent);
+
+ /**
+ * 社交绑定,使用 code 授权码
+ *
+ * @param userId 用户编号
+ * @param reqVO 绑定信息
+ */
+ void socialBind(Long userId, @Valid MbrAuthSocialBindReqVO reqVO);
+
}
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
index 0199c078e..2394cd03a 100644
--- a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
@@ -1,25 +1,28 @@
package cn.iocoder.yudao.userserver.modules.system.service.auth.impl;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO;
+import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.social.SysSocialUserDO;
import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginLogTypeEnum;
import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginResultEnum;
import cn.iocoder.yudao.coreservice.modules.system.service.auth.SysUserSessionCoreService;
import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
+import cn.iocoder.yudao.coreservice.modules.system.service.social.SysSocialService;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
import cn.iocoder.yudao.framework.security.core.LoginUser;
import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService;
-import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.SysAuthLoginReqVO;
-import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.SysAuthSmsLoginReqVO;
+import cn.iocoder.yudao.userserver.modules.system.controller.auth.vo.*;
import cn.iocoder.yudao.userserver.modules.system.convert.auth.SysAuthConvert;
import cn.iocoder.yudao.userserver.modules.system.enums.sms.SysSmsSceneEnum;
import cn.iocoder.yudao.userserver.modules.system.service.auth.SysAuthService;
import cn.iocoder.yudao.userserver.modules.system.service.sms.SysSmsCodeService;
import lombok.extern.slf4j.Slf4j;
+import me.zhyd.oauth.model.AuthUser;
import org.springframework.context.annotation.Lazy;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
@@ -33,6 +36,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
+import java.util.List;
import java.util.Objects;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -59,6 +63,9 @@ public class SysAuthServiceImpl implements SysAuthService {
private SysLoginLogCoreService loginLogCoreService;
@Resource
private SysUserSessionCoreService userSessionCoreService;
+ @Resource
+ private SysSocialService socialService;
+ private static final UserTypeEnum userTypeEnum = UserTypeEnum.MEMBER;
@Override
public UserDetails loadUserByUsername(String mobile) throws UsernameNotFoundException {
@@ -99,6 +106,63 @@ public class SysAuthServiceImpl implements SysAuthService {
return userSessionCoreService.createUserSession(loginUser, userIp, userAgent);
}
+ @Override
+ public String socialLogin(MbrAuthSocialLoginReqVO reqVO, String userIp, String userAgent) {
+ // 使用 code 授权码,进行登录
+ AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState());
+ org.springframework.util.Assert.notNull(authUser, "授权用户不为空");
+
+ // 如果未绑定 SysSocialUserDO 用户,则无法自动登录,进行报错
+ String unionId = socialService.getAuthUserUnionId(authUser);
+ List socialUsers = socialService.getAllSocialUserList(reqVO.getType(), unionId, userTypeEnum);
+ if (CollUtil.isEmpty(socialUsers)) {
+ throw exception(AUTH_THIRD_LOGIN_NOT_BIND);
+ }
+
+ // 自动登录
+ MbrUserDO user = userService.getUser(socialUsers.get(0).getUserId());
+ if (user == null) {
+ throw exception(USER_NOT_EXISTS);
+ }
+ this.createLoginLog(user.getMobile(), SysLoginLogTypeEnum.LOGIN_SOCIAL, SysLoginResultEnum.SUCCESS);
+
+ // 创建 LoginUser 对象
+ LoginUser loginUser = SysAuthConvert.INSTANCE.convert(user);
+
+ // 绑定社交用户(更新)
+ socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, userTypeEnum);
+
+ // 缓存登录用户到 Redis 中,返回 sessionId 编号
+ return userSessionCoreService.createUserSession(loginUser, userIp, userAgent);
+ }
+
+ @Override
+ public String socialLogin2(MbrAuthSocialLogin2ReqVO reqVO, String userIp, String userAgent) {
+ // 使用 code 授权码,进行登录
+ AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState());
+ org.springframework.util.Assert.notNull(authUser, "授权用户不为空");
+
+ // 使用账号密码,进行登录。
+ LoginUser loginUser = this.login0(reqVO.getUsername(), reqVO.getPassword());
+// loginUser.setRoleIds(this.getUserRoleIds(loginUser.getId())); // 获取用户角色列表
+
+ // 绑定社交用户(新增)
+ socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, userTypeEnum);
+
+ // 缓存登录用户到 Redis 中,返回 sessionId 编号
+ return userSessionCoreService.createUserSession(loginUser, userIp, userAgent);
+ }
+
+ @Override
+ public void socialBind(Long userId, MbrAuthSocialBindReqVO reqVO) {
+ // 使用 code 授权码,进行登录
+ AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState());
+ org.springframework.util.Assert.notNull(authUser, "授权用户不为空");
+
+ // 绑定社交用户(新增)
+ socialService.bindSocialUser(userId, reqVO.getType(), authUser, userTypeEnum);
+ }
+
private LoginUser login0(String username, String password) {
final SysLoginLogTypeEnum logTypeEnum = SysLoginLogTypeEnum.LOGIN_USERNAME;
// 用户验证
@@ -207,7 +271,7 @@ public class SysAuthServiceImpl implements SysAuthService {
reqDTO.setLogType(SysLoginLogTypeEnum.LOGOUT_SELF.getType());
reqDTO.setTraceId(TracerUtils.getTraceId());
reqDTO.setUserId(userId);
- reqDTO.setUserType(UserTypeEnum.MEMBER.getValue());
+ reqDTO.setUserType(userTypeEnum.getValue());
reqDTO.setUsername(username);
reqDTO.setUserAgent(ServletUtils.getUserAgent());
reqDTO.setUserIp(ServletUtils.getClientIP());
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/controller/mp/WxMpController.http b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/controller/mp/WxMpController.http
new file mode 100644
index 000000000..60f28c64d
--- /dev/null
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/controller/mp/WxMpController.http
@@ -0,0 +1,2 @@
+### 请求 /login 接口 => 成功
+GET {{userServerUrl}}/wx/mp/get-jsapi-ticket
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/controller/mp/WxMpController.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/controller/mp/WxMpController.java
new file mode 100644
index 000000000..decd907a0
--- /dev/null
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/controller/mp/WxMpController.java
@@ -0,0 +1,37 @@
+package cn.iocoder.yudao.userserver.modules.weixin.controller.mp;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.bean.WxJsapiSignature;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.mp.api.WxMpService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+@Api(tags = "微信公众号")
+@RestController
+@RequestMapping("/wx/mp")
+@Validated
+@Slf4j
+public class WxMpController {
+
+ @Resource
+ private WxMpService mpService;
+
+ @PostMapping("/create-jsapi-signature")
+ @ApiOperation(value = "创建微信 JS SDK 初始化所需的签名",
+ notes = "参考 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html 文档")
+ public CommonResult createJsapiSignature(@RequestParam("url") String url) throws WxErrorException {
+ return success(mpService.createJsapiSignature(url));
+ }
+
+}
diff --git a/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/package-info.java b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/package-info.java
new file mode 100644
index 000000000..69d3e2221
--- /dev/null
+++ b/yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/package-info.java
@@ -0,0 +1,7 @@
+/**
+ * weixin 包下,我们放通用业务,支撑上层的核心业务。
+ * 例如说:用户、部门、权限、数据字典等等
+ *
+ * 缩写:wx
+ */
+package cn.iocoder.yudao.userserver.modules.weixin;
diff --git a/yudao-user-server/src/main/resources/application-dev.yaml b/yudao-user-server/src/main/resources/application-dev.yaml
index b6bfbd1dd..858e97739 100644
--- a/yudao-user-server/src/main/resources/application-dev.yaml
+++ b/yudao-user-server/src/main/resources/application-dev.yaml
@@ -138,3 +138,33 @@ yudao:
- ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求
- ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求
demo: true # 开启演示模式
+ pay:
+ pay-notify-url: http://niubi.natapp1.cc/api/pay/order/notify
+ refund-notify-url: http://niubi.natapp1.cc/api/pay/refund/notify
+
+
+justauth:
+ enabled: true
+ type: # TODO @timfruit:GITEE、DINGTALK、WECHAT_ENTERPRISE 这个几个,对于用户端是不需要的哈,可以删除噢
+ GITEE: # Gitee
+ client-id: ee61f0374a4c6c404a8717094caa7a410d76950e45ff60348015830c519ba5c1
+ client-secret: 7c044a5671be3b051414db0cf2cec6ad702dd298d2416ba24ceaf608e6fa26f9
+ ignore-check-redirect-uri: true
+ DINGTALK: # 钉钉
+ client-id: dingvrnreaje3yqvzhxg
+ client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI
+ ignore-check-redirect-uri: true
+ WECHAT_ENTERPRISE: # 企业微信
+ client-id: wwd411c69a39ad2e54
+ client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw
+ agent-id: 1000004
+ ignore-check-redirect-uri: true
+ WECHAT_MP: # 微信公众平台 - H5 https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
+ client-id: wxa5a05b85ac361f96
+ client-secret: 247073c7cebb67f27f0e769195c2a57e
+ ignore-check-redirect-uri: true
+ cache:
+ type: REDIS
+ prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
+ timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟
+
diff --git a/yudao-user-server/src/main/resources/application-local.yaml b/yudao-user-server/src/main/resources/application-local.yaml
index 506ee19f6..c39a7cb1b 100644
--- a/yudao-user-server/src/main/resources/application-local.yaml
+++ b/yudao-user-server/src/main/resources/application-local.yaml
@@ -121,6 +121,18 @@ logging:
file:
name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径
+--- #################### 微信公众号相关配置 ####################
+wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档
+ mp:
+ # 公众号配置(必填)
+ app-id: wx041349c6f39b268b
+ secret: 5abee519483bc9f8cb37ce280e814bd0
+ # 存储配置,解决 AccessToken 的跨节点的共享
+ config-storage:
+ type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
+ key-prefix: wx # Redis Key 的前缀 TODO 芋艿:解决下 Redis key 管理的配置
+ http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
+
--- #################### 芋道相关配置 ####################
# 芋道配置项,设置当前项目所有自定义的配置
@@ -140,3 +152,31 @@ yudao:
- ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求
- ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求
demo: false # 关闭演示模式
+ pay:
+ pay-notify-url: http://niubi.natapp1.cc/api/pay/order/notify
+ refund-notify-url: http://niubi.natapp1.cc/api/pay/refund/notify
+
+justauth:
+ enabled: true
+ type:
+ WECHAT_MP: # 微信公众平台 - 移动端 H5 https://www.yuque.com/docs/share/a795bef6-ee8a-494a-8dc4-2ef41927743b?#%20%E3%80%8A%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E6%B5%8B%E8%AF%95%E3%80%8B
+ client-id: wxa5a05b85ac361f96
+ client-secret: 247073c7cebb67f27f0e769195c2a57e
+# client-id: wx5b23ba7a5589ecbb # TODO 芋艿:自己的测试,后续可以删除
+# client-secret: 2a7b3b20c537e52e74afd395eb85f61f
+ ignore-check-redirect-uri: true
+ extend:
+ enum-class: cn.iocoder.yudao.coreservice.modules.system.compent.justauth.AuthExtendSource
+ config:
+ WECHAT_MINI_PROGRAM: # 微信小程序 https://www.yuque.com/docs/share/88e3d30a-6830-45fc-8c25-dae485aef3aa?#%20%E3%80%8A%E5%B0%8F%E7%A8%8B%E5%BA%8F%E6%8E%88%E6%9D%83%E7%99%BB%E5%BD%95%E3%80%8B
+ request-class: cn.iocoder.yudao.coreservice.modules.system.compent.justauth.AuthWeChatMiniProgramRequest
+ client-id: wx44d047d87e6284d8
+ client-secret: 21c3b7a8a51ee1b8f5cf875848ed4466
+# client-id: wx63c280fe3248a3e7 # TODO 芋艿:自己的测试,后续可以删除
+# client-secret: 6f270509224a7ae1296bbf1c8cb97aed
+ ignore-check-redirect-uri: true
+ ignore-check-state: true
+ cache:
+ type: REDIS
+ prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
+ timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟
diff --git a/yudao-user-server/src/main/resources/application.yaml b/yudao-user-server/src/main/resources/application.yaml
index 4e1d1f279..209543380 100644
--- a/yudao-user-server/src/main/resources/application.yaml
+++ b/yudao-user-server/src/main/resources/application.yaml
@@ -20,6 +20,10 @@ spring:
write-durations-as-timestamps: true # 设置 Duration 的格式,使用时间戳
fail-on-empty-beans: false # 允许序列化无属性的 Bean
+ # 静态资源
+ mvc:
+ static-path-pattern: /static/**
+
# MyBatis Plus 的配置项
mybatis-plus:
configuration:
@@ -33,6 +37,8 @@ mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
type-aliases-package: ${yudao.info.base-package}.modules.*.dal.dataobject, ${yudao.core-service.base-package}.modules.*.dal.dataobject
+
+
--- #################### 芋道相关配置 ####################
yudao:
diff --git a/yudao-user-server/src/main/resources/static/MP_verify_DKOvVzFP7vPwwHx2.txt b/yudao-user-server/src/main/resources/static/MP_verify_DKOvVzFP7vPwwHx2.txt
new file mode 100644
index 000000000..ee06c0a6b
--- /dev/null
+++ b/yudao-user-server/src/main/resources/static/MP_verify_DKOvVzFP7vPwwHx2.txt
@@ -0,0 +1 @@
+DKOvVzFP7vPwwHx2
\ No newline at end of file
diff --git a/yudao-user-server/src/main/resources/static/pay.html b/yudao-user-server/src/main/resources/static/pay.html
new file mode 100644
index 000000000..2a80e869d
--- /dev/null
+++ b/yudao-user-server/src/main/resources/static/pay.html
@@ -0,0 +1,117 @@
+
+
+
+
+
+ 支付测试页
+
+
+
+
+点击如下按钮,发起支付的测试
+
+
+
+
+
+
diff --git a/yudao-user-server/src/main/resources/static/social-login.html b/yudao-user-server/src/main/resources/static/social-login.html
new file mode 100644
index 000000000..2570d7084
--- /dev/null
+++ b/yudao-user-server/src/main/resources/static/social-login.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+ 社交登陆测试页
+
+
+
+点击如下按钮,发起登陆的测试
+
+
+
+
+
+
diff --git a/yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/BaseDbUnitTest.java b/yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/BaseDbUnitTest.java
new file mode 100644
index 000000000..af8d71a0c
--- /dev/null
+++ b/yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/BaseDbUnitTest.java
@@ -0,0 +1,39 @@
+package cn.iocoder.yudao.userserver;
+
+import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration;
+import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration;
+import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
+import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Import;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.jdbc.Sql;
+
+/**
+ * 依赖内存 DB 的单元测试
+ *
+ * 注意,Service 层同样适用。对于 Service 层的单元测试,我们针对自己模块的 Mapper 走的是 H2 内存数据库,针对别的模块的 Service 走的是 Mock 方法
+ *
+ * @author 芋道源码
+ */
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbUnitTest.Application.class)
+@ActiveProfiles("unit-test") // 设置使用 application-unit-test 配置文件
+@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // 每个单元测试结束后,清理 DB
+public class BaseDbUnitTest {
+
+ @Import({
+ // DB 配置类
+ YudaoDataSourceAutoConfiguration.class, // 自己的 DB 配置类
+ DataSourceAutoConfiguration.class, // Spring DB 自动配置类
+ DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动配置类
+ DruidDataSourceAutoConfigure.class, // Druid 自动配置类
+ // MyBatis 配置类
+ YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis 配置类
+ MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类
+ })
+ public static class Application {
+ }
+
+}
diff --git a/yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/modules/member/service/MbrUserServiceImplTest.java b/yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/modules/member/service/MbrUserServiceImplTest.java
new file mode 100644
index 000000000..3639c25db
--- /dev/null
+++ b/yudao-user-server/src/test/java/cn/iocoder/yudao/userserver/modules/member/service/MbrUserServiceImplTest.java
@@ -0,0 +1,107 @@
+package cn.iocoder.yudao.userserver.modules.member.service;
+
+import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService;
+import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO;
+import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
+import cn.iocoder.yudao.userserver.BaseDbUnitTest;
+import cn.iocoder.yudao.userserver.modules.member.controller.user.vo.MbrUserInfoRespVO;
+import cn.iocoder.yudao.userserver.modules.member.dal.mysql.user.MbrUserMapper;
+import cn.iocoder.yudao.userserver.modules.member.service.user.impl.MbrUserServiceImpl;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.context.annotation.Import;
+import org.springframework.http.MediaType;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.util.Assert;
+
+import javax.annotation.Resource;
+import java.io.*;
+import java.util.function.Consumer;
+
+import static cn.hutool.core.util.RandomUtil.randomBytes;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static cn.hutool.core.util.RandomUtil.randomEle;
+import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
+import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString;
+import static org.mockito.Mockito.*;
+/**
+ * {@link MbrUserServiceImpl} 的单元测试类
+ *
+ * @author 宋天
+ */
+@Import(MbrUserServiceImpl.class)
+public class MbrUserServiceImplTest extends BaseDbUnitTest {
+
+ @Resource
+ private MbrUserServiceImpl mbrUserService;
+
+ @Resource
+ private MbrUserMapper userMapper;
+
+ @MockBean
+ private InfFileCoreService fileCoreService;
+
+ @MockBean
+ private PasswordEncoder passwordEncoder;
+
+ @Test
+ public void testUpdateNickName_success(){
+ // mock 数据
+ MbrUserDO userDO = randomMbrUserDO();
+ userMapper.insert(userDO);
+
+ // 随机昵称
+ String newNickName = randomString();
+
+ // 调用接口修改昵称
+ mbrUserService.updateNickname(userDO.getId(),newNickName);
+ // 查询新修改后的昵称
+ String nickname = mbrUserService.getUser(userDO.getId()).getNickname();
+ // 断言
+ assertEquals(newNickName,nickname);
+ }
+
+ @Test
+ public void testGetUserInfo_success(){
+ // mock 数据
+ MbrUserDO userDO = randomMbrUserDO();
+ userMapper.insert(userDO);
+
+ // 查询用户昵称与头像
+ MbrUserInfoRespVO userInfo = mbrUserService.getUserInfo(userDO.getId());
+ System.out.println(userInfo);
+ }
+
+ @Test
+ public void testUpdateAvatar_success(){
+ // mock 数据
+ MbrUserDO dbUser = randomMbrUserDO();
+ userMapper.insert(dbUser);
+
+ // 准备参数
+ Long userId = dbUser.getId();
+ byte[] avatarFileBytes = randomBytes(10);
+ ByteArrayInputStream avatarFile = new ByteArrayInputStream(avatarFileBytes);
+ // mock 方法
+ String avatar = randomString();
+ when(fileCoreService.createFile(anyString(), eq(avatarFileBytes))).thenReturn(avatar);
+ // 调用
+ String str = mbrUserService.updateAvatar(userId, avatarFile);
+ // 断言
+ assertEquals(avatar, str);
+ }
+
+ // ========== 随机对象 ==========
+
+ @SafeVarargs
+ private static MbrUserDO randomMbrUserDO(Consumer... consumers) {
+ Consumer consumer = (o) -> {
+ o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围
+ };
+ return randomPojo(MbrUserDO.class, ArrayUtils.append(consumer, consumers));
+ }
+
+}
diff --git a/yudao-user-server/src/test/resources/application-unit-test.yaml b/yudao-user-server/src/test/resources/application-unit-test.yaml
new file mode 100644
index 000000000..d306a7af4
--- /dev/null
+++ b/yudao-user-server/src/test/resources/application-unit-test.yaml
@@ -0,0 +1,44 @@
+spring:
+ main:
+ lazy-initialization: true # 开启懒加载,加快速度
+ banner-mode: off # 单元测试,禁用 Banner
+
+--- #################### 数据库相关配置 ####################
+
+spring:
+ # 数据源配置项
+ datasource:
+ name: ruoyi-vue-pro
+ url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写
+ driver-class-name: org.h2.Driver
+ username: sa
+ password:
+ schema: classpath:sql/create_tables.sql # MySQL 转 H2 的语句,使用 https://www.jooq.org/translate/ 工具
+ druid:
+ async-init: true # 单元测试,异步初始化 Druid 连接池,提升启动速度
+ initial-size: 1 # 单元测试,配置为 1,提升启动速度
+
+ # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
+ redis:
+ host: 127.0.0.1 # 地址
+ port: 16379 # 端口(单元测试,使用 16379 端口)
+ database: 0 # 数据库索引
+
+mybatis:
+ lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试
+
+--- #################### 定时任务相关配置 ####################
+
+--- #################### 配置中心相关配置 ####################
+
+--- #################### 服务保障相关配置 ####################
+
+# Lock4j 配置项(单元测试,禁用 Lock4j)
+
+# Resilience4j 配置项
+
+--- #################### 监控相关配置 ####################
+
+--- #################### 芋道相关配置 ####################
+
+# 芋道配置项,设置当前项目所有自定义的配置
diff --git a/yudao-user-server/src/test/resources/file/erweima.jpg b/yudao-user-server/src/test/resources/file/erweima.jpg
new file mode 100644
index 000000000..1447283cd
Binary files /dev/null and b/yudao-user-server/src/test/resources/file/erweima.jpg differ
diff --git a/yudao-user-server/src/test/resources/logback-spring.xml b/yudao-user-server/src/test/resources/logback-spring.xml
new file mode 100644
index 000000000..daf756bff
--- /dev/null
+++ b/yudao-user-server/src/test/resources/logback-spring.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/yudao-user-server/src/test/resources/sql/clean.sql b/yudao-user-server/src/test/resources/sql/clean.sql
new file mode 100644
index 000000000..bedf8d008
--- /dev/null
+++ b/yudao-user-server/src/test/resources/sql/clean.sql
@@ -0,0 +1,2 @@
+-- mbr 开头的 DB
+DELETE FROM "mbr_user";
\ No newline at end of file
diff --git a/yudao-user-server/src/test/resources/sql/create_tables.sql b/yudao-user-server/src/test/resources/sql/create_tables.sql
new file mode 100644
index 000000000..306900101
--- /dev/null
+++ b/yudao-user-server/src/test/resources/sql/create_tables.sql
@@ -0,0 +1,32 @@
+-- mbr 开头的 DB
+CREATE TABLE IF NOT EXISTS "mbr_user" (
+ "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '编号',
+ "nickname" varchar(30) NOT NULL DEFAULT '' COMMENT '用户昵称',
+ "avatar" varchar(255) NOT NULL DEFAULT '' COMMENT '头像',
+ "status" tinyint NOT NULL COMMENT '状态',
+ "mobile" varchar(11) NOT NULL COMMENT '手机号',
+ "password" varchar(100) NOT NULL DEFAULT '' COMMENT '密码',
+ "register_ip" varchar(32) NOT NULL COMMENT '注册 IP',
+ "login_ip" varchar(50) NULL DEFAULT '' COMMENT '最后登录IP',
+ "login_date" datetime NULL DEFAULT NULL COMMENT '最后登录时间',
+ "creator" varchar(64) NULL DEFAULT '' COMMENT '创建者',
+ "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ "updater" varchar(64) NULL DEFAULT '' COMMENT '更新者',
+ "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ "deleted" bit(1) NOT NULL DEFAULT '0' COMMENT '是否删除',
+ PRIMARY KEY ("id")
+) COMMENT '会员表';
+
+-- inf 开头的 DB
+CREATE TABLE IF NOT EXISTS "inf_file" (
+ "id" varchar(188) NOT NULL,
+ "type" varchar(63) DEFAULT NULL,
+ "content" blob NOT NULL,
+ "creator" varchar(64) DEFAULT '',
+ "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updater" varchar(64) DEFAULT '',
+ "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "deleted" bit NOT NULL DEFAULT FALSE,
+ PRIMARY KEY ("id")
+) COMMENT '文件表';
+
diff --git a/更新日志.md b/更新日志.md
index 206599b25..cd0c94006 100644
--- a/更新日志.md
+++ b/更新日志.md
@@ -3,21 +3,26 @@
* 邮件
* 钉钉、飞书等通知
-## [v1.2.0] 待定
+## [v1.3.0] 待定
* 工作流
-## [v1.1.1] 待定
+## [v1.2.0] 进行中
+
+* 新增用户前台的昵称、头像的修改
+
+TODO
* 支付
* 用户前台的社交登陆
+* 用户前台的修改手机、修改密码、忘记密码
-## [v1.1.0] 进行中
+## [v1.1.0] 2021.10.25
* 新增管理后台的企业微信、钉钉等社交登录
* 新增用户前台(例如说,用户使用的小程序)的后端项目 `yudao-user-server`
* 新增公共服务 `yudao-core-service` 项目,通过 Jar 包的方式,提供 `yudao-user-server` 和 `yudao-admin-server` 的共享逻辑的复用
-* 新增用户前台的手机登录、验证码登录
+* 新增用户前台的手机登录、验证码登录
* 修复管理后台的用户头像上传 404 的问题,原因是请求路径不对
* 修复用户导入失败的问题,原因是 Lombok 链式与 cglib 读取属性有冲突
* 修复阿里云短信发送失败的问题,原因是 Opentracing 依赖的版本太低,调整成 0.31.0
@@ -34,7 +39,7 @@
### 代码的重构
* 调整整体代码结构,将多个 Maven Module 合并为单个,使用 Java package 进行拆分隔离,如 [图](https://static.iocoder.cn/ruoyi-vue-pro-modules.jpg) 所示。原因是:随着业务逻辑的逐步复杂,多个 Maven Module 的依赖关系的管理,会是一个很大的问题。
-* 拆分 [framework](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-framework) 为多个 Maven Module,按照 [Web](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-framework/yudao-spring-boot-starter-web)、[Security](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-framework/yudao-spring-boot-starter-security)、[MyBatis](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-framework/yudao-spring-boot-starter-mybatis)、[Redis](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-framework/yudao-spring-boot-starter-redis) 等不同组件,进行封装与拓展。
+* 拆分 [framework](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-framework) 为多个 Maven Module,按照 [Web](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-framework/yudao-spring-boot-starter-web)、[Security](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-framework/yudao-spring-boot-starter-security)、[MyBatis](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-framework/yudao-spring-boot-starter-mybatis)、[Redis](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-framework/yudao-spring-boot-starter-redis) 等不同组件,进行封装与拓展。
* 基于 [JUnit5](https://junit.org/junit5/) 与 [Mockito](https://github.com/mockito/mockito),实现单元测试,保证功能的正确性,与代码的可维护性。一直自动化,一直爽!
* 增加 SpringBoot 多环境的配置文件,提供完善的 [deploy.sh](https://gitee.com/zhijiantianya/ruoyi-vue-pro/blob/master/bin/deploy.sh) 部署脚本,以及 [Jenkins 部署教程](https://juejin.cn/post/6942098287533129765)。
* 优化 [Spring Security](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-framework/yudao-spring-boot-starter-security) 实现权限的代码,提升可读性和维护性。