Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
IJPay
提交
672bc8d3
I
IJPay
项目概览
int
/
IJPay
9 个月 前同步成功
通知
4
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
IJPay
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
672bc8d3
编写于
10月 05, 2022
作者:
J
Javen205
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
✨
新增支付宝支付 springboot starter 示例
上级
338a4e2b
变更
14
隐藏空白更改
内联
并排
Showing
14 changed file
with
1257 addition
and
0 deletion
+1257
-0
IJPay-Plugin/IJPay-AliPay-Starter-Demo/.gitignore
IJPay-Plugin/IJPay-AliPay-Starter-Demo/.gitignore
+49
-0
IJPay-Plugin/IJPay-AliPay-Starter-Demo/.mvn/wrapper/maven-wrapper.jar
.../IJPay-AliPay-Starter-Demo/.mvn/wrapper/maven-wrapper.jar
+0
-0
IJPay-Plugin/IJPay-AliPay-Starter-Demo/.mvn/wrapper/maven-wrapper.properties
...AliPay-Starter-Demo/.mvn/wrapper/maven-wrapper.properties
+2
-0
IJPay-Plugin/IJPay-AliPay-Starter-Demo/mvnw
IJPay-Plugin/IJPay-AliPay-Starter-Demo/mvnw
+316
-0
IJPay-Plugin/IJPay-AliPay-Starter-Demo/mvnw.cmd
IJPay-Plugin/IJPay-AliPay-Starter-Demo/mvnw.cmd
+188
-0
IJPay-Plugin/IJPay-AliPay-Starter-Demo/pom.xml
IJPay-Plugin/IJPay-AliPay-Starter-Demo/pom.xml
+78
-0
IJPay-Plugin/IJPay-AliPay-Starter-Demo/src/main/java/com/ijpay/AliPayStarterDemoApplication.java
...src/main/java/com/ijpay/AliPayStarterDemoApplication.java
+30
-0
IJPay-Plugin/IJPay-AliPay-Starter-Demo/src/main/java/com/ijpay/config/AliPayConfigurer.java
...Demo/src/main/java/com/ijpay/config/AliPayConfigurer.java
+79
-0
IJPay-Plugin/IJPay-AliPay-Starter-Demo/src/main/java/com/ijpay/config/StartupRunner.java
...er-Demo/src/main/java/com/ijpay/config/StartupRunner.java
+28
-0
IJPay-Plugin/IJPay-AliPay-Starter-Demo/src/main/java/com/ijpay/controller/AliPayController.java
.../src/main/java/com/ijpay/controller/AliPayController.java
+275
-0
IJPay-Plugin/IJPay-AliPay-Starter-Demo/src/main/java/com/ijpay/utils/StringUtils.java
...arter-Demo/src/main/java/com/ijpay/utils/StringUtils.java
+150
-0
IJPay-Plugin/IJPay-AliPay-Starter-Demo/src/main/resources/application-prod.yml
...iPay-Starter-Demo/src/main/resources/application-prod.yml
+45
-0
IJPay-Plugin/IJPay-AliPay-Starter-Demo/src/main/resources/application.yml
...ay-AliPay-Starter-Demo/src/main/resources/application.yml
+4
-0
IJPay-Plugin/IJPay-AliPay-Starter-Demo/src/main/resources/banner.txt
...n/IJPay-AliPay-Starter-Demo/src/main/resources/banner.txt
+13
-0
未找到文件。
IJPay-Plugin/IJPay-AliPay-Starter-Demo/.gitignore
0 → 100644
浏览文件 @
672bc8d3
HELP.md
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**
!**/src/test/**
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
### VS Code ###
.vscode/
### maven ###
target/
*.war
*.ear
*.zip
*.tar
*.tar.gz
###############
application-dev.yml
### system ignore ###
.DS_Store
Thumbs.db
Servers
.metadata
upload
gen_code
IJPay-Plugin/IJPay-AliPay-Starter-Demo/.mvn/wrapper/maven-wrapper.jar
0 → 100644
浏览文件 @
672bc8d3
文件已添加
IJPay-Plugin/IJPay-AliPay-Starter-Demo/.mvn/wrapper/maven-wrapper.properties
0 → 100644
浏览文件 @
672bc8d3
distributionUrl
=
https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
wrapperUrl
=
https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
IJPay-Plugin/IJPay-AliPay-Starter-Demo/mvnw
0 → 100755
浏览文件 @
672bc8d3
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if
[
-z
"
$MAVEN_SKIP_RC
"
]
;
then
if
[
-f
/usr/local/etc/mavenrc
]
;
then
.
/usr/local/etc/mavenrc
fi
if
[
-f
/etc/mavenrc
]
;
then
.
/etc/mavenrc
fi
if
[
-f
"
$HOME
/.mavenrc"
]
;
then
.
"
$HOME
/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin
=
false
;
darwin
=
false
;
mingw
=
false
case
"
`
uname
`
"
in
CYGWIN
*
)
cygwin
=
true
;;
MINGW
*
)
mingw
=
true
;;
Darwin
*
)
darwin
=
true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if
[
-z
"
$JAVA_HOME
"
]
;
then
if
[
-x
"/usr/libexec/java_home"
]
;
then
export
JAVA_HOME
=
"
`
/usr/libexec/java_home
`
"
else
export
JAVA_HOME
=
"/Library/Java/Home"
fi
fi
;;
esac
if
[
-z
"
$JAVA_HOME
"
]
;
then
if
[
-r
/etc/gentoo-release
]
;
then
JAVA_HOME
=
`
java-config
--jre-home
`
fi
fi
if
[
-z
"
$M2_HOME
"
]
;
then
## resolve links - $0 may be a link to maven's home
PRG
=
"
$0
"
# need this for relative symlinks
while
[
-h
"
$PRG
"
]
;
do
ls
=
`
ls
-ld
"
$PRG
"
`
link
=
`
expr
"
$ls
"
:
'.*-> \(.*\)$'
`
if
expr
"
$link
"
:
'/.*'
>
/dev/null
;
then
PRG
=
"
$link
"
else
PRG
=
"
`
dirname
"
$PRG
"
`
/
$link
"
fi
done
saveddir
=
`
pwd
`
M2_HOME
=
`
dirname
"
$PRG
"
`
/..
# make it fully qualified
M2_HOME
=
`
cd
"
$M2_HOME
"
&&
pwd
`
cd
"
$saveddir
"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if
$cygwin
;
then
[
-n
"
$M2_HOME
"
]
&&
M2_HOME
=
`
cygpath
--unix
"
$M2_HOME
"
`
[
-n
"
$JAVA_HOME
"
]
&&
JAVA_HOME
=
`
cygpath
--unix
"
$JAVA_HOME
"
`
[
-n
"
$CLASSPATH
"
]
&&
CLASSPATH
=
`
cygpath
--path
--unix
"
$CLASSPATH
"
`
fi
# For Mingw, ensure paths are in UNIX format before anything is touched
if
$mingw
;
then
[
-n
"
$M2_HOME
"
]
&&
M2_HOME
=
"
`
(
cd
"
$M2_HOME
"
;
pwd
)
`
"
[
-n
"
$JAVA_HOME
"
]
&&
JAVA_HOME
=
"
`
(
cd
"
$JAVA_HOME
"
;
pwd
)
`
"
fi
if
[
-z
"
$JAVA_HOME
"
]
;
then
javaExecutable
=
"
`
which javac
`
"
if
[
-n
"
$javaExecutable
"
]
&&
!
[
"
`
expr
\"
$javaExecutable
\"
:
'\([^ ]*\)'
`
"
=
"no"
]
;
then
# readlink(1) is not available as standard on Solaris 10.
readLink
=
`
which
readlink
`
if
[
!
`
expr
"
$readLink
"
:
'\([^ ]*\)'
`
=
"no"
]
;
then
if
$darwin
;
then
javaHome
=
"
`
dirname
\"
$javaExecutable
\"
`
"
javaExecutable
=
"
`
cd
\"
$javaHome
\"
&&
pwd
-P
`
/javac"
else
javaExecutable
=
"
`
readlink
-f
\"
$javaExecutable
\"
`
"
fi
javaHome
=
"
`
dirname
\"
$javaExecutable
\"
`
"
javaHome
=
`
expr
"
$javaHome
"
:
'\(.*\)/bin'
`
JAVA_HOME
=
"
$javaHome
"
export
JAVA_HOME
fi
fi
fi
if
[
-z
"
$JAVACMD
"
]
;
then
if
[
-n
"
$JAVA_HOME
"
]
;
then
if
[
-x
"
$JAVA_HOME
/jre/sh/java"
]
;
then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD
=
"
$JAVA_HOME
/jre/sh/java"
else
JAVACMD
=
"
$JAVA_HOME
/bin/java"
fi
else
JAVACMD
=
"
`
\\
unset
-f
command
;
\\
command
-v
java
`
"
fi
fi
if
[
!
-x
"
$JAVACMD
"
]
;
then
echo
"Error: JAVA_HOME is not defined correctly."
>
&2
echo
" We cannot execute
$JAVACMD
"
>
&2
exit
1
fi
if
[
-z
"
$JAVA_HOME
"
]
;
then
echo
"Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER
=
org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir
()
{
if
[
-z
"
$1
"
]
then
echo
"Path not specified to find_maven_basedir"
return
1
fi
basedir
=
"
$1
"
wdir
=
"
$1
"
while
[
"
$wdir
"
!=
'/'
]
;
do
if
[
-d
"
$wdir
"
/.mvn
]
;
then
basedir
=
$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if
[
-d
"
${
wdir
}
"
]
;
then
wdir
=
`
cd
"
$wdir
/.."
;
pwd
`
fi
# end of workaround
done
echo
"
${
basedir
}
"
}
# concatenates all lines of a file
concat_lines
()
{
if
[
-f
"
$1
"
]
;
then
echo
"
$(
tr
-s
'\n'
' '
<
"
$1
"
)
"
fi
}
BASE_DIR
=
`
find_maven_basedir
"
$(
pwd
)
"
`
if
[
-z
"
$BASE_DIR
"
]
;
then
exit
1
;
fi
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
if
[
-r
"
$BASE_DIR
/.mvn/wrapper/maven-wrapper.jar"
]
;
then
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
"Found .mvn/wrapper/maven-wrapper.jar"
fi
else
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
"Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
fi
if
[
-n
"
$MVNW_REPOURL
"
]
;
then
jarUrl
=
"
$MVNW_REPOURL
/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
else
jarUrl
=
"https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
fi
while
IFS
=
"="
read
key value
;
do
case
"
$key
"
in
(
wrapperUrl
)
jarUrl
=
"
$value
"
;
break
;;
esac
done
<
"
$BASE_DIR
/.mvn/wrapper/maven-wrapper.properties"
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
"Downloading from:
$jarUrl
"
fi
wrapperJarPath
=
"
$BASE_DIR
/.mvn/wrapper/maven-wrapper.jar"
if
$cygwin
;
then
wrapperJarPath
=
`
cygpath
--path
--windows
"
$wrapperJarPath
"
`
fi
if
command
-v
wget
>
/dev/null
;
then
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
"Found wget ... using wget"
fi
if
[
-z
"
$MVNW_USERNAME
"
]
||
[
-z
"
$MVNW_PASSWORD
"
]
;
then
wget
"
$jarUrl
"
-O
"
$wrapperJarPath
"
||
rm
-f
"
$wrapperJarPath
"
else
wget
--http-user
=
$MVNW_USERNAME
--http-password
=
$MVNW_PASSWORD
"
$jarUrl
"
-O
"
$wrapperJarPath
"
||
rm
-f
"
$wrapperJarPath
"
fi
elif
command
-v
curl
>
/dev/null
;
then
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
"Found curl ... using curl"
fi
if
[
-z
"
$MVNW_USERNAME
"
]
||
[
-z
"
$MVNW_PASSWORD
"
]
;
then
curl
-o
"
$wrapperJarPath
"
"
$jarUrl
"
-f
else
curl
--user
$MVNW_USERNAME
:
$MVNW_PASSWORD
-o
"
$wrapperJarPath
"
"
$jarUrl
"
-f
fi
else
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
"Falling back to using Java to download"
fi
javaClass
=
"
$BASE_DIR
/.mvn/wrapper/MavenWrapperDownloader.java"
# For Cygwin, switch paths to Windows format before running javac
if
$cygwin
;
then
javaClass
=
`
cygpath
--path
--windows
"
$javaClass
"
`
fi
if
[
-e
"
$javaClass
"
]
;
then
if
[
!
-e
"
$BASE_DIR
/.mvn/wrapper/MavenWrapperDownloader.class"
]
;
then
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
" - Compiling MavenWrapperDownloader.java ..."
fi
# Compiling the Java class
(
"
$JAVA_HOME
/bin/javac"
"
$javaClass
"
)
fi
if
[
-e
"
$BASE_DIR
/.mvn/wrapper/MavenWrapperDownloader.class"
]
;
then
# Running the downloader
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
" - Running MavenWrapperDownloader.java ..."
fi
(
"
$JAVA_HOME
/bin/java"
-cp
.mvn/wrapper MavenWrapperDownloader
"
$MAVEN_PROJECTBASEDIR
"
)
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
export
MAVEN_PROJECTBASEDIR
=
${
MAVEN_BASEDIR
:-
"
$BASE_DIR
"
}
if
[
"
$MVNW_VERBOSE
"
=
true
]
;
then
echo
$MAVEN_PROJECTBASEDIR
fi
MAVEN_OPTS
=
"
$(
concat_lines
"
$MAVEN_PROJECTBASEDIR
/.mvn/jvm.config"
)
$MAVEN_OPTS
"
# For Cygwin, switch paths to Windows format before running java
if
$cygwin
;
then
[
-n
"
$M2_HOME
"
]
&&
M2_HOME
=
`
cygpath
--path
--windows
"
$M2_HOME
"
`
[
-n
"
$JAVA_HOME
"
]
&&
JAVA_HOME
=
`
cygpath
--path
--windows
"
$JAVA_HOME
"
`
[
-n
"
$CLASSPATH
"
]
&&
CLASSPATH
=
`
cygpath
--path
--windows
"
$CLASSPATH
"
`
[
-n
"
$MAVEN_PROJECTBASEDIR
"
]
&&
MAVEN_PROJECTBASEDIR
=
`
cygpath
--path
--windows
"
$MAVEN_PROJECTBASEDIR
"
`
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS
=
"
$MAVEN_CONFIG
$@
"
export
MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER
=
org.apache.maven.wrapper.MavenWrapperMain
exec
"
$JAVACMD
"
\
$MAVEN_OPTS
\
$MAVEN_DEBUG_OPTS
\
-classpath
"
$MAVEN_PROJECTBASEDIR
/.mvn/wrapper/maven-wrapper.jar"
\
"-Dmaven.home=
${
M2_HOME
}
"
\
"-Dmaven.multiModuleProjectDirectory=
${
MAVEN_PROJECTBASEDIR
}
"
\
${
WRAPPER_LAUNCHER
}
$MAVEN_CONFIG
"
$@
"
IJPay-Plugin/IJPay-AliPay-Starter-Demo/mvnw.cmd
0 → 100644
浏览文件 @
672bc8d3
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM https://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo
off
@REM set title of command window
title
%
0
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
@if
"
%MAVEN_BATCH_ECHO%
"
==
"on"
echo
%MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if
"
%HOME%
"
==
""
(
set
"HOME=
%HOMEDRIVE%%
HOMEPATH
%
"
)
@REM Execute a user defined script before this one
if
not
"
%MAVEN_SKIP_RC%
"
==
""
goto
skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if
exist
"
%USERPROFILE%
\mavenrc_pre.bat"
call
"
%USERPROFILE%
\mavenrc_pre.bat"
%
*
if
exist
"
%USERPROFILE%
\mavenrc_pre.cmd"
call
"
%USERPROFILE%
\mavenrc_pre.cmd"
%
*
:skipRcPre
@setlocal
set
ERROR_CODE
=
0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if
not
"
%JAVA_HOME%
"
==
""
goto
OkJHome
echo
.
echo
Error
:
JAVA_HOME
not
found
in
your
environment
.
>&
2
echo
Please
set
the
JAVA_HOME
variable
in
your
environment
to
match
the
>&
2
echo
location
of
your
Java
installation
.
>&
2
echo
.
goto
error
:OkJHome
if
exist
"
%JAVA_HOME%
\bin\java.exe"
goto
init
echo
.
echo
Error
:
JAVA_HOME
is
set
to
an
invalid
directory
.
>&
2
echo
JAVA_HOME
=
"
%JAVA_HOME%
"
>&
2
echo
Please
set
the
JAVA_HOME
variable
in
your
environment
to
match
the
>&
2
echo
location
of
your
Java
installation
.
>&
2
echo
.
goto
error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set
MAVEN_PROJECTBASEDIR
=
%MAVEN_BASEDIR%
IF
NOT
"
%MAVEN_PROJECTBASEDIR%
"
==
""
goto
endDetectBaseDir
set
EXEC_DIR
=
%CD%
set
WDIR
=
%EXEC_DIR%
:findBaseDir
IF
EXIST
"
%WDIR%
"
\.mvn
goto
baseDirFound
cd
..
IF
"
%WDIR%
"
==
"
%CD%
"
goto
baseDirNotFound
set
WDIR
=
%CD%
goto
findBaseDir
:baseDirFound
set
MAVEN_PROJECTBASEDIR
=
%WDIR%
cd
"
%EXEC_DIR%
"
goto
endDetectBaseDir
:baseDirNotFound
set
MAVEN_PROJECTBASEDIR
=
%EXEC_DIR%
cd
"
%EXEC_DIR%
"
:endDetectBaseDir
IF
NOT
EXIST
"
%MAVEN_PROJECTBASEDIR%
\.mvn\jvm.config"
goto
endReadAdditionalConfig
@setlocal
EnableExtensions
EnableDelayedExpansion
for
/F
"usebackq delims="
%%a
in
(
"
%MAVEN_PROJECTBASEDIR%
\.mvn\jvm.config"
)
do
set
JVM_CONFIG_MAVEN_PROPS
=
!JVM_CONFIG_MAVEN_PROPS!
%%a
@endlocal
&
set
JVM_CONFIG_MAVEN_PROPS
=
%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET
MAVEN_JAVA_EXE
=
"
%JAVA_HOME%
\bin\java.exe"
set
WRAPPER_JAR
=
"
%MAVEN_PROJECTBASEDIR%
\.mvn\wrapper\maven-wrapper.jar"
set
WRAPPER_LAUNCHER
=
org
.apache.maven.wrapper.MavenWrapperMain
set
DOWNLOAD_URL
=
"https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
FOR
/F
"usebackq tokens=1,2 delims=="
%%A
IN
(
"
%MAVEN_PROJECTBASEDIR%
\.mvn\wrapper\maven-wrapper.properties"
)
DO
(
IF
"
%%A
"
==
"wrapperUrl"
SET
DOWNLOAD_URL
=
%%B
)
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
if
exist
%WRAPPER_JAR%
(
if
"
%MVNW_VERBOSE%
"
==
"true"
(
echo
Found
%WRAPPER_JAR%
)
)
else
(
if
not
"
%MVNW_REPOURL%
"
==
""
(
SET
DOWNLOAD_URL
=
"
%MVNW_REPOURL%
/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
)
if
"
%MVNW_VERBOSE%
"
==
"true"
(
echo
Couldn
't find
%WRAPPER_JAR%
, downloading it ...
echo Downloading from:
%DOWNLOAD_URL%
)
powershell -Command "&{"
^
"$webclient = new-object System.Net.WebClient;"
^
"if (-not ([string]::IsNullOrEmpty('
%MVNW_USERNAME%
') -and [string]::IsNullOrEmpty('
%MVNW_PASSWORD%
'))) {"
^
"$webclient.Credentials = new-object System.Net.NetworkCredential('
%MVNW_USERNAME%
', '
%MVNW_PASSWORD%
');"
^
"}"
^
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('
%DOWNLOAD_URL%
', '
%WRAPPER_JAR%
')"
^
"}"
if "
%MVNW_VERBOSE%
" == "true" (
echo Finished downloading
%WRAPPER_JAR%
)
)
@REM End of extension
@REM Provide a "standardized" way to retrieve the CLI args that will
@REM work with both Windows and non-Windows executions.
set MAVEN_CMD_LINE_ARGS=
%
*
%MAVEN_JAVA_EXE%
^
%JVM_CONFIG_MAVEN_PROPS%
^
%MAVEN_OPTS%
^
%MAVEN_DEBUG_OPTS%
^
-classpath
%WRAPPER_JAR%
^
"-Dmaven.multiModuleProjectDirectory=
%MAVEN_PROJECTBASEDIR%
"
^
%WRAPPER_LAUNCHER%
%MAVEN_CONFIG%
%
*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=
%ERROR_CODE%
if not "
%MAVEN_SKIP_RC%
"=="" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "
%USERPROFILE%
\mavenrc_post.bat" call "
%USERPROFILE%
\mavenrc_post.bat"
if exist "
%USERPROFILE%
\mavenrc_post.cmd" call "
%USERPROFILE%
\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to '
on
'
if "
%MAVEN_BATCH_PAUSE%
"=="on" pause
if "
%MAVEN_TERMINATE_CMD%
"=="on" exit
%ERROR_CODE%
cmd /C exit /B
%ERROR_CODE%
IJPay-Plugin/IJPay-AliPay-Starter-Demo/pom.xml
0 → 100644
浏览文件 @
672bc8d3
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-parent
</artifactId>
<version>
2.7.4
</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<groupId>
com.github.javen205
</groupId>
<artifactId>
IJPay-AliPay-Starter-Demo
</artifactId>
<version>
0.0.1-SNAPSHOT
</version>
<name>
${project.artifactId}
</name>
<description>
IJPay-AliPay-Starter-Demo
</description>
<properties>
<java.version>
1.8
</java.version>
<fastjson.version>
2.0.14
</fastjson.version>
<ijpay-alipay-starters.version>
2.9.2
</ijpay-alipay-starters.version>
<commons-lang.version>
3.12.0
</commons-lang.version>
</properties>
<dependencies>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-devtools
</artifactId>
<scope>
runtime
</scope>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
com.github.javen205
</groupId>
<artifactId>
ijpay-alipay-spring-boot-starters
</artifactId>
<version>
${ijpay-alipay-starters.version}
</version>
</dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
fastjson
</artifactId>
<version>
${fastjson.version}
</version>
</dependency>
<dependency>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-lang3
</artifactId>
<version>
${commons-lang.version}
</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
IJPay-Plugin/IJPay-AliPay-Starter-Demo/src/main/java/com/ijpay/AliPayStarterDemoApplication.java
0 → 100644
浏览文件 @
672bc8d3
package
com.ijpay
;
import
com.ijpay.config.StartupRunner
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.context.annotation.Bean
;
/**
* <p>IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付等常用的支付方式以及各种常用的接口。</p>
*
* <p>不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。 </p>
*
* <p>IJPay 交流群: 723992875、864988890</p>
*
* <p>Node.js 版: <a href="https://gitee.com/javen205/TNWX">https://gitee.com/javen205/TNWX</a></p>
*
* @author Javen
*/
@SpringBootApplication
public
class
AliPayStarterDemoApplication
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
AliPayStarterDemoApplication
.
class
,
args
);
}
@Bean
public
StartupRunner
startupRunner
()
{
return
new
StartupRunner
();
}
}
IJPay-Plugin/IJPay-AliPay-Starter-Demo/src/main/java/com/ijpay/config/AliPayConfigurer.java
0 → 100644
浏览文件 @
672bc8d3
package
com.ijpay.config
;
import
com.alibaba.fastjson.serializer.SerializerFeature
;
import
com.alibaba.fastjson.support.config.FastJsonConfig
;
import
com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter
;
import
com.ijpay.alipay.starter.interceptor.AliPayInterceptor
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.http.MediaType
;
import
org.springframework.http.converter.HttpMessageConverter
;
import
org.springframework.http.converter.StringHttpMessageConverter
;
import
org.springframework.web.servlet.config.annotation.InterceptorRegistry
;
import
org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport
;
import
java.nio.charset.StandardCharsets
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* <p>IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付等常用的支付方式以及各种常用的接口。</p>
*
* <p>不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。 </p>
*
* <p>IJPay 交流群: 723992875、864988890</p>
*
* <p>Node.js 版: <a href="https://gitee.com/javen205/TNWX">https://gitee.com/javen205/TNWX</a></p>
*
* @author Javen
*/
@Configuration
public
class
AliPayConfigurer
extends
WebMvcConfigurationSupport
{
@Override
public
void
addInterceptors
(
InterceptorRegistry
registry
)
{
registry
.
addInterceptor
(
new
AliPayInterceptor
()).
addPathPatterns
(
"/aliPay/**"
);
super
.
addInterceptors
(
registry
);
}
@Override
public
void
addResourceHandlers
(
ResourceHandlerRegistry
registry
)
{
// 将所有/static/** 访问都映射到classpath:/static/ 目录下
registry
.
addResourceHandler
(
"/static/**"
).
addResourceLocations
(
"classpath:/static/"
);
}
@Override
public
void
configureMessageConverters
(
List
<
HttpMessageConverter
<?>>
converters
)
{
super
.
configureMessageConverters
(
converters
);
FastJsonHttpMessageConverter
converter
=
new
FastJsonHttpMessageConverter
();
FastJsonConfig
config
=
new
FastJsonConfig
();
config
.
setSerializerFeatures
(
// 保留map空的字段
SerializerFeature
.
WriteMapNullValue
,
// 将String类型的null转成""
SerializerFeature
.
WriteNullStringAsEmpty
,
// 将Number类型的null转成0
SerializerFeature
.
WriteNullNumberAsZero
,
// 将List类型的null转成[]
SerializerFeature
.
WriteNullListAsEmpty
,
// 将Boolean类型的null转成false
SerializerFeature
.
WriteNullBooleanAsFalse
,
// 避免循环引用
SerializerFeature
.
DisableCircularReferenceDetect
);
converter
.
setFastJsonConfig
(
config
);
converter
.
setDefaultCharset
(
StandardCharsets
.
UTF_8
);
List
<
MediaType
>
mediaTypeList
=
new
ArrayList
<>();
// 解决中文乱码问题,相当于在Controller上的@RequestMapping中加了个属性produces = "application/json"
mediaTypeList
.
add
(
MediaType
.
APPLICATION_JSON
);
converter
.
setSupportedMediaTypes
(
mediaTypeList
);
converters
.
add
(
converter
);
converters
.
add
(
responseBodyConverter
());
}
@Bean
public
HttpMessageConverter
<
String
>
responseBodyConverter
()
{
return
new
StringHttpMessageConverter
(
StandardCharsets
.
UTF_8
);
}
}
IJPay-Plugin/IJPay-AliPay-Starter-Demo/src/main/java/com/ijpay/config/StartupRunner.java
0 → 100644
浏览文件 @
672bc8d3
package
com.ijpay.config
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.boot.CommandLineRunner
;
import
org.springframework.core.annotation.Order
;
/**
* <p>IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付等常用的支付方式以及各种常用的接口。</p>
*
* <p>不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。 </p>
*
* <p>IJPay 交流群: 723992875、864988890</p>
*
* <p>Node.js 版: <a href="https://gitee.com/javen205/TNWX">https://gitee.com/javen205/TNWX</a></p>
*
* @author Javen
*/
@Order
(
1
)
public
class
StartupRunner
implements
CommandLineRunner
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
StartupRunner
.
class
);
@Override
public
void
run
(
String
...
args
)
{
logger
.
info
(
"startup runner"
);
}
}
IJPay-Plugin/IJPay-AliPay-Starter-Demo/src/main/java/com/ijpay/controller/AliPayController.java
0 → 100644
浏览文件 @
672bc8d3
package
com.ijpay.controller
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.util.RandomUtil
;
import
com.alipay.api.AlipayApiException
;
import
com.alipay.api.domain.AlipayTradePagePayModel
;
import
com.alipay.api.domain.AlipayTradeWapPayModel
;
import
com.alipay.api.internal.util.AlipaySignature
;
import
com.ijpay.alipay.AliPayApi
;
import
com.ijpay.alipay.AliPayApiConfig
;
import
com.ijpay.alipay.AliPayApiConfigKit
;
import
com.ijpay.alipay.starter.controller.AbstractAliPayController
;
import
com.ijpay.utils.StringUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* <p>IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付等常用的支付方式以及各种常用的接口。</p>
*
* <p>不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。 </p>
*
* <p>IJPay 交流群: 723992875、864988890</p>
*
* <p>Node.js 版: <a href="https://gitee.com/javen205/TNWX">https://gitee.com/javen205/TNWX</a></p>
*
* <p>支付宝支付</p>
*
* @author Javen
*/
@Slf4j
@RestController
@RequestMapping
(
"/aliPay"
)
public
class
AliPayController
extends
AbstractAliPayController
{
// 普通公钥模式
// private final static String NOTIFY_URL = "/aliPay/notifyUrl";
/**
* 证书模式
*/
private
final
static
String
NOTIFY_URL
=
"/aliPay/certNotifyUrl"
;
// private final static String RETURN_URL = "/aliPay/returnUrl";
/**
* 证书模式
*/
private
final
static
String
RETURN_URL
=
"/aliPay/certReturnUrl"
;
@GetMapping
(
""
)
public
String
index
()
{
return
"欢迎使用 IJPay 中的支付宝支付 -By Javen <br/><br> 交流群:723992875、864988890"
;
}
@GetMapping
(
"/switchConfig"
)
public
AliPayApiConfig
switchConfig
()
{
String
appId
=
aliPayApiConfig
.
getAppId
();
AliPayApiConfig
apiConfig
=
AliPayApiConfigKit
.
getApiConfig
(
appId
);
log
.
info
(
"当前支付宝支付配置\n {}"
,
apiConfig
);
if
(
null
!=
aliPayProperties
&&
CollUtil
.
isNotEmpty
(
aliPayProperties
.
getConfigs
()))
{
List
<
AliPayApiConfig
>
configs
=
aliPayProperties
.
getConfigs
().
stream
()
.
filter
(
item
->
!
appId
.
equals
(
item
.
getAppId
()))
.
collect
(
Collectors
.
toList
());
if
(
CollUtil
.
isNotEmpty
(
configs
))
{
apiConfig
=
configs
.
get
(
RandomUtil
.
randomInt
(
0
,
configs
.
size
()));
}
AliPayApiConfigKit
.
setThreadLocalAliPayApiConfig
(
apiConfig
);
aliPayApiConfig
=
apiConfig
;
}
log
.
info
(
"切换后支付宝支付配置\n {}"
,
AliPayApiConfigKit
.
getAliPayApiConfig
());
return
aliPayApiConfig
;
}
@GetMapping
(
"/getConfig"
)
public
AliPayApiConfig
getWxPayApiConfig
()
{
log
.
info
(
"当前支付宝支付配置信息\n {}"
,
AliPayApiConfigKit
.
getApiConfig
(
aliPayApiConfig
.
getAppId
()));
log
.
info
(
"配置文件中支付宝支付配置信息\n {}"
,
aliPayProperties
);
return
aliPayApiConfig
;
}
@RequestMapping
(
value
=
"/wapPay"
)
public
void
wapPay
(
HttpServletResponse
response
)
{
AliPayApiConfig
config
=
AliPayApiConfigKit
.
getAliPayApiConfig
();
String
body
=
"我是测试数据-By Javen"
;
String
subject
=
"Javen Wap支付测试"
;
String
totalAmount
=
"1"
;
String
passBackParams
=
"1"
;
String
returnUrl
=
config
.
getDomain
()
+
RETURN_URL
;
String
notifyUrl
=
config
.
getDomain
()
+
NOTIFY_URL
;
AlipayTradeWapPayModel
model
=
new
AlipayTradeWapPayModel
();
model
.
setBody
(
body
);
model
.
setSubject
(
subject
);
model
.
setTotalAmount
(
totalAmount
);
model
.
setPassbackParams
(
passBackParams
);
String
outTradeNo
=
StringUtils
.
getOutTradeNo
();
System
.
out
.
println
(
"wap outTradeNo>"
+
outTradeNo
);
model
.
setOutTradeNo
(
outTradeNo
);
model
.
setProductCode
(
"QUICK_WAP_PAY"
);
try
{
AliPayApi
.
wapPay
(
response
,
model
,
returnUrl
,
notifyUrl
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
/**
* PC支付
*/
@RequestMapping
(
value
=
"/pcPay"
)
public
void
pcPay
(
HttpServletResponse
response
)
{
try
{
AliPayApiConfig
config
=
AliPayApiConfigKit
.
getAliPayApiConfig
();
String
totalAmount
=
"88.88"
;
String
outTradeNo
=
StringUtils
.
getOutTradeNo
();
log
.
info
(
"pc outTradeNo>"
+
outTradeNo
);
String
returnUrl
=
config
.
getDomain
()
+
RETURN_URL
;
String
notifyUrl
=
config
.
getDomain
()
+
NOTIFY_URL
;
AlipayTradePagePayModel
model
=
new
AlipayTradePagePayModel
();
model
.
setOutTradeNo
(
outTradeNo
);
model
.
setProductCode
(
"FAST_INSTANT_TRADE_PAY"
);
model
.
setTotalAmount
(
totalAmount
);
model
.
setSubject
(
"Javen PC支付测试"
);
model
.
setBody
(
"Javen IJPay PC支付测试"
);
model
.
setPassbackParams
(
"passback_params"
);
/**
* 花呗分期相关的设置,测试环境不支持花呗分期的测试
* hb_fq_num代表花呗分期数,仅支持传入3、6、12,其他期数暂不支持,传入会报错;
* hb_fq_seller_percent代表卖家承担收费比例,商家承担手续费传入100,用户承担手续费传入0,仅支持传入100、0两种,其他比例暂不支持,传入会报错。
*/
// ExtendParams extendParams = new ExtendParams();
// extendParams.setHbFqNum("3");
// extendParams.setHbFqSellerPercent("0");
// model.setExtendParams(extendParams);
AliPayApi
.
tradePage
(
response
,
model
,
notifyUrl
,
returnUrl
);
// https://opensupport.alipay.com/support/helpcenter/192/201602488772?ant_source=antsupport
// Alipay Easy SDK(新版)目前只支持输出form表单,不支持打印出url链接。
// AliPayApi.tradePage(response, "GET", model, notifyUrl, returnUrl);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
@RequestMapping
(
value
=
"/returnUrl"
)
public
String
returnUrl
(
HttpServletRequest
request
)
{
try
{
AliPayApiConfig
config
=
AliPayApiConfigKit
.
getAliPayApiConfig
();
// 获取支付宝GET过来反馈信息
Map
<
String
,
String
>
map
=
AliPayApi
.
toMap
(
request
);
for
(
Map
.
Entry
<
String
,
String
>
entry
:
map
.
entrySet
())
{
System
.
out
.
println
(
entry
.
getKey
()
+
" = "
+
entry
.
getValue
());
}
boolean
verifyResult
=
AlipaySignature
.
rsaCheckV1
(
map
,
config
.
getAliPayPublicKey
(),
"UTF-8"
,
"RSA2"
);
if
(
verifyResult
)
{
// TODO 请在这里加上商户的业务逻辑程序代码
System
.
out
.
println
(
"return_url 验证成功"
);
return
"success"
;
}
else
{
System
.
out
.
println
(
"return_url 验证失败"
);
// TODO
return
"failure"
;
}
}
catch
(
AlipayApiException
e
)
{
e
.
printStackTrace
();
return
"failure"
;
}
}
@RequestMapping
(
value
=
"/certReturnUrl"
)
public
String
certReturnUrl
(
HttpServletRequest
request
)
{
try
{
AliPayApiConfig
config
=
AliPayApiConfigKit
.
getAliPayApiConfig
();
// 获取支付宝GET过来反馈信息
Map
<
String
,
String
>
map
=
AliPayApi
.
toMap
(
request
);
for
(
Map
.
Entry
<
String
,
String
>
entry
:
map
.
entrySet
())
{
System
.
out
.
println
(
entry
.
getKey
()
+
" = "
+
entry
.
getValue
());
}
boolean
verifyResult
=
AlipaySignature
.
rsaCertCheckV1
(
map
,
config
.
getAliPayCertPath
(),
"UTF-8"
,
"RSA2"
);
if
(
verifyResult
)
{
// TODO 请在这里加上商户的业务逻辑程序代码
System
.
out
.
println
(
"certReturnUrl 验证成功"
);
return
"success"
;
}
else
{
System
.
out
.
println
(
"certReturnUrl 验证失败"
);
// TODO
return
"failure"
;
}
}
catch
(
AlipayApiException
e
)
{
e
.
printStackTrace
();
return
"failure"
;
}
}
@RequestMapping
(
value
=
"/notifyUrl"
)
public
String
notifyUrl
(
HttpServletRequest
request
)
{
try
{
AliPayApiConfig
config
=
AliPayApiConfigKit
.
getAliPayApiConfig
();
// 获取支付宝POST过来反馈信息
Map
<
String
,
String
>
params
=
AliPayApi
.
toMap
(
request
);
for
(
Map
.
Entry
<
String
,
String
>
entry
:
params
.
entrySet
())
{
System
.
out
.
println
(
entry
.
getKey
()
+
" = "
+
entry
.
getValue
());
}
boolean
verifyResult
=
AlipaySignature
.
rsaCheckV1
(
params
,
config
.
getAliPayPublicKey
(),
"UTF-8"
,
"RSA2"
);
if
(
verifyResult
)
{
// TODO 请在这里加上商户的业务逻辑程序代码 异步通知可能出现订单重复通知 需要做去重处理
System
.
out
.
println
(
"notify_url 验证成功succcess"
);
return
"success"
;
}
else
{
System
.
out
.
println
(
"notify_url 验证失败"
);
// TODO
return
"failure"
;
}
}
catch
(
AlipayApiException
e
)
{
e
.
printStackTrace
();
return
"failure"
;
}
}
@RequestMapping
(
value
=
"/certNotifyUrl"
)
public
String
certNotifyUrl
(
HttpServletRequest
request
)
{
try
{
AliPayApiConfig
config
=
AliPayApiConfigKit
.
getAliPayApiConfig
();
// 获取支付宝POST过来反馈信息
Map
<
String
,
String
>
params
=
AliPayApi
.
toMap
(
request
);
for
(
Map
.
Entry
<
String
,
String
>
entry
:
params
.
entrySet
())
{
System
.
out
.
println
(
entry
.
getKey
()
+
" = "
+
entry
.
getValue
());
}
boolean
verifyResult
=
AlipaySignature
.
rsaCertCheckV1
(
params
,
config
.
getAliPayCertPath
(),
"UTF-8"
,
"RSA2"
);
if
(
verifyResult
)
{
// TODO 请在这里加上商户的业务逻辑程序代码 异步通知可能出现订单重复通知 需要做去重处理
System
.
out
.
println
(
"certNotifyUrl 验证成功succcess"
);
return
"success"
;
}
else
{
System
.
out
.
println
(
"certNotifyUrl 验证失败"
);
// TODO
return
"failure"
;
}
}
catch
(
AlipayApiException
e
)
{
e
.
printStackTrace
();
return
"failure"
;
}
}
}
IJPay-Plugin/IJPay-AliPay-Starter-Demo/src/main/java/com/ijpay/utils/StringUtils.java
0 → 100644
浏览文件 @
672bc8d3
package
com.ijpay.utils
;
import
java.io.UnsupportedEncodingException
;
import
java.net.URLEncoder
;
import
java.text.MessageFormat
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
import
java.util.Locale
;
import
java.util.Random
;
import
java.util.UUID
;
/**
* 字符串工具类,继承lang3字符串工具类
*
* @author L.com
*/
public
final
class
StringUtils
extends
org
.
apache
.
commons
.
lang3
.
StringUtils
{
public
static
String
encode
(
String
str
)
{
String
encode
=
null
;
try
{
encode
=
URLEncoder
.
encode
(
str
,
"UTF-8"
);
}
catch
(
UnsupportedEncodingException
e
)
{
e
.
printStackTrace
();
}
return
encode
;
}
/**
* 获取UUID,去掉`-`的
*
* @return {String}
*/
public
static
String
generateStr
()
{
return
UUID
.
randomUUID
().
toString
().
replace
(
"-"
,
""
);
}
/**
* 要求外部订单号必须唯一。
*
* @return {String}
*/
public
static
String
getOutTradeNo
()
{
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"MMddHHmmss"
,
Locale
.
getDefault
());
Date
date
=
new
Date
();
String
key
=
format
.
format
(
date
);
key
=
key
+
System
.
currentTimeMillis
();
key
=
key
.
substring
(
0
,
15
);
return
key
;
}
/**
* 字符串格式化
* <p>
* use: format("my name is {0}, and i like {1}!", "L.cm", "java")
* <p>
* int long use {0,number,#}
*
* @param s
* @param args
* @return {String}转换后的字符串
*/
public
static
String
format
(
String
s
,
Object
...
args
)
{
return
MessageFormat
.
format
(
s
,
args
);
}
/**
* 替换某个字符
*
* @param str
* @param regex
* @param args
* @return {String}
*/
public
static
String
replace
(
String
str
,
String
regex
,
String
...
args
)
{
int
length
=
args
.
length
;
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
str
=
str
.
replaceFirst
(
regex
,
args
[
i
]);
}
return
str
;
}
/**
* 清理字符串,清理出某些不可见字符
*
* @param txt
* @return {String}
*/
public
static
String
cleanChars
(
String
txt
)
{
return
txt
.
replaceAll
(
"[ `·•�\\f\\t\\v]"
,
""
);
}
/**
* 随机字符串
*/
private
static
final
String
INT_TEMP
=
"0123456789"
;
private
static
final
String
STR_TEMP
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
;
private
static
final
String
ALL_TEMP
=
INT_TEMP
+
STR_TEMP
;
private
static
final
Random
RANDOM
=
new
Random
();
/**
* 生成的随机数类型
*/
public
enum
RandomType
{
/**
* 整数
*/
INT
,
/**
* 字符串
*/
STRING
,
/**
* 所有类型
*/
ALL
}
/**
* 随机数生成
*
* @param count
* @return {String}
*/
public
static
String
random
(
int
count
,
RandomType
randomType
)
{
if
(
count
==
0
)
{
return
""
;
}
if
(
count
<
0
)
{
throw
new
IllegalArgumentException
(
"Requested random string length "
+
count
+
" is less than 0."
);
}
char
[]
buffer
=
new
char
[
count
];
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
if
(
randomType
.
equals
(
RandomType
.
INT
))
{
buffer
[
i
]
=
INT_TEMP
.
charAt
(
RANDOM
.
nextInt
(
INT_TEMP
.
length
()));
}
else
if
(
randomType
.
equals
(
RandomType
.
STRING
))
{
buffer
[
i
]
=
STR_TEMP
.
charAt
(
RANDOM
.
nextInt
(
STR_TEMP
.
length
()));
}
else
{
buffer
[
i
]
=
ALL_TEMP
.
charAt
(
RANDOM
.
nextInt
(
ALL_TEMP
.
length
()));
}
}
return
new
String
(
buffer
);
}
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
random
(
32
,
RandomType
.
ALL
));
}
}
IJPay-Plugin/IJPay-AliPay-Starter-Demo/src/main/resources/application-prod.yml
0 → 100644
浏览文件 @
672bc8d3
alipay
:
pay
:
configs
:
-
# 支付宝支付网关
serviceUrl
:
serviceUrl
# 是否为证书模式
certModel
:
true
# 应用编号
appId
:
appId
# 应用私钥
privateKey
:
privateKey
# 支付宝公钥
aliPayPublicKey
:
aliPayPublicKey
# 应用公钥证书 (证书模式必须)
appCertPath
:
appCertPath
# 支付宝公钥证书 (证书模式必须)
aliPayCertPath
:
aliPayCertPath
# 支付宝根证书 (证书模式必须)
aliPayRootCertPath
:
aliPayRootCertPath
# 其他附加参数
exParams
:
exParams
-
# 支付宝支付网关
serviceUrl
:
serviceUrl2
# 是否为证书模式
certModel
:
true
# 应用编号
appId
:
appId2
# 应用私钥
privateKey
:
privateKey2
# 支付宝公钥
aliPayPublicKey
:
aliPayPublicKey2
# 应用公钥证书 (证书模式必须)
appCertPath
:
appCertPath2
# 支付宝公钥证书 (证书模式必须)
aliPayCertPath
:
aliPayCertPath2
# 支付宝根证书 (证书模式必须)
aliPayRootCertPath
:
aliPayRootCertPath2
# 其他附加参数
exParams
:
exParams2
server
:
port
:
6666
logging
:
level
:
com.ijpay
:
debug
IJPay-Plugin/IJPay-AliPay-Starter-Demo/src/main/resources/application.yml
0 → 100644
浏览文件 @
672bc8d3
spring
:
profiles
:
active
:
dev
IJPay-Plugin/IJPay-AliPay-Starter-Demo/src/main/resources/banner.txt
0 → 100644
浏览文件 @
672bc8d3
,--. ,--.,------. ,---. ,--. ,-----. ,--.
| | | || .--. ' ,--,--.,--. ,--. ' .-' ,---. ,--.--.`--',--,--, ,---. | |) /_ ,---. ,---. ,-' '-.
| |,--. | || '--' |' ,-. | \ ' / `. `-. | .-. || .--',--.| \| .-. || .-. \| .-. || .-. |'-. .-'
| || '-' /| | --' \ '-' | \ ' .-' || '-' '| | | || || |' '-' '| '--' /' '-' '' '-' ' | |
`--' `-----' `--' `--`--'.-' / `-----' | |-' `--' `--'`--''--'.`- / `------' `---' `---' `--'
`---' `--' `---'
IJPay 让支付触手可及,QQ交流群:723992875、864988890
TNWX 微信系开发脚手架已支持微信支付 https://gitee.com/javen205/TNWX
,-----.,-----.,-----.,-----.,-----.,-----.,-----.,-----.,-----.,-----.,-----.,-----.,-----.,-----.,-----.,-----.,-----.
'-----''-----''-----''-----''-----''-----''-----''-----''-----''-----''-----''-----''-----''-----''-----''-----''-----'
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录